CP/M-80 目次

本書はDOS(ﾃﾞｨｽｸ ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ)自作希望者向けの学習(具体例)用に作成されました。 CP/MはMS-DOSの源流で基本的な仕様はほぼ同一です。 個人向けのDOSとしてこれらの基本部が現在でも大差なく、逆に簡単な分、理解が容易と思われます。 容量的にも数Kﾊﾞｲﾄ程度ですので、比較的容易に読み下せるものと思います。

尚、CP/M-80は元々Intel 8080用に開発されたために全てのｿｰｽは8080の(MOV)ﾆｰﾓﾆｯｸで記述されていましたが、現在ではZ80の(LD)ﾆｰﾓﾆｯｸを理解する人の方がより多いと思われるので、全てZ80の(LD)ﾆｰﾓﾆｯｸに変更しました。 また、BIOSは元々の例が日本では馴染みの少ない物だったのと、不完全なｿｰｽだったため、或るｼｽﾃﾑで使用していたBIOSを見本として使用しました。 このBIOSはHD64180上で動作するため、ｿｰｽはHD64180用です。 また、付録のROMﾓﾆﾀも同様にHD64180用です。

  • 概説
  • BDOS ｿｰｽ
  • BIOS ｿｰｽ
  • CCP ｿｰｽ
  • SUBMIT ｿｰｽ
  • XSUB ｿｰｽ

付録 CP/M-80 ﾏﾆｭｱﾙ

  • 1.1 序説
  • 1.2 機能説明
  • 1.3 ﾃﾞｨｽｸ切り替え
  • 1.4 組み込み命令
  • 1.5 行編集と出力制御
  • 1.6 一時命令
  • 1.7 BDOSｴﾗｰ ﾒｯｾｰｼﾞ
  • 1.8 MDSでのCP/M動作
  • 2 CP/M ｴﾃﾞｨﾀ
  • 3 CP/M ｱｾﾝﾌﾞﾗ
  • 4 CP/M ﾀﾞｲﾅﾐｯｸ ﾃﾞﾊﾞｯｷﾞﾝｸﾞ ﾂｰﾙ(DDT)
  • 5.1 序説
  • 5.2 BDOS呼び出し規約
  • 5.3 ﾌｧｲﾙ間ｺﾋﾟｰ ﾌﾟﾛｸﾞﾗﾑ例
  • 5.4 ﾌｧｲﾙ ﾀﾞﾝﾌﾟ ﾌﾟﾛｸﾞﾗﾑ例
  • 5.5 不順(ﾗﾝﾀﾞﾑ)ｱｸｾｽ ﾌﾟﾛｸﾞﾗﾑ例
  • 5.6 ｼｽﾃﾑ機能一覧
  • 6.1 はじめに
  • 6.2 第一段階ｼｽﾃﾑ再生成
  • 6.3 第2段階ｼｽﾃﾑ生成
  • 6.4 GETSYSとPUTSYSﾌﾟﾛｸﾞﾗﾑ見本
  • 6.5 ﾃﾞｨｽｸ構造
  • 6.6 BIOS移行点
  • 6.7 BIOS見本
  • 6.8 ｺｰﾙﾄﾞ開始ﾛｰﾀﾞ見本
  • 6.9 0ﾍﾟｰｼﾞの予約領域
  • 6.10 ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾃｰﾌﾞﾙ
  • 6.11 DISKDEF ﾏｸﾛ ﾗｲﾌﾞﾗﾘ
  • 6.12 ｾｸﾀの合成と分解
  • 追補A MDS基本I/Oｼｽﾃﾑ(BIOS)
  • 追補B 骨子CBIOS
  • 追補C 骨子GETSYS/PUTSYSﾌﾟﾛｸﾞﾗﾑ
  • 追補D CP/M 2用MDS800ｺｰﾙﾄﾞ開始ﾛｰﾀﾞ
  • 追補E 骨子ｺｰﾙﾄﾞ開始ﾛｰﾀﾞ
  • 追補F CP/Mﾃﾞｨｽｸ定義ﾗｲﾌﾞﾗﾘ
  • 追補G 合成と分解のｱﾙｺﾞﾘｽﾞﾑ
  • 追補H 用語一覧
  • 追補I CP/M ｴﾗｰ ﾒｯｾｰｼﾞ

付録 ROM ﾓﾆﾀ ｿｰｽ

  • 付録 ROM ﾓﾆﾀ ｿｰｽ
注:目次ﾍﾟｲﾝ最下端の基準用第2ｳｨﾝﾄﾞｳをｸﾘｯｸすると、このｳｨﾝﾄﾞｳと同じ形式のｳｨﾝﾄﾞｳが別に表示されます。 この第2ｳｨﾝﾄﾞｳ内のﾘﾝｸは第1ｳｨﾝﾄﾞｳに反映されます。 即ち第2ｳｨﾝﾄﾞｳを基準として使用すると、ﾘﾝｸ参照は別の(即ち第1)ｳｨﾝﾄﾞｳで参照できますので、基準点と参照点を同時に表示できます。 これらのﾘﾝｸはJavaScriptを使用しています。 このため古いﾌﾞﾗｳｻﾞ(IE)やHTML Helpを使用している場合、動作しませんので、対応するIEまたはhhupd.exeで更新してください。 このように第1ｳｨﾝﾄﾞｳと第2ｳｨﾝﾄﾞｳを縦方向に並べて配置して使用することを前提に作成されています。 単一ｳｨﾝﾄﾞｳで使用する場合、ﾄﾋﾟｯｸ(ﾍﾟｰｼﾞ)内のﾘﾝｸはﾊﾞｸﾞのため一回目しか機能しません。 ﾌｫｰｶｽの移動(ｳｨﾝﾄﾞｳの選択)時、ﾀｲﾄﾙ ﾊﾞｰをｸﾘｯｸしないでください。 ﾊﾞｸﾞのため、ﾅﾋﾞｹﾞｰｼｮﾝ ﾍﾟｲﾝの分だけｳｨﾝﾄﾞｳ幅が縮小してしまいます。 ﾄﾋﾟｯｸ内右ｸﾘｯｸのﾒﾆｭｰからﾌﾟﾛﾊﾟﾃｨを選択しないでください。 同じくﾊﾞｸﾞのため、ﾊﾝｸﾞします。

© HERO 2003.

CP/M80本体と付録 CP/M ﾏﾆｭｱﾙ部 © Digital Research 1976～1983.


1 概説

CP/MはBDOS, BIOS, CCPから成りますが、これは各々MS-DOSのMSDOS.SYS, IO.SYS, COMMAND.COMに相当します。 使用者ﾚﾍﾞﾙでの基本的なMS-DOSとの相違点は階層ﾃﾞｨﾚｸﾄﾘの有無程度です。 内部的にはMS-DOSが以降の初期Windows(ﾏﾙﾁ ﾕｰｻﾞ)への移行を意識し、ﾏﾙﾁ ﾀｽｸ対応を意識した構造になっていることです。 これは実現方式がやや異なりなすがCP/Mのﾏﾙﾁ ﾕｰｻﾞ版のMP/Mと類似しています。 このように個人的使用におけるDOS(ﾃﾞｨｽｸ ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ)の基本は、その原型がCP/Mにあります。

CP/Mの使用者ｲﾝﾀｰﾌｪｰｽはMS-DOSと同じ文字型(CUI)です。 これはCCP(MS-DOSではCOMMAND.COM)で行われます。 CCPでの命令行からの処理は一般の応用ﾌﾟﾛｸﾞﾗﾑで行う命令行の解析とその実行と何ら変わりありません。 一般の応用ﾌﾟﾛｸﾞﾗﾑでのそれと異なるのはﾊﾞｯﾁ処理(SUBMITとXSUB)です。 MS-DOSでは～.BATﾌｧｲﾙに処理命令行を記述しますが、基本的にCP/Mでのそれは～.SUBﾌｧｲﾙになるだけです。 CP/MではSUBMIT.COMを起動し、～.SUBから実際にﾊﾞｯﾁ処理可能な$$$.SUBﾌｧｲﾙを生成します。 CCPはこの$$$.SUBﾌｧｲﾙが存在すれば、その内容をｺﾝｿｰﾙからの入力とみなして処理します。 これだけの処理ではCCPﾚﾍﾞﾙでの擬似入力行処理しかできません。 XSUB.COMはこれをBDOS機能のｺﾝｿｰﾙからの行入力機能まで拡張します。 このXSUBにより応用ﾌﾟﾛｸﾞﾗﾑ内からのｺﾝｿｰﾙ行入力もﾊﾞｯﾁ処理が可能になります。 但し、この機能はBDOS機能10のみがその対象ですので、他のｺﾝｿｰﾙ入力機能を使用する応用ﾌﾟﾛｸﾞﾗﾑではﾊﾞｯﾁ処理でのｺﾝｿｰﾙ入力ができません。 SUBMITとXSUBの機能に相当するMS-DOSの処理はCOMMAND.COM内に含まれます。 CP/Mでの具体的なﾊﾞｯﾁ処理はCCP、SUBMIT、XSUBのｿｰｽをご覧ください。

CP/Mのﾃﾞｨｽｸ管理は論理ｾｸﾀ(ﾚｺｰﾄﾞ)単位で行われます。 このﾚｺｰﾄﾞに対してBDOS内部では一連のﾚｺｰﾄﾞ番号として管理されます。 一連のﾚｺｰﾄﾞ番号はBIOSに対して論理ｾｸﾀ番号と論理ﾄﾗｯｸ番号で渡されます。 BIOSではこれらから物理的なﾍｯﾄﾞ、ﾄﾗｯｸ、ｾｸﾀなどに変換し、対応付けます。 CP/Mでの1ﾚｺｰﾄﾞは128ﾊﾞｲﾄ固定です。

これらの情報のみ実際の管理を行うと最低でもﾌｧｲﾙ容量の1/128の管理領域が必要になります。 これはﾚｺｰﾄﾞ位置を記録して置く領域のことで、0～255までの256位置の場合です。 実際には256位置で足る場合は考えにくいので、現実的な最低管理容量はその倍程度(元ﾌｧｲﾙの1/64)になります。 これらの管理領域容量がばかにならないのと、より広範囲の記録装置に対応するため、CP/Mでは別の管理単位で実際の管理を行います。 これは配置区画で、連続する何ﾚｺｰﾄﾞかを一纏めにしてその配置区画に番号を付け管理します。 この容量を配置区画容量(BLS)と呼びます。 この手法はMS-DOSも同じでｱﾛｹｰｼｮﾝ ｻｲｽﾞがこの容量です。

使用した配置区画番号はそのﾌｧｲﾙのFCBの16～31ﾊﾞｲﾄ目の16ﾊﾞｲﾄ内に記録され、ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)として保存されます。 この16ﾊﾞｲﾄはそのﾃﾞｨｽｸの最大配置区画番号が255以下の場合は1ﾊﾞｲﾄ単位で使用され、1ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)に16個の配置区画番号が記録されます。 最大配置区画番号が256以上の場合は2ﾊﾞｲﾄ(ﾜｰﾄﾞ)単位で使用され、1ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)に8個の配置区画番号が記録されます。 同時にCP/Mはﾒﾓﾘ上にﾋﾞｯﾄ単位の配置区画ﾍﾞｸﾀ ﾃｰﾌﾞﾙを持ちます。 これは一連のﾋﾞｯﾄ列で1ﾋﾞｯﾄが1配置区画に対応し、使用(1)/未使用(0)を記録します。 これにより新規ﾚｺｰﾄﾞ書き込み時に全てのﾃﾞｨﾚｸﾄﾘを走査し、未使用ﾚｺｰﾄﾞを検索する膨大な時間を節約します。 単にﾒﾓﾘ上のこのﾃｰﾌﾞﾙで0のﾋﾞｯﾄを検索するのみで未使用配置区画を見つけられ、そのﾋﾞｯﾄ位置から配置区画の先頭ﾚｺｰﾄﾞ番号が容易に計算されます。

各ﾌｧｲﾙの情報はﾃﾞｨﾚｸﾄﾘで一元的に管理されます。 ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘは32ﾊﾞｲﾄから成り、その構成は基本的にFCBと同じです。 異なるのは第1ﾊﾞｲﾄ目で、ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘでは使用者番号です。

ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘとFCBの関係
 | ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ |  |  |  |  |  |  |  |  |  |  |  |  |  |  | FCB
ｵﾌｾｯﾄ | 00 | 01 | 02 | ～ | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | ～ | 31 | 32 | 33 | 34 | 35
内容 | UN | F1 ～ F8 |  |  |  | T1 ～ T3 |  |  | EX | S1 | S2 | RC | D0 ～ DN |  |  | CR | R0 | R1 | R2

ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ各部説明
部分領域 | 説明
UN | 使用者番号(0～15)。
F1～F8 | ASCII大文字での本来のﾌｧｲﾙ名(ﾋﾞｯﾄ7=0)。
T1,T2,T3 | ASCII大文字でのﾌｧｲﾙ形式名(ﾋﾞｯﾄ7=0)。 各々のﾋﾞｯﾄ7は次の目的に使用されます。 T1のﾋﾞｯﾄ7=1 : 読み出し専用(R/O) T2のﾋﾞｯﾄ7=1 : ｼｽﾃﾑ ﾌｧｲﾙ(DIR対象外) T3のﾋﾞｯﾄ7=1 : 未定義
EX | 拡張番号。 一般的に使用者により00Hに設定されますが、ﾌｧｲﾙ入出力中は0～31の範囲の値です。
S1 | 予約(未使用)。
S2 | ﾋﾞｯﾄ7 : ｴﾝﾄﾘ内容更新の有(=0)/無(=1)ﾌﾗｸﾞ。 ﾋﾞｯﾄ3～0 : EXの上位に続く拡張番号ﾋﾞｯﾄで、ﾌｧｲﾙ入出力中は0～15の範囲の値です。 ﾌｧｲﾙの開始(ｵｰﾌﾟﾝ)、作成、初回検索呼び出しでは00Hに設定しなければなりません。
RC | この拡張内のﾚｺｰﾄﾞ数で、0～127の値を採ります。
D0～Dn | 配置区画番号列で、ﾊﾞｲﾄまたはﾜｰﾄﾞ単位です。
CR | 順次ﾌｧｲﾙ操作で読み書きするﾚｺｰﾄﾞ番号で、初回時、一般的に使用者により00Hに設定されます。
R0,R1,R2 | 0～65535範囲の任意の不順(ﾗﾝﾀﾞﾑ)ﾚｺｰﾄﾞ番号で、R0=下位、R1=上位の16ﾋﾞｯﾄとR2のｵｰﾊﾞｰﾌﾛｰ(1/0)で構成します。

1ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘが管理できる容量は最大配置区画番号が255以下の場合でも16×配置区画容量ですので、これを越える場合は何らかの対処が必要になります。 これは各ｴﾝﾄﾘに拡張番号(S2とEX)を付けることで実現します。 即ち或るｴﾝﾄﾘが溢れた場合、次の拡張番号を持つ新しいｴﾝﾄﾘを作成します。 実際にはS2(下位4ﾋﾞｯﾄ)、EX(下位5ﾋﾞｯﾄ)、CR(下位7ﾋﾞｯﾄ)を連結した合計16ﾋﾞｯﾄがそのﾌｧｲﾙ内の相対ﾚｺｰﾄﾞ位置算出の基準になります。 次表は配置区画容量=4Kﾊﾞｲﾄ、総配置区画数>256の場合における各ﾋﾞｯﾄの対応例です。

 | S2 |  |  |  | EX |  |  |  |  | CR
ﾋﾞｯﾄ | 3 | 2 | 1 | 0 | 4 | 3 | 2 | 1 | 0 | 6 | 5 | 4 | 3 | 2 | 1 | 0
意味 | 拡張ｴﾝﾄﾘ番号 |  |  |  |  |  |  |  | ｴﾝﾄﾘ内配置区画位置 |  |  | 配置区画内ﾚｺｰﾄﾞ位置

配置区画容量が4Kﾊﾞｲﾄの場合、配置区画内のﾚｺｰﾄﾞ数は4K/128=32ですので、CRの下位5ﾋﾞｯﾄが対応します。 総配置区画数>256の場合、配置区画番号は2ﾊﾞｲﾄ(1ﾜｰﾄﾞ)で管理されますので、D0～Dnの16ﾊﾞｲﾄ内には8個の配置区画番号が登録され得ます。 従って、この場合のｴﾝﾄﾘ内配置区画位置を示すﾋﾞｯﾄ数は3ﾋﾞｯﾄで、本例の場合、EXの最下位1ﾋﾞｯﾄとCRの上位2ﾋﾞｯﾄが対応します。 拡張ｴﾝﾄﾘ番号は一連のｴﾝﾄﾘ番号になり、本例ではS2とEXの残りのﾋﾞｯﾄが対応します。 これらに対応するS2, EX, CRのﾋﾞｯﾄは配置区画容量と総配置区画数に依存して変化することに注意してください。 これらを具体的に指定する値はﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部(DPB)に存在します。 DPB内のBSH, BLM, EXMがS2, EX, CRのﾋﾞｯﾄ対応付けに使用されます。

ここで得られたｴﾝﾄﾘ内配置区画位置に対応するD0～Dn内の値が目的ﾚｺｰﾄﾞを含む配置区画番号です。 次表は配置区画容量=4Kﾊﾞｲﾄ、総配置区画数>256の場合に得られたｴﾝﾄﾘ内配置区画位置が2の場合の例です。

ﾊﾞｲﾄ | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | D11 | D12 | D13 | D14 | D15
ｴﾝﾄﾘ内配置区画位置 | 0 |  | 1 |  | 2 |  | 3 |  | 4 |  | 5 |  | 6 |  | 7

本例の場合、D4とD5のﾜｰﾄﾞ値が配置区画番号です。 配置区画番号は予約ﾄﾗｯｸ(DPBのOFF参照)を除くﾄﾗｯｸの先頭から順に番号付けされます。 従って目的ﾚｺｰﾄﾞのﾚｺｰﾄﾞ番号はこの配置区画番号×ﾚｺｰﾄﾞ数/1配置区画＋配置区画内ﾚｺｰﾄﾞ位置で算出されるCP/Mの論理ｾｸﾀ(ﾚｺｰﾄﾞ)番号です。

論理ｾｸﾀ番号はDPBのSPT(ｾｸﾀ数/1ﾄﾗｯｸ)により除算され、ﾄﾗｯｸ番号とｾｸﾀ番号としてBIOSに渡されます。

1ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘは32ﾊﾞｲﾄですので、1ﾚｺｰﾄﾞは4ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘを含みます。 ﾃﾞｨﾚｸﾄﾘ操作を含むBDOS機能の戻り値で返される0～3の値は、このﾚｺｰﾄﾞ内のｴﾝﾄﾘ位置を示します。 このﾃﾞｨﾚｸﾄﾘ ﾚｺｰﾄﾞは最下位ﾚｺｰﾄﾞ(配置区画)番号側に置かれ、使用する総ﾃﾞｨﾚｸﾄﾘ(ﾚｺｰﾄﾞ)数に対応する分を配置区画単位でDPBのAL0とAL1で予約します。 従ってここで予約された次の位置からﾃﾞｰﾀ用の配置区画が割り当てられます。 実際には利用時間の経過により、複数回のﾌｧｲﾙの作成と削除のため、必ずしも下位側からの配置区画連続割り当てになりません。 このような状態で新規書き込みを行うと、現在の配置区画から前後に向かって空き配置区画を探します。 これはﾃﾞｨｽｸ装置でのﾍｯﾄﾞ移動を最小にします。

或るﾌｧｲﾙのｱｸｾｽ要請が出されると、そのﾌｧｲﾙ名に該当する拡張番号0(上記S2とEXでの拡張ｴﾝﾄﾘ番号)のﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘを全ﾃﾞｨﾚｸﾄﾘ ﾚｺｰﾄﾞで検索します。 該当するｴﾝﾄﾘが検出されると、それをFCBとしてﾒﾓﾘ上に展開(配置区画番号領域の複写など)します。 以降の操作はこのFCBを元に行われます。 その操作でﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ内情報を更新しなければならない操作が行われた場合、現在のFCB情報を上記と逆操作で対応するﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘに書きます(即ち更新)。 操作中に現在使用しているFCBが(配置区画番号列が)溢れた場合、その内容に変化があった場合は上記のようにそのﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘを更新し、次のﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘを準備します。 読み込み操作の場合は単に次の拡張ｴﾝﾄﾘ番号を持つｴﾝﾄﾘをFCBとして設定し、書き込み操作の場合は次の拡張ｴﾝﾄﾘ番号を持つ新規ｴﾝﾄﾘを作成します。

不順(ﾗﾝﾀﾞﾑ)ｱｸｾｽの場合、基本的にBDOS内部処理はほぼ順次ﾌｧｲﾙと同一です。 大きく異なるのはﾚｺｰﾄﾞ位置の指定がFCB内のR0～R2で行われることです。 BDOSはこのR0～R2値をS2, EX, CR値に変換し、その後、順次ﾌｧｲﾙ同様に読み書き処理を行います。

具体的な各操作はBDOSｿｰｽをご覧ください。

CP/Mのﾚｺｰﾄﾞ(128ﾊﾞｲﾄ)と実ｾｸﾀ容量との整合はBIOSで行います。 この方法については付録内6.12節をご覧ください。


1.1 BDOS ｿｰｽ

0000		;***************************

0000		;*			   *

0000		;*  CP/M-80 Ver 2.2  BDOS  *

0000		;*			   *

0000		;***************************

0000

0000			TITLE	BDOS

0000

0000		;	* CP/Mﾒﾓﾘ配置定義 *
0000

003E		MSIZE	EQU	62		;
CP/Mﾒﾓﾘ容量
0000

A800		BIAS	EQU	(MSIZE-20)*1024	;

DC00		CCP	EQU	BIAS+3400H	;
CCP(Console Command Processor)先頭ｱﾄﾞﾚｽ
E406		BDOS	EQU	CCP+0806H	;
BDOS(Basic Disk Operating System)先頭ｱﾄﾞﾚｽ
F200		BIOS	EQU	CCP+1600H	;
BIOS(Basic Input/Output System)先頭ｱﾄﾞﾚｽ
0000

0000		;	* 制御ｺｰﾄﾞ定義 *
0000

0003		C_C	EQU	03H		;
        行先頭時ﾘﾌﾞｰﾄ
0005		C_E	EQU	05H		;
        物理行ｶｰｿﾙ復帰改行
0008		BS	EQU	08H		;
Backspace	ｶｰｿﾙ1文字後退
0009		TAB	EQU	09H		;
Tab		ﾀﾌﾞ
000A		LF	EQU	0AH		;
        行終了(ｶｰｿﾙ改行)
000D		CR	EQU	0DH		;
Enter		行終了(ｶｰｿﾙ復帰)
0010		C_P	EQU	10H		;
        印字ON/OFF
0012		C_R	EQU	12H		;
        新規行で再表示
0013		C_S	EQU	13H		;
        表示一時停止/解除
0015		C_U	EQU	15H		;
        現在行削除
0018		CAN	EQU	18H		;
CAN		行取り消し
001A		C_Z	EQU	1AH		;
        ﾌｧｲﾙ終端(EOF)
007F		DEL	EQU	7FH		;
Delete		文字削除
0000

0000		;	* CP/Mｼｽﾃﾑ ﾊﾟﾗﾒｰﾀ領域定義 *
0000

0000		BOOT	EQU	0000H		;
ﾌﾞｰﾄ開始分岐先頭ﾄﾞﾚｽ
0003		IOBYTE	EQU	0003H		;
I/Oﾊﾞｲﾄ値ｱﾄﾞﾚｽ
0004		CDISK	EQU	0004H		;
現使用者番号:現選択ﾄﾞﾗｲﾌﾞ番号値ｱﾄﾞﾚｽ
0005		BDENT	EQU	0005H		;
BDOS開始分岐先頭ﾄﾞﾚｽ
005C		FCB	EQU	005CH		;
ﾌｧｲﾙ制御領域(File Control Block)先頭ｱﾄﾞﾚｽ
0080		TBF	EQU	0080H		;
標準転送ﾊﾞｯﾌｧ先頭ｱﾄﾞﾚｽ
0100		TPA	EQU	0100H		;
一時ﾌﾟﾛｸﾞﾗﾑ領域(Transient Program Area)先頭ｱﾄﾞﾚｽ
0000

0000		;	* BIOS機能開始ｱﾄﾞﾚｽ ﾃｰﾌﾞﾙ定義 *
0000

F200		XBOOT	EQU	BIOS+0*3	;
BIOS ﾌﾞｰﾄ処理開始ｱﾄﾞﾚｽ
F203		XWBOOT	EQU	BIOS+1*3	;
BIOS ｳｫｰﾑﾌﾞｰﾄ処理開始ｱﾄﾞﾚｽ
F206		XCONST	EQU	BIOS+2*3	;
BIOS ｺﾝｿｰﾙ入力状態取得処理開始ｱﾄﾞﾚｽ
F209		XCONIN	EQU	BIOS+3*3	;
BIOS ｺﾝｿｰﾙ入力処理開始ｱﾄﾞﾚｽ
F20C		XCONOUT	EQU	BIOS+4*3	;
BIOS ｺﾝｿｰﾙ出力処理開始ｱﾄﾞﾚｽ
F20F		XLIST	EQU	BIOS+5*3	;
BIOS ﾌﾟﾘﾝﾀ出力処理開始ｱﾄﾞﾚｽ
F212		XPUNCH	EQU	BIOS+6*3	;
BIOS 紙ﾃｰﾌﾟ ﾊﾟﾝﾁｬ出力処理開始ｱﾄﾞﾚｽ
F215		XREADER	EQU	BIOS+7*3	;
BIOS 紙ﾃｰﾌﾟ ﾘｰﾀﾞ入力処理開始ｱﾄﾞﾚｽ
F218		XHOME	EQU	BIOS+8*3	;
BIOS ﾃﾞｨｽｸ原点位置移動処理開始ｱﾄﾞﾚｽ
F21B		XSELDSK	EQU	BIOS+9*3	;
BIOS ﾃﾞｨｽｸ選択処理開始ｱﾄﾞﾚｽ
F21E		XSETTRK	EQU	BIOS+10*3	;
BIOS ﾄﾗｯｸ設定処理開始ｱﾄﾞﾚｽ
F221		XSETSEC	EQU	BIOS+11*3	;
BIOS ｾｸﾀ設定処理開始ｱﾄﾞﾚｽ
F224		XSETDMA	EQU	BIOS+12*3	;
BIOS DMA(転送)基準ｱﾄﾞﾚｽ設定処理開始ｱﾄﾞﾚｽ
F227		XREAD	EQU	BIOS+13*3	;
BIOS ｾｸﾀ読み出し処理開始ｱﾄﾞﾚｽ
F22A		XWRITE	EQU	BIOS+14*3	;
BIOS ｾｸﾀ書き込み処理開始ｱﾄﾞﾚｽ
F22D		XLISTST	EQU	BIOS+15*3	;
BIOS ﾌﾟﾘﾝﾀ出力状態取得処理開始ｱﾄﾞﾚｽ
F230		XSECTRN	EQU	BIOS+16*3	;
BIOS ﾄﾗｯｸ内ｾｸﾀ番号変換処理開始ｱﾄﾞﾚｽ
0000

0000		;	[ BDOS ]
0000

0000			ORG	BDOS-6		;
製品ｼﾘｱﾙ番号先頭ｱﾄﾞﾚｽ
E400

E400 001600	SERLNO:	DB	00H, 00H, 00H	;
製品ｼﾘｱﾙ番号(6ﾊﾞｲﾄ)
E403 000BD4		DB	00H, 00H, 00H	;

E406

E406			ORG	BDOS		;
BDOS開始ｱﾄﾞﾚｽ
E406

E406 C311E4	BDENT1:	JP	BDENT2		;
BDOS機能処理開始へ
E409

E409		;	* 異常警告表示処理ｱﾄﾞﾚｽ ﾃｰﾌﾞﾙ *
E409

E409 99E4	BSERRP:	DW	BSERR		;
不良ｾｸﾀ警告表示処理ｱﾄﾞﾚｽ
E40B A5E4     	SLERRP:	DW	SLERR		;
選択異常警告表示処理ｱﾄﾞﾚｽ
E40D ABE4     	ROERRP:	DW	ROERR		;
読み出し専用警告表示処理ｱﾄﾞﾚｽ
E40F B1E4     	FRERRP:	DW	FRERR		;
読み出し専用ﾌｧｲﾙ警告表示処理ｱﾄﾞﾚｽ
E411

E411		;	* BDOS機能処理 *
E411

E411 EB		BDENT2:	EX	DE,HL		;
DEﾚｼﾞｽﾀ値をHLへ移動
E412 2243E7		LD	(DESV),HL	;
移行時DEﾚｼﾞｽﾀ値保存
E415 EB			EX	DE,HL		;
DEﾚｼﾞｽﾀ値復帰
E416 7B			LD	A,E		;
Eﾚｼﾞｽﾀ値取得
E417 32D6F1		LD	(ESV),A		;
Eﾚｼﾞｽﾀ値保存
E41A 210000		LD	HL,0		;
0値取得
E41D 2245E7		LD	(RETPR),HL	;
復帰ｺｰﾄﾞ初期化
E420 39			ADD	HL,SP		;
ｽﾀｯｸ ﾎﾟｲﾝﾀ値取得
E421 220FE7		LD	(SPSV),HL	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ値保存
E424 3141E7		LD	SP,STACK	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化
E427 AF			XOR	A		;
0値取得
E428 32E0F1		LD	(FDRNSV),A	;
機能開始時FCBの1基準ﾄﾞﾗｲﾌﾞ指定値初期化(現ﾄﾞﾗｲﾌﾞ)
E42B 32DEF1		LD	(CHGFLG),A	;
ﾄﾞﾗｲﾌﾞ変更ﾌﾗｸﾞ初期化(未変更)
E42E 2174F1		LD	HL,BDEND	;
BDOS機能終了処理ｱﾄﾞﾚｽ取得
E431 E5			PUSH	HL		;
BDOS機能終了処理ｱﾄﾞﾚｽ設定(RET用)
E432 79			LD	A,C		;
BDOS機能番号取得
E433 FE29		CP	41		;
範囲検査
E435 D0			RET	NC		;
範囲外でBDOS機能終了処理へ復帰
E436		;

E436 4B			LD	C,E		;
Eﾚｼﾞｽﾀ値をCﾚｼﾞｽﾀへ保存
E437 2147E4		LD	HL,BDTBL	;
BDOS機能ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ値取得
E43A 5F			LD	E,A		;
BDOS機能ﾊﾞｲﾄ ｵﾌｾｯﾄ値設定
E43B 1600		LD	D,0		;
ｵﾌｾｯﾄ上位ﾊﾞｲﾄ 0設定
E43D 19			ADD	HL,DE		;
BDOS機能ﾃｰﾌﾞﾙ対応ﾎﾟｲﾝﾀ取得
E43E 19			ADD	HL,DE		;
(基準ﾎﾟｲﾝﾀ＋ｵﾌｾｯﾄ×2)
E43F 5E			LD	E,(HL)		;
対応機能ﾙｰﾁﾝ開始下位ｱﾄﾞﾚｽ取得
E440 23			INC	HL		;
BDOS機能ﾃｰﾌﾞﾙ対応ﾎﾟｲﾝﾀ進行
E441 56			LD	D,(HL)		;
対応機能ﾙｰﾁﾝ開始上位ｱﾄﾞﾚｽ取得
E442 2A43E7		LD	HL,(DESV)	;
元のDE値HLに復帰
E445 EB			EX	DE,HL		;
HL:対応機能開始ｱﾄﾞﾚｽ,DE:元のDE値
E446 E9			JP	(HL)		;
対応機能処理へ分岐
E447

E447		;	( BDOS機能処理ﾙｰﾁﾝ開始ｱﾄﾞﾚｽ ﾃｰﾌﾞﾙ )
E447

E447 03F2	BDTBL:	DW	XWBOOT		;
 0: ｳｫｰﾑﾌﾞｰﾄ
E449 C8E6		DW	CI		;
 1: ｺﾝｿｰﾙ ﾊﾞｲﾄ入力
E44B 90E5		DW	CO		;
 2: ｺﾝｿｰﾙ ﾊﾞｲﾄ出力
E44D CEE6		DW	RDR		;
 3: 紙ﾃｰﾌﾟﾘｰﾀﾞ ﾊﾞｲﾄ入力
E44F 12F2		DW	XPUNCH		;
 4: 紙ﾃｰﾌﾟﾊﾟﾝﾁｬ ﾊﾞｲﾄ出力
E451 0FF2		DW	XLIST		;
 5: ﾌﾟﾘﾝﾀ ﾊﾞｲﾄ出力
E453 D4E6		DW	DIO		;
 6: 直接ｺﾝｿｰﾙ入出力
E455 EDE6		DW	RDIOB		;
 7: I/Oﾊﾞｲﾄ取得
E457 F3E6		DW	SETIOB		;
 8: I/Oﾊﾞｲﾄ設定
E459 F8E6		DW	PMSG		;
 9: ｺﾝｿｰﾙ文字列出力
E45B E1E5		DW	CIL		;
10: ｺﾝｿｰﾙ文字列入力
E45D FEE6		DW	CST		;
11: ｺﾝｿｰﾙ入力状態取得
E45F 7EF0		DW	RDVER		;
12: ﾊﾞｰｼﾞｮﾝ番号取得
E461 83F0		DW	RESDSK		;
13: 全ﾃﾞｨｽｸ ﾘｾｯﾄ
E463 45F0		DW	SELDSK		;
14: ﾃﾞｨｽｸ選択
E465 9CF0		DW	OPNF		;
15: ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)
E467 A5F0		DW	CLSF		;
16: ﾌｧｲﾙ閉鎖(ｸﾛｰｽﾞ)
E469 ABF0		DW	FSRCF		;
17: 初回ﾌｧｲﾙ検索
E46B C8F0		DW	NSRCF		;
18: 次回ﾌｧｲﾙ検索
E46D D7F0		DW	DELF		;
19: ﾌｧｲﾙ削除
E46F E0F0		DW	SFRD		;
20: 順次ﾌｧｲﾙ読み込み
E471 E6F0		DW	SFWR		;
21: 順次ﾌｧｲﾙ書き込み
E473 ECF0		DW	MAKEF		;
22: ﾌｧｲﾙ作成
E475 F5F0		DW	RENF		;
23: ﾌｧｲﾙ名変更
E477 FEF0		DW	GLGVCT		;
24: 登録ﾃﾞｨｽｸ ﾍﾞｸﾀ取得
E479 04F1		DW	GDSKNO		;
25: ﾃﾞｨｽｸ番号取得
E47B 0AF1		DW	SETDMA		;
26: DMAｱﾄﾞﾚｽ設定
E47D 11F1		DW	GALVCT		;
27: 配置ﾍﾞｸﾀ取得
E47F 2CE9		DW	SETWPT		;
28: ﾃﾞｨｽｸ単位書き込み禁止設定
E481 17F1		DW	GROVCT		;
29: ﾃﾞｨｽｸ単位読み出し専用ﾍﾞｸﾀ取得
E483 1DF1		DW	STATRB		;
30: ﾌｧｲﾙ属性設定
E485 26F1		DW	RDPB		;
31: DPB(ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸ)ｱﾄﾞﾚｽ取得
E487 2DF1		DW	GSUSR		;
32: 使用者番号取得/設定
E489 41F1		DW	RFRD		;
33: 不順ﾌｧｲﾙ読み込み
E48B 47F1		DW	RFWR		;
34: 不順ﾌｧｲﾙ書き込み
E48D 4DF1		DW	RFMAXF		;
35: ﾌｧｲﾙ容量値取得
E48F 0EF0		DW	STRRCD		;
36: 不順時ﾚｺｰﾄﾞ設定
E491 53F1		DW	RESDRV		;
37: ﾄﾞﾗｲﾌﾞ ﾘｾｯﾄ
E493 04E7		DW	XRET		;
38: (予約)
E495 04E7		DW	XRET		;
39: (予約)
E497 9BF1		DW	RFZWR		;
40: 不順ﾌｧｲﾙ00H書き込み
E499

E499		;	( 不良ｾｸﾀ警告表示 )
E499

E499 21CAE4	BSERR:	LD	HL,BSMSG	;
不良ｾｸﾀ文字列ﾎﾟｲﾝﾀ値取得
E49C CDE5E4		CALL	BEOUT		;
不良ｾｸﾀ警告表示
E49F FE03		CP	C_C		;
ﾘﾌﾞｰﾄ要請か検査
E4A1 CA0000		JP	Z,BOOT		;
ﾘﾌﾞｰﾄ要請でﾘﾌﾞｰﾄへ分岐
E4A4		;

E4A4 C9			RET			;
ﾘﾌﾞｰﾄ要請なしで呼び出し元へ復帰(継続)
E4A5

E4A5		;	( 選択異常警告表示 )
E4A5

E4A5 21D5E4	SLERR:	LD	HL,SLMSG	;
選択文字列ﾎﾟｲﾝﾀ値取得
E4A8 C3B4E4		JP	ERRMSG		;
選択警告表示後ﾘﾌﾞｰﾄへ
E4AB

E4AB		;	( 読み出し専用警告表示 )
E4AB

E4AB 21E1E4	ROERR:	LD	HL,ROMSG	;
読み出し専用文字列ﾎﾟｲﾝﾀ値取得
E4AE C3B4E4		JP	ERRMSG		;
読み出し専用警告表示後ﾘﾌﾞｰﾄへ
E4B1

E4B1		;	( 読み出し専用ﾌｧｲﾙ警告表示 )
E4B1

E4B1 21DCE4	FRERR:	LD	HL,FRMSG	;
読み出し専用ﾌｧｲﾙ文字列ﾎﾟｲﾝﾀ値取得
E4B4		;

E4B4 CDE5E4	ERRMSG:	CALL	BEOUT		;
対応警告文字列表示
E4B7 C30000		JP	BOOT		;
ﾘﾌﾞｰﾄへ
E4BA		;

E4BA 42646F73	BEMSG:	DB	'Bdos Err On '	;
BDOS異常文字列
E4BE 20457272

E4C2 204F6E20

E4C6 203A2024	BEMGDR:	DB	' : $'		;
ﾄﾞﾗｲﾌﾞ番号文字
E4CA		;

E4CA 42616420	BSMSG:	DB	'Bad Sector$'	;
不良ｾｸﾀ文字列
E4CE 53656374

E4D2 6F7224

E4D5		;

E4D5 53656C65	SLMSG:	DB	'Select$'	;
不在ﾄﾞﾗｲﾌﾞ番号選択文字列
E4D9 637424

E4DC		;

E4DC 46696C65	FRMSG:	DB	'File '		;
ﾌｧｲﾙ文字列
E4E0 20

E4E1 522F4F24	ROMSG:	DB	'R/O$'		;
読み出し専用文字列
E4E5

E4E5 E5		BEOUT:	PUSH	HL		;
対応文字列ﾎﾟｲﾝﾀ値一時保存
E4E6 CDC9E5		CALL	CRLF		;
ｺﾝｿｰﾙ復帰改行
E4E9 3A42E7		LD	A,(LOGDSK)	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号取得
E4EC C641		ADD	A,'A'		;
ﾄﾞﾗｲﾌﾞ番号文字取得
E4EE 32C6E4		LD	(BEMGDR),A	;
文字列内にﾄﾞﾗｲﾌﾞ番号設定
E4F1 01BAE4		LD	BC,BEMSG	;
BDOS異常文字列ﾎﾟｲﾝﾀ値取得
E4F4 CDD3E5		CALL	MSGOUT		;
BDOS異常文字列表示
E4F7 C1			POP	BC		;
対応文字列ﾎﾟｲﾝﾀ値復帰
E4F8 CDD3E5		CALL	MSGOUT		;
対応文字列表示
E4FB		;

E4FB 210EE7	CIS:	LD	HL,CHRSV	;
取得済みｺﾝｿｰﾙ入力ﾎﾟｲﾝﾀ値取得
E4FE 7E			LD	A,(HL)		;
取得済みｺﾝｿｰﾙ入力値取得
E4FF 3600		LD	(HL),0		;
取得済みｺﾝｿｰﾙ入力値解除(なし設定)
E501 B7			OR	A		;
取得済みｺﾝｿｰﾙ入力有無検査
E502 C0			RET	NZ		;
有りで呼び出し元へ復帰
E503		;

E503 C309F2		JP	XCONIN		;
無しでｺﾝｿｰﾙ入力へ分岐
E506

E506		;	( ｺﾝｿｰﾙ ﾊﾞｲﾄ入力 )
E506

E506 CDFBE4	CICHR:	CALL	CIS		;
取得済みを含めｺﾝｿｰﾙ入力
E509 CD14E5		CALL	CHRCHK		;
有効/無効文字検査
E50C D8			RET	C		;
無効文字で呼び出し元へ復帰
E50D		;

E50D F5			PUSH	AF		;
入力文字一時保存
E50E 4F			LD	C,A		;
入力文字(出力用に)設定
E50F CD90E5		CALL	CO		;
入力文字表示(ｴｺｰﾊﾞｯｸ)
E512 F1			POP	AF		;
入力文字復帰
E513 C9			RET			;
呼び出し元へ復帰
E514

E514		;	( 有効/無効文字検査 )
E514

E514 FE0D	CHRCHK:	CP	CR		;
復帰ｺｰﾄﾞか検査
E516 C8			RET	Z		;
復帰ｺｰﾄﾞで呼び出し元へ復帰(NC)
E517 FE0A		CP	LF		;
改行ｺｰﾄﾞか検査
E519 C8			RET	Z		;
改行ｺｰﾄﾞで呼び出し元へ復帰(NC)
E51A FE09		CP	TAB		;
TABｺｰﾄﾞか検査
E51C C8			RET	Z		;
TABｺｰﾄﾞで呼び出し元へ復帰(NC)
E51D FE08		CP	BS		;
ﾊﾞｯｸｽﾍﾟｰｽ ｺｰﾄﾞか検査
E51F C8			RET	Z		;
ﾊﾞｯｸｽﾍﾟｰｽ ｺｰﾄﾞで呼び出し元へ復帰(NC)
E520 FE20		CP	' '		;
その他制御ｺｰﾄﾞか検査
E522 C9			RET			;
その他制御ｺｰﾄﾞは(C)で呼び出し元へ復帰
E523

E523		;	( 打ち切り検査 )
E523

E523 3A0EE7	BREAK:	LD	A,(CHRSV)	;
取得済みｺﾝｿｰﾙ入力値取得
E526 B7			OR	A		;
取得済みｺﾝｿｰﾙ入力有無検査
E527 C245E5		JP	NZ,BREAK2	;
有りで分岐
E52A		;

E52A CD06F2		CALL	XCONST		;
ｺﾝｿｰﾙ入力状態取得(BIOS)
E52D E601		AND	00000001B	;
ｺﾝｿｰﾙ入力有無検査
E52F C8			RET	Z		;
無しで呼び出し元へ復帰
E530		;

E530 CD09F2		CALL	XCONIN		;
有りでｺﾝｿｰﾙ入力(BIOS)
E533 FE13		CP	C_S		;
Ctrl+Sか検査
E535 C242E5		JP	NZ,BREAK1	;
Ctrl+S以外で分岐
E538

E538		;	(( 一時停止 ))
E538

E538 CD09F2		CALL	XCONIN		;
ｺﾝｿｰﾙ入力(BIOS)
E53B FE03		CP	C_C		;
Ctrl+Cか検査
E53D CA0000		JP	Z,BOOT		;
Ctrl+Cでﾌﾞｰﾄへ分岐
E540

E540		;	(( 終了処理 ))
E540

E540 AF			XOR	A		;
復帰ｺｰﾄﾞ(入力文字無し=0)取得
E541 C9			RET			;
呼び出し元へ復帰
E542		;

E542 320EE7	BREAK1:	LD	(CHRSV),A	;
ｺﾝｿｰﾙ入力値を保存
E545 3E01	BREAK2:	LD	A,1		;
復帰ｺｰﾄﾞ(入力文字有り=1)取得
E547 C9			RET			;
呼び出し元へ復帰
E548

E548		;	( ｺﾝｿｰﾙ ﾊﾞｲﾄ出力 )
E548

E548 3A0AE7	COCHR:	LD	A,(DELCNT)	;
文字列入力ﾊﾞｯｸｽﾍﾟｰｽ処理用既出力文字数取得
E54B B7			OR	A		;
文字列入力ﾊﾞｯｸｽﾍﾟｰｽ処理中か検査
E54C C262E5		JP	NZ,COCHR1	;
文字列入力ﾊﾞｯｸｽﾍﾟｰｽ処理中で分岐
E54F		;

E54F C5			PUSH	BC		;
出力文字一時保存
E550 CD23E5		CALL	BREAK		;
打ち切り検査
E553 C1			POP	BC		;
出力文字一時復帰
E554 C5			PUSH	BC		;
出力文字一時再保存
E555 CD0CF2		CALL	XCONOUT		;
ｺﾝｿｰﾙ出力(BIOS)
E558 C1			POP	BC		;
出力文字一時復帰
E559 C5			PUSH	BC		;
出力文字一時再保存
E55A 3A0DE7		LD	A,(PRNFLG)	;
印字ﾌﾗｸﾞ値取得
E55D B7			OR	A		;
印字有/無検査
E55E C40FF2		CALL	NZ,XLIST	;
印字有りでﾌﾟﾘﾝﾀにも出力(BIOS)
E561 C1			POP	BC		;
出力文字復帰
E562		;

E562 79		COCHR1:	LD	A,C		;
出力文字取得
E563 210CE7		LD	HL,COCNT	;
出力文字数ﾎﾟｲﾝﾀ値取得
E566 FE7F		CP	DEL		;
DELｺｰﾄﾞか検査
E568 C8			RET	Z		;
DELｺｰﾄﾞで呼び出し元へ復帰
E569		;

E569 34			INC	(HL)		;
出力文字数ｶｳﾝﾀ進行(+1)
E56A FE20		CP	' '		;
制御ｺｰﾄﾞか検査
E56C D0			RET	NC		;
制御ｺｰﾄﾞ以外で呼び出し元へ復帰
E56D		;

E56D 35			DEC	(HL)		;
出力文字数ｶｳﾝﾀ減数(-1,元に戻す)
E56E 7E			LD	A,(HL)		;
出力文字数値取得
E56F B7			OR	A		;
既出力有無検査
E570 C8			RET	Z		;
既出力無しで呼び出し元へ復帰
E570		;

E571 79			LD	A,C		;
出力文字取得
E572 FE08		CP	BS		;
ﾊﾞｯｸｽﾍﾟｰｽ ｺｰﾄﾞか検査
E574 C279E5		JP	NZ,COCHR2	;
ﾊﾞｯｸｽﾍﾟｰｽ ｺｰﾄﾞ以外で分岐
E577		;

E577 35			DEC	(HL)		;
ﾊﾞｯｸｽﾍﾟｰｽ ｺｰﾄﾞで出力文字数ｶｳﾝﾀ減数(-1)
E578 C9			RET			;
呼び出し元へ復帰
E579		;

E579 FE0A	COCHR2	CP	LF		;
改行ｺｰﾄﾞか検査
E57B C0			RET	NZ		;
改行ｺｰﾄﾞ以外で呼び出し元へ復帰
E57C		;

E57C 3600		LD	(HL),0		;
改行ｺｰﾄﾞで出力文字数ｶｳﾝﾀ初期化
E57E C9			RET			;
呼び出し元へ復帰
E57F

E57F		;	( 制御ｺｰﾄﾞ置換付きｺﾝｿｰﾙ文字表示 )
E57F

E57F 79		COCNV:	LD	A,C		;
出力文字取得
E580 CD14E5		CALL	CHRCHK		;
有効/無効文字検査
E583 D290E5		JP	NC,CO		;
有効文字で分岐
E586		;

E586 F5			PUSH	AF		;
無効文字一時保存
E587 0E5E		LD	C,'^'		;
'^'ｺｰﾄﾞ取得
E589 CD48E5		CALL	COCHR		;
'^'ｺﾝｿｰﾙ表示
E58C F1			POP	AF		;
無効文字復帰
E58D F640		OR	'@'		;
無効制御ｺｰﾄﾞを@,A...へ変換
E58F 4F			LD	C,A		;
置換後ｺｰﾄﾞを出力用に設定
E590

E590		;	* [BDOS機能:2] ｺﾝｿｰﾙ ﾊﾞｲﾄ出力 *
E590

E590 79		CO:	LD	A,C		;
出力ｺｰﾄﾞ取得
E591 FE09		CP	TAB		;
TABｺｰﾄﾞか検査
E593 C248E5		JP	NZ,COCHR	;
TABｺｰﾄﾞ以外で表示出力へ分岐
E596		;

E596 0E20	COTAB:	LD	C,' '		;
空白ｺｰﾄﾞ取得
E598 CD48E5		CALL	COCHR		;
ｺﾝｿｰﾙ空白表示
E59B 3A0CE7		LD	A,(COCNT)	;
出力文字数値取得
E59E E607		AND	00000111B	;
8文字(ﾊﾞｲﾄ)境界か検査
E5A0 C296E5		JP	NZ,COTAB	;
8文字境界まで空白表示継続
E5A3		;

E5A3 C9			RET			;
呼び出し元へ復帰
E5A4

E5A4		;	( ｺﾝｿｰﾙ文字削除(Delete) )
E5A4

E5A4 CDACE5	CODEL:	CALL	CODEL1		;
ﾊﾞｯｸｽﾍﾟｰｽ ｺｰﾄﾞ ｺﾝｿｰﾙ出力
E5A7 0E20		LD	C,' '		;
空白ｺｰﾄﾞ取得
E5A9 CD0CF2		CALL	XCONOUT		;
ｺﾝｿｰﾙ空白出力(BIOS)
E5AC 0E08	CODEL1:	LD	C,BS		;
ﾊﾞｯｸｽﾍﾟｰｽ ｺｰﾄﾞ取得
E5AE C30CF2		JP	XCONOUT		;
ﾊﾞｯｸｽﾍﾟｰｽ ｺｰﾄﾞ ｺﾝｿｰﾙ出力(BIOS)後復帰へ
E5B1

E5B1		;	( ｺﾝｿｰﾙ改行(#ｶｰｿﾙ ﾀﾞｳﾝ) )
E5B1

E5B1 0E23	COCU:	LD	C,'#'		;
'#'ｺｰﾄﾞ取得
E5B3 CD48E5		CALL	COCHR		;
'#'ｺﾝｿｰﾙ表示
E5B6 CDC9E5		CALL	CRLF		;
ｺﾝｿｰﾙ復帰改行
E5B9 3A0CE7	COCU1:	LD	A,(COCNT)	;
現出力文字数値取得
E5BC 210BE7		LD	HL,COCTSV	;
開始時出力文字数ﾎﾟｲﾝﾀ値取得
E5BF BE			CP	(HL)		;
開始時と現時点の出力文字数検査
E5C0 D0			RET	NC		;
現時点≧開始時で呼び出し元へ復帰
E5C1		;

E5C1 0E20		LD	C,' '		;
空白ｺｰﾄﾞ取得
E5C3 CD48E5		CALL	COCHR		;
ｺﾝｿｰﾙ空白表示
E5C6 C3B9E5		JP	COCU1		;
現時点=開始時まで空白表示継続へ
E5C9

E5C9		;	( ｺﾝｿｰﾙ復帰改行 )
E5C9

E5C9 0E0D	CRLF:	LD	C,CR		;
復帰ｺｰﾄﾞ取得
E5CB CD48E5		CALL	COCHR		;
復帰ｺｰﾄﾞ ｺﾝｿｰﾙ出力
E5CE 0E0A		LD	C,LF		;
改行ｺｰﾄﾞ取得
E5D0 C348E5		JP	COCHR		;
改行ｺｰﾄﾞ ｺﾝｿｰﾙ出力後呼び出し元へ復帰へ
E5D3

E5D3		;	( ｺﾝｿｰﾙ文字列表示 )
E5D3

E5D3 0A		MSGOUT:	LD	A,(BC)		;
対応1ﾊﾞｲﾄ取得
E5D4 FE24		CP	'$'		;
文字列終了子か検査
E5D6 C8			RET	Z		;
終了子で呼び出し元へ復帰
E5D7		;

E5D7 03			INC	BC		;
文字列ﾎﾟｲﾝﾀ進行(+1)
E5D8 C5			PUSH	BC		;
文字列ﾎﾟｲﾝﾀ一時保存
E5D9 4F			LD	C,A		;
出力文字設定
E5DA CD90E5		CALL	CO		;
対応文字ｺﾝｿｰﾙ表示
E5DD C1			POP	BC		;
文字列ﾎﾟｲﾝﾀ復帰
E5DE C3D3E5		JP	MSGOUT		;
終了子まで表示出力継続
E5E1

E5E1		;	* [BDOS機能:10] ｺﾝｿｰﾙ文字列入力 *
E5E1

E5E1 3A0CE7	CIL:	LD	A,(COCNT)	;
現出力文字数値取得
E5E4 320BE7		LD	(COCTSV),A	;
開始時出力文字数保存
E5E7 2A43E7		LD	HL,(DESV)	;
文字列ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
E5EA 4E			LD	C,(HL)		;
ﾊﾞｯﾌｧ最大ﾊﾞｲﾄ数取得
E5EB 23			INC	HL		;
文字列ﾊﾞｯﾌｧ文字数ﾎﾟｲﾝﾀ値取得
E5EC E5			PUSH	HL		;
文字列ﾊﾞｯﾌｧ文字数ﾎﾟｲﾝﾀ一時保存
E5ED 0600		LD	B,0		;
入力文字(ﾊﾞｲﾄ)数ｶｳﾝﾀ初期化
E5EF C5		CIL1:	PUSH	BC		;
文字ｶｳﾝﾀと最大値一時保存
E5F0 E5			PUSH	HL		;
文字列ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ一時保存
E5F1 CDFBE4	CIL2:	CALL	CIS		;
ｺﾝｿｰﾙ ﾊﾞｲﾄ入力
E5F4 E67F		AND	01111111B	;
英数ｺｰﾄﾞに規制(ｼﾌﾄｲﾝ側固定化)
E5F6 E1			POP	HL		;
文字列ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ復帰
E5F7 C1			POP	BC		;
文字ｶｳﾝﾀと最大値復帰
E5F8 FE0D		CP	CR		;
復帰ｺｰﾄﾞか検査
E5FA CAC1E6		JP	Z,CIL17		;
復帰ｺｰﾄﾞで分岐
E5FD		;

E5FD FE0A		CP	LF		;
改行ｺｰﾄﾞか検査
E5FF CAC1E6		JP	Z,CIL17		;
改行ｺｰﾄﾞで分岐
E602

E602		;	(( ﾊﾞｯｸｽﾍﾟｰｽ(BS)処理 ))
E602

E602 FE08		CP	BS		;
ﾊﾞｯｸｽﾍﾟｰｽ ｺｰﾄﾞか検査
E604 C216E6		JP	NZ,CIL3		;
ﾊﾞｯｸｽﾍﾟｰｽ ｺｰﾄﾞ以外で次へ分岐
E607		;

E607 78			LD	A,B		;
入力文字数ｶｳﾝﾀ値取得
E608 B7			OR	A		;
既入力文字有無検査
E609 CAEFE5		JP	Z,CIL1		;
既入力文字無しで継続分岐
E60C		;

E60C 05			DEC	B		;
入力文字数ｶｳﾝﾀ減数(-1)
E60D 3A0CE7		LD	A,(COCNT)	;
現出力文字数取得
E610 320AE7		LD	(DELCNT),A	;
現出力文字数一時保存
E613 C370E6		JP	CIL10		;
後処理へ
E616

E616		;	(( 削除(Delete)処理 ))
E616

E616 FE7F	CIL3:	CP	DEL		;
DELｺｰﾄﾞか検査
E618 C226E6		JP	NZ,CIL4		;
DELｺｰﾄﾞ以外で次へ分岐
E61B		;

E61B 78			LD	A,B		;
入力文字数ｶｳﾝﾀ値取得
E61C B7			OR	A		;
既入力文字有無検査
E61D CAEFE5		JP	Z,CIL1		;
既入力文字無しで継続分岐
E620		;

E620 7E			LD	A,(HL)		;
最終入力文字ｺｰﾄﾞ取得
E621 05			DEC	B		;
入力文字数ｶｳﾝﾀ減数(-1)
E622 2B			DEC	HL		;
文字列ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ後退(-1)
E623 C3A9E6		JP	CIL15		;
最終入力文字表示後処理後継続へ
E626

E626		;	(( 物理行ｶｰｿﾙ復帰改行(Ctrl+E)処理 ))
E626

E626 FE05	CIL4:	CP	C_E		;
Ctrl+Eｺｰﾄﾞか検査
E628 C237E6		JP	NZ,CIL5		;
Ctrl+Eｺｰﾄﾞ以外で次へ分岐
E62B		;

E62B C5			PUSH	BC		;
文字ｶｳﾝﾀと最大値一時保存
E62C E5			PUSH	HL		;
文字列ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ一時保存
E62D CDC9E5		CALL	CRLF		;
ｺﾝｿｰﾙ復帰改行
E630 AF			XOR	A		;
0値取得
E631 320BE7		LD	(COCTSV),A	;
開始時出力文字数初期化(=0)
E634 C3F1E5		JP	CIL2		;
処理継続へ
E637

E637		;	(( 印字ON/OFF(Ctrl+P)処理 ))
E637

E637 FE10	CIL5:	CP	C_P		;
Ctrl+Pｺｰﾄﾞか検査
E639 C248E6		JP	NZ,CIL6		;
Ctrl+Pｺｰﾄﾞ以外で次へ分岐
E63C		;

E63C E5			PUSH	HL		;
文字列ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ一時保存
E63D 210DE7		LD	HL,PRNFLG	;
印字ﾌﾗｸﾞ ﾎﾟｲﾝﾀ値取得
E640 3E01		LD	A,1		;
1値取得
E642 96			SUB	(HL)		;
現印字ﾌﾗｸﾞの反転値取得
E643 77			LD	(HL),A		;
印字ﾌﾗｸﾞ反転
E644 E1			POP	HL		;
文字列ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ復帰
E645 C3EFE5		JP	CIL1		;
処理継続へ
E648

E648		;	(( 行取り消し(Ctrl+X/CAN)処理 ))
E648

E648 FE18	CIL6:	CP	CAN		;
ｷｬﾝｾﾙ ｺｰﾄﾞか検査
E64A C25FE6		JP	NZ,CIL8		;
ｷｬﾝｾﾙ ｺｰﾄﾞ以外で次へ分岐
E64D		;

E64D E1			POP	HL		;
ｽﾀｯｸ ﾎﾟｲﾝﾀ補正(+2)
E64E		;

E64E 3A0BE7	CIL7:	LD	A,(COCTSV)	;
開始時出力文字数取得
E651 210CE7		LD	HL,COCNT	;
現出力文字数ﾎﾟｲﾝﾀ値取得
E654 BE			CP	(HL)		;
開始時と現時点の出力文字数検査
E655 D2E1E5		JP	NC,CIL		;
開始時≧現時点で再実行へ
E658		;

E658 35			DEC	(HL)		;
出力文字数ｶｳﾝﾀ減数(-1)
E659 CDA4E5		CALL	CODEL		;
ｺﾝｿｰﾙ文字削除
E65C C34EE6		JP	CIL7		;
既入力文字全削除まで継続へ
E65F

E65F		;	(( 現在行削除(Ctrl+U)処理 ))
E65F

E65F FE15	CIL8:	CP	C_U		;
Ctrl+Uｺｰﾄﾞか検査
E661 C26BE6		JP	NZ,CIL9		;
Ctrl+Uｺｰﾄﾞ以外で次へ分岐
E664		;

E664 CDB1E5		CALL	COCU		;
ｺﾝｿｰﾙ改行(#ｶｰｿﾙ ﾀﾞｳﾝ)
E667 E1			POP	HL		;
ｽﾀｯｸ ﾎﾟｲﾝﾀ補正(+2)
E668 C3E1E5		JP	CIL		;
再実行へ
E66B

E66B		;	(( 新規行で再表示(Ctrl+R)処理 ))
E66B

E66B FE12	CIL9:	CP	C_R		;
Ctrl+Rｺｰﾄﾞか検査
E66D C2A6E6		JP	NZ,CIL14	;
Ctrl+Rｺｰﾄﾞ以外で次へ分岐
E670		;

E670 C5		CIL10:	PUSH	BC		;
文字ｶｳﾝﾀと最大値一時保存
E671 CDB1E5		CALL	COCU		;
ｺﾝｿｰﾙ改行(#ｶｰｿﾙ ﾀﾞｳﾝ)
E674 C1			POP	BC		;
文字ｶｳﾝﾀと最大値一時復帰
E675 E1			POP	HL		;
文字列ﾊﾞｯﾌｧ文字数ﾎﾟｲﾝﾀ一時復帰
E676 E5			PUSH	HL		;
文字列ﾊﾞｯﾌｧ文字数ﾎﾟｲﾝﾀ再保存
E677 C5			PUSH	BC		;
文字ｶｳﾝﾀと最大値再保存
E678 78		CIL11:	LD	A,B		;
入力文字数ｶｳﾝﾀ値取得
E679 B7			OR	A		;
入力文字有無検査
E67A CA8AE6		JP	Z,CIL12		;
入力文字無しで分岐
E67D		;

E67D 23			INC	HL		;
文字列ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ進行(+1)
E67E 4E			LD	C,(HL)		;
対応既入力ｺｰﾄﾞ取得
E67F 05			DEC	B		;
入力文字数ｶｳﾝﾀ減数(-1)
E680 C5			PUSH	BC		;
入力文字数ｶｳﾝﾀ値一時保存
E681 E5			PUSH	HL		;
文字列ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ一時保存
E682 CD7FE5		CALL	COCNV		;
制御ｺｰﾄﾞ置換付きｺﾝｿｰﾙ文字表示
E685 E1			POP	HL		;
文字列ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ復帰
E686 C1			POP	BC		;
入力文字数ｶｳﾝﾀ復帰
E687 C378E6		JP	CIL11		;
既入力文字列再表示まで継続へ
E68A		;

E68A E5		CIL12:	PUSH	HL		;
文字列ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ一時保存
E68B 3A0AE7		LD	A,(DELCNT)	;
ﾊﾞｯｸｽﾍﾟｰｽ時既出力文字数取得
E68E B7			OR	A		;
出力文字有無検査
E68F CAF1E5		JP	Z,CIL2		;
出力文字無しで継続へ
E692		;

E692 210CE7		LD	HL,COCNT	;
出力文字数ﾎﾟｲﾝﾀ値取得
E695 96			SUB	(HL)		;
削除文字(ﾊﾞｲﾄ)数取得
E696 320AE7		LD	(DELCNT),A	;
削除文字数ｶｳﾝﾀ初期化
E699 CDA4E5	CIL13:	CALL	CODEL		;
ｺﾝｿｰﾙ文字削除
E69C 210AE7		LD	HL,DELCNT	;
削除文字数ｶｳﾝﾀ ﾎﾟｲﾝﾀ値取得
E69F 35			DEC	(HL)		;
削除文字数ｶｳﾝﾀ減数(-1)
E6A0 C299E6		JP	NZ,CIL13	;
指定数まで文字削除へ
E6A3		;

E6A3 C3F1E5		JP	CIL2		;
処理継続へ
E6A6

E6A6		;	(( 一般文字処理 ))
E6A6

E6A6 23		CIL14:	INC	HL		;
文字列ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ進行(+1)
E6A7 77			LD	(HL),A		;
文字ﾊﾞｲﾄを文字列ﾊﾞｯﾌｧへ保存
E6A8 04			INC	B		;
入力文字数ｶｳﾝﾀ進行(+1)
E6A9		;

E6A9 C5		CIL15:	PUSH	BC		;
文字ｶｳﾝﾀと最大値一時保存
E6AA E5			PUSH	HL		;
文字列ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ一時保存
E6AB 4F			LD	C,A		;
入力文字ｺｰﾄﾞ出力用設定
E6AC CD7FE5		CALL	COCNV		;
制御ｺｰﾄﾞ置換付きｺﾝｿｰﾙ文字表示
E6AF E1			POP	HL		;
文字列ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ復帰
E6AF C1			POP	BC		;
文字ｶｳﾝﾀと最大値復帰
E6B1 7E			LD	A,(HL)		;
入力文字ｺｰﾄﾞ再取得
E6B2 FE03		CP	C_C		;
Ctrl+Cｺｰﾄﾞか検査
E6B4 78			LD	A,B		;
既入力文字数取得
E6B5 C2BDE6		JP	NZ,CIL16	;
Ctrl+Cｺｰﾄﾞ以外で分岐
E6B8		;

E6B8 FE01		CP	1		;
初入力文字か検査
E6BA CA0000		JP	Z,BOOT		;
初入力のCtrl+Cでﾌﾞｰﾄへ分岐
E6BD		;

E6BD B9		CIL16:	CP	C		;
ﾊﾞｯﾌｧ最大文字数到達か検査
E6BE DAEFE5		JP	C,CIL1		;
未到達で処理継続へ
E6C1		;

E6C1 E1		CIL17:	POP	HL		;
文字列ﾊﾞｯﾌｧ文字数ﾎﾟｲﾝﾀ復帰
E6C2 70			LD	(HL),B		;
入力文字ﾊﾞｲﾄ数をﾊﾞｯﾌｧに設定
E6C3 0E0D		LD	C,CR		;
復帰ｺｰﾄﾞ取得
E6C5 C348E5		JP	COCHR		;
ｺﾝｿｰﾙ復帰後呼び出し元へ復帰へ
E6C8

E6C8		;	* [BDOS機能:1] ｺﾝｿｰﾙ ﾊﾞｲﾄ入力 *
E6C8

E6C8 CD06E5	CI:	CALL	CICHR		;
ｺﾝｿｰﾙ ﾊﾞｲﾄ入力
E6CB C301E7		JP	BDRETB		;
復帰ｺｰﾄﾞ(ﾊﾞｲﾄ)保存後呼び出し元へ復帰へ
E6CE

E6CE		;	* [BDOS機能:3] 紙ﾃｰﾌﾟﾘｰﾀﾞ ﾊﾞｲﾄ入力 *
E6CE

E6CE CD15F2	RDR:	CALL	XREADER		;
紙ﾃｰﾌﾟﾘｰﾀﾞ入力(BIOS)
E6D1 C301E7		JP	BDRETB		;
復帰ｺｰﾄﾞ(ﾊﾞｲﾄ)保存後呼び出し元へ復帰へ
E6D4

E6D4		;	* [BDOS機能:6] 直接ｺﾝｿｰﾙ入出力 *
E6D4

E6D4 79		DIO:	LD	A,C		;
指定ｺｰﾄﾞ取得
E6D5 3C			INC	A		;
入力指定(0FFH)か検査
E6D6 CAE0E6		JP	Z,DIO1		;
入力指定で分岐
E6D9		;

E6D9 3C			INC	A		;
入力状態取得指定(0FEH)か検査
E6DA CA06F2		JP	Z,XCONST	;
ｺﾝｿｰﾙ入力状態取得(BIOS)後復帰へ
E6DD		;

E6DD C30CF2		JP	XCONOUT		;
ｺﾝｿｰﾙ出力(BIOS)後呼び出し元へ復帰へ
E6E0		;

E6E0 CD06F2	DIO1:	CALL	XCONST		;
ｺﾝｿｰﾙ入力状態取得(BIOS)
E6E3 B7			OR	A		;
ｺﾝｿｰﾙ入力有無検査
E6E4 CA91F1		JP	Z,BDEND1	;
無しで無しｺｰﾄﾞ設定後呼び出し元へ復帰へ
E6E7		;

E6E7 CD09F2		CALL	XCONIN		;
ｺﾝｿｰﾙ入力(BIOS)
E6EA C301E7		JP	BDRETB		;
復帰ｺｰﾄﾞ(ﾊﾞｲﾄ)保存後呼び出し元へ復帰へ
E6ED

E6ED		;	* [BDOS機能:7] I/Oﾊﾞｲﾄ取得 *
E6ED

E6ED 3A0300	RDIOB:	LD	A,(IOBYTE)	;
I/Oﾊﾞｲﾄ値取得
E6F0 C301E7		JP	BDRETB		;
復帰ｺｰﾄﾞ(ﾊﾞｲﾄ)保存後呼び出し元へ復帰へ
E6F3

E6F3		;	* [BDOS機能:8] I/Oﾊﾞｲﾄ設定 *
E6F3

E6F3 210300	SETIOB:	LD	HL,IOBYTE	;
I/Oﾊﾞｲﾄ値ﾎﾟｲﾝﾀ取得
E6F6 71			LD	(HL),C		;
I/Oﾊﾞｲﾄ設定
E6F7 C9			RET			;
呼び出し元へ復帰
E6F8

E6F8		;	* [BDOS機能:9] ｺﾝｿｰﾙ文字列出力 *
E6F8

E6F8 EB		PMSG:	EX	DE,HL		;
文字列ﾎﾟｲﾝﾀをDE→HLに変更
E6F9 4D			LD	C,L		;
文字列ﾎﾟｲﾝﾀ下位出力用設定
E6FA 44			LD	B,H		;
文字列ﾎﾟｲﾝﾀ上位出力用設定
E6FB C3D3E5		JP	MSGOUT		;
文字列ｺﾝｿｰﾙ表示後呼び出し元へ復帰へ
E6FE

E6FE		;	* [BDOS機能:11] ｺﾝｿｰﾙ入力状態取得 *
E6FE

E6FE CD23E5	CST:	CALL	BREAK		;
打ち切り検査とｺﾝｿｰﾙ入力状態取得
E701		;

E701 3245E7	BDRETB:	LD	(RETPR),A	;
復帰ｺｰﾄﾞ(ﾊﾞｲﾄ)保存
E704		;

E704 C9		XRET:	RET			;
呼び出し元へ復帰
E705

E705 3E01	BDRET1:	LD	A,1		;
失敗復帰ｺｰﾄﾞ取得
E707 C301E7		JP	BDRETB		;
復帰ｺｰﾄﾞ(ﾊﾞｲﾄ)保存後呼び出し元へ復帰へ
E70A

E70A		;	[ ﾌｧｲﾙ入出力以外系 定数/変数定義 ]
E70A

E70A 00		DELCNT:	DB	0		;
BS時既出力文字数/削除文字数ｶｳﾝﾀ
E70B 00		COCTSV:	DB	0		;
文字列入力開始時既出力文字数
E70C 00		COCNT:	DB	0		;
出力文字数ｶｳﾝﾀ
E70D 00		PRNFLG:	DB	0		;
印字ﾌﾗｸﾞ(0=無し、1=ﾌﾟﾘﾝﾀ出力有り)
E70E 00		CHRSV:	DB	0		;
取得済みｺﾝｿｰﾙ入力値
E70F 0000	SPSV:	DW	0		;
BDOS機能開始時ｽﾀｯｸ ﾎﾟｲﾝﾀ値
E711

E711 00000000		DB	0,0,0,0,0,0,0,0	;
ｽﾀｯｸ領域(48ﾊﾞｲﾄ)
E715 00000000

E719 00000000		DB	0,0,0,0,0,0,0,0	;

E71D 00000000

E721 00000000		DB	0,0,0,0,0,0,0,0	;

E725 00000000

E729 00000000		DB	0,0,0,0,0,0,0,0	;

E72D 00000000

E731 00000000		DB	0,0,0,0,0,0,0,0	;

E735 00000000

E739 00000000		DB	0,0,0,0,0,0,0,0	;

E73D 00000000

E741

E741		STACK	EQU	$		;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期ｱﾄﾞﾚｽ
E741

E741 00		USERNO:	DB	0		;
使用者番号
E742 00		LOGDSK:	DB	0		;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号
E743 0000	DESV:	DW	0		;
BDOS機能移行時DEﾚｼﾞｽﾀ値
E745 0000	RETPR:	DW	0		;
BDOS機能復帰ｺｰﾄﾞ
E747

E747		;	[ ﾌｧｲﾙ入出力系 ]
E747

E747		;	( 選択異常警告表示 )
E747

E747 210BE4	SLEOUT:	LD	HL,SLERRP	;
選択異常警告表示処理ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ取得
E74A

E74A		;	( 異常警告表示 )
E74A

E74A 5E		ERROUT:	LD	E,(HL)		;
対応処理下位ｱﾄﾞﾚｽ取得
E74B 23			INC	HL		;
対応処理ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ進行(+1)
E74C 56			LD	D,(HL)		;
対応処理上位ｱﾄﾞﾚｽ取得
E74D EB			EX	DE,HL		;
対応処理ｱﾄﾞﾚｽをHLに取得
E74E E9			JP	(HL)		;
対応異常警告表示後ﾘﾌﾞｰﾄへ
E74F

E74F		;	( 領域転送 )
E74F		;	入: C:転送ﾊﾞｲﾄ数 DE:転送元ﾎﾟｲﾝﾀ HL:転送先ﾎﾟｲﾝﾀ

E74F

E74F 0C		MVIR:	INC	C		;
転送ﾊﾞｲﾄ数補正(+1)
E750 0D		MVIR1:	DEC	C		;
ﾊﾞｲﾄ ｶｳﾝﾀ減数(-1)
E751 C8			RET	Z		;
転送数完了で呼び出し元へ復帰
E752		;

E752 1A			LD	A,(DE)		;
転送元から1ﾊﾞｲﾄ取得
E753 77			LD	(HL),A		;
転送先へ1ﾊﾞｲﾄ設定
E754 13			INC	DE		;
転送元ﾎﾟｲﾝﾀ進行(+1)
E755 23			INC	HL		;
転送先ﾎﾟｲﾝﾀ進行(+1)
E756 C350E7		JP	MVIR1		;
転送ﾊﾞｲﾄ数まで継続へ
E759

E759		;	( ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ取得 )
E759		;	出: Z:0=失敗/1=成功
E759

E759 3A42E7	MVDPH:	LD	A,(LOGDSK)	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号取得
E75C 4F			LD	C,A		;
ﾃﾞｨｽｸ番号指定
E75D CD1BF2		CALL	XSELDSK		;
ﾃﾞｨｽｸ選択(BIOS)
E760 7C			LD	A,H		;
有効/無効選択検査
E761 B5			OR	L		;
(HL=0検査)
E762 C8			RET	Z		;
無効で失敗ﾌﾗｸﾞ(Z)と共に呼び出し元へ復帰
E763		;

E763 5E			LD	E,(HL)		;
ｾｸﾀ変換ﾃｰﾌﾞﾙ(XLT)下位ｱﾄﾞﾚｽ取得
E764 23			INC	HL		;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ(DPH)ﾎﾟｲﾝﾀ進行(+1)
E765 56			LD	D,(HL)		;
ｾｸﾀ変換ﾃｰﾌﾞﾙ(XLT)上位ｱﾄﾞﾚｽ取得
E766 23			INC	HL		;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ(DPH)ﾎﾟｲﾝﾀ進行(+1)
E767 22B3F1		LD	(DIRMXP),HL	;
ﾃﾞｨﾚｸﾄﾘ総数保存位置ﾎﾟｲﾝﾀ保存
E76A 23			INC	HL		;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ(DPH)ﾎﾟｲﾝﾀ進行(+1)
E76B 23			INC	HL		;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ(DPH)ﾎﾟｲﾝﾀ進行(+1)
E76C 22B5F1		LD	(TRKNOP),HL	;
論理ﾄﾗｯｸ番号保存位置ﾎﾟｲﾝﾀ保存
E76F 23			INC	HL		;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ(DPH)ﾎﾟｲﾝﾀ進行(+1)
E770 23			INC	HL		;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ(DPH)ﾎﾟｲﾝﾀ進行(+1)
E771 22B7F1		LD	(SECNOP),HL	;
論理一連ｾｸﾀ番号保存位置ﾎﾟｲﾝﾀ保存
E774 23			INC	HL		;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ(DPH)ﾎﾟｲﾝﾀ進行(+1)
E775 23			INC	HL		;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ(DPH)ﾎﾟｲﾝﾀ進行(+1)
E776 EB			EX	DE,HL		;
DE:DPHﾎﾟｲﾝﾀ,HL:XLTﾎﾟｲﾝﾀ
E777 22D0F1		LD	(XLTAD),HL	;
ｾｸﾀ変換ﾃｰﾌﾞﾙ(XLT)基準ﾎﾟｲﾝﾀ保存
E77A 21B9F1		LD	HL,DIRBFP	;
ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ基準ｱﾄﾞﾚｽのﾎﾟｲﾝﾀ取得
E77D 0E08		LD	C,4*2		;
転送ﾊﾞｲﾄ数指定
E77F CD4FE7		CALL	MVIR		;
DIRBF,DPB,CSV,ALVｱﾄﾞﾚｽ設定
E782 2ABBF1		LD	HL,(DPBP)	;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸ(DPB)基準ﾎﾟｲﾝﾀ取得
E785 EB			EX	DE,HL		;
DPB基準ﾎﾟｲﾝﾀをDEに移動
E786 21C1F1		LD	HL,SPT		;
ｾｸﾀ数/1ﾄﾗｯｸ(1ｾｸﾀ=128ﾊﾞｲﾄ)値ﾎﾟｲﾝﾀ取得
E789 0E0F		LD	C,15		;
転送ﾊﾞｲﾄ数指定
E78B CD4FE7		CALL	MVIR		;
SPT,BSH,BLM,EXM,DSM,DRM値保存設定
E78E 2AC6F1		LD	HL,(DSM)	;
配置区画単位利用可能数-1(DSM)値取得
E791 7C			LD	A,H		;
DSM上位ﾊﾞｲﾄ値取得
E792 21DDF1		LD	HL,BBWFLG	;
BLS(ﾊﾞｲﾄ/ﾜｰﾄﾞ)管理ﾌﾗｸﾞ ﾎﾟｲﾝﾀ取得
E795 36FF		LD	(HL),-1		;
ﾊﾞｲﾄ管理ﾌﾗｸﾞ仮設定
E797 B7			OR	A		;
DSMﾊﾞｲﾄ範囲か検査
E798 CA9DE7		JP	Z,MVDPH1	;
DSMﾊﾞｲﾄ範囲で分岐
E79B		;

E79B 3600		LD	(HL),0		;
ﾜｰﾄﾞ管理ﾌﾗｸﾞ設定
E79D 3EFF	MVDPH1:	LD	A,-1		;
0FFH(0以外値)取得
E79F B7			OR	A		;
成功ﾌﾗｸﾞ(NZ)設定
E7A0 C9			RET			;
成功ﾌﾗｸﾞ(NZ)と共に呼び出し元へ復帰
E7A1

E7A1		;	( ﾃﾞｨｽｸ原点位置移動 )
E7A1

E7A1 CD18F2	DSKCLR:	CALL	XHOME		;
ﾃﾞｨｸｽ ﾍｯﾄﾞ原点移動(BIOS)
E7A4 AF			XOR	A		;
0値取得
E7A5 2AB5F1		LD	HL,(TRKNOP)	;
論理ﾄﾗｯｸ番号保存位置ﾎﾟｲﾝﾀ取得
E7A8 77			LD	(HL),A		;
論理ﾄﾗｯｸ番号下位ﾊﾞｲﾄ初期化
E7A9 23			INC	HL		;
論理ﾄﾗｯｸ番号保存位置ﾎﾟｲﾝﾀ進行(+1)
E7AA 77			LD	(HL),A		;
論理ﾄﾗｯｸ番号上位ﾊﾞｲﾄ初期化
E7AB 2AB7F1		LD	HL,(SECNOP)	;
論理一連ｾｸﾀ番号保存位置ﾎﾟｲﾝﾀ取得
E7AE 77			LD	(HL),A		;
論理一連ｾｸﾀ番号下位ﾊﾞｲﾄ初期化
E7AF 23			INC	HL		;
論理一連ｾｸﾀ番号保存位置ﾎﾟｲﾝﾀ進行(+1)
E7B0 77			LD	(HL),A		;
論理一連ｾｸﾀ番号上位ﾊﾞｲﾄ初期化
E7B1 C9			RET			;
呼び出し元へ復帰
E7B2

E7B2		;	( ﾚｺｰﾄﾞ(ｾｸﾀ)読み出し(BIOS) )
E7B2

E7B2 CD27F2	RSRD:	CALL	XREAD		;
ｾｸﾀ読み出し(BIOS)
E7B5 C3BBE7		JP	RWRET		;
後処理へ
E7B8

E7B8		;	( ﾚｺｰﾄﾞ(ｾｸﾀ)書き込み(BIOS) )
E7B8

E7B8 CD2AF2	RSWR:	CALL	XWRITE		;
ｾｸﾀ書き込み(BIOS)
E7BB		;

E7BB B7		RWRET:	OR	A		;
成否検査
E7BC C8			RET	Z		;
成功で呼び出し元へ復帰
E7BD		;

E7BD 2109E4		LD	HL,BSERRP	;
不良ｾｸﾀ警告表示処理ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ取得
E7C0 C34AE7		JP	ERROUT		;
不良ｾｸﾀ警告表示後ﾘﾌﾞｰﾄ(Ctrl+C)か復帰継続へ
E7C3

E7C3		;	( ﾃﾞｨﾚｸﾄﾘ用一連ﾚｺｰﾄﾞ番号変換後ﾄﾗｯｸ/ｾｸﾀ設定 )
E7C3

E7C3 2AEAF1	DS2TS:	LD	HL,(DIRPNT)	;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀ取得
E7C6 0E02		LD	C,2		;
÷4用右移動ﾋﾞｯﾄ数ｶｳﾝﾀ初期化
E7C8 CDEAE8		CALL	SFTR		;
ｾｸﾀ ﾎﾟｲﾝﾀ取得(÷4:右2ﾋﾞｯﾄ移動)
E7CB 22E5F1		LD	(SECPNT),HL	;
対応ﾃﾞｨﾚｸﾄﾘの一連ﾚｺｰﾄﾞ番号設定
E7CE 22ECF1		LD	(DRCPNT),HL	;
ﾚｺｰﾄﾞ単位ﾃﾞｨﾚｸﾄﾘ位置ﾎﾟｲﾝﾀ設定
E7D1

E7D1		;	( 指定一連ﾚｺｰﾄﾞ番号変換後ﾄﾗｯｸ/ｾｸﾀ設定 )
E7D1

E7D1 21E5F1	S2TS:	LD	HL,SECPNT	;
指定一連ﾚｺｰﾄﾞ番号ﾎﾟｲﾝﾀ取得
E7D4 4E			LD	C,(HL)		;
指定一連ﾚｺｰﾄﾞ番号下位取得
E7D5 23			INC	HL		;
指定一連ﾚｺｰﾄﾞ番号ﾎﾟｲﾝﾀ進行(+1)
E7D6 46			LD	B,(HL)		;
指定一連ﾚｺｰﾄﾞ番号上位取得 [BC=指定一連ﾚｺｰﾄﾞ番号]
E7D7 2AB7F1		LD	HL,(SECNOP)	;
論理一連ｾｸﾀ番号保存位置ﾎﾟｲﾝﾀ取得
E7DA 5E			LD	E,(HL)		;
論理一連ｾｸﾀ番号下位ﾊﾞｲﾄ取得
E7DB 23			INC	HL		;
論理一連ｾｸﾀ番号保存位置ﾎﾟｲﾝﾀ進行(+1)
E7DC 56			LD	D,(HL)		;
論理一連ｾｸﾀ番号上位ﾊﾞｲﾄ取得 [DE=現論理一連ｾｸﾀ番号]
E7DD 2AB6F1		LD	HL,(TRKNOP)	;
論理ﾄﾗｯｸ番号保存位置ﾎﾟｲﾝﾀ取得
E7E0 7E			LD	A,(HL)		;
論理ﾄﾗｯｸ番号下位ﾊﾞｲﾄ(仮)取得
E7E1 23			INC	HL		;
論理ﾄﾗｯｸ番号保存位置ﾎﾟｲﾝﾀ進行(+1)
E7E2 66			LD	H,(HL)		;
論理ﾄﾗｯｸ番号上位ﾊﾞｲﾄ取得
E7E3 6F			LD	L,A		;
論理ﾄﾗｯｸ番号下位ﾊﾞｲﾄ移動 [HL=物理ﾄﾗｯｸ番号]
E7E4		;

E7E4 79		S2TS1:	LD	A,C		;
指定一連ﾚｺｰﾄﾞ番号下位取得
E7E5 93			SUB	E		;
現論理一連ｾｸﾀ番号と比較(下位)
E7E6 78			LD	A,B		;
指定一連ﾚｺｰﾄﾞ番号上位取得
E7E7 9A			SBC	A,D		;
現論理一連ｾｸﾀ番号と比較(上位)
E7E8 D2FAE7		JP	NC,S2TS2	;
指定一連ﾚｺｰﾄﾞ番号≧現論理一連ｾｸﾀ番号で分岐
E7EB		;

E7EB E5			PUSH	HL		;
論理ﾄﾗｯｸ番号一時保存
E7EC 2AC1F1		LD	HL,(SPT)	;
ｾｸﾀ数/1ﾄﾗｯｸ(1ｾｸﾀ=128ﾊﾞｲﾄ)値取得
E7EF 7B			LD	A,E		;
現論理一連ｾｸﾀ番号下位取得
E7F0 95			SUB	L		;
現論理一連ｾｸﾀ番号1ﾄﾗｯｸ分減数(下位)
E7F1 5F			LD	E,A		;
現論理一連ｾｸﾀ番号下位更新保存
E7F2 7A			LD	A,D		;
現論理一連ｾｸﾀ番号上位取得
E7F3 9C			SBC	A,H		;
現論理一連ｾｸﾀ番号1ﾄﾗｯｸ分減数(上位)
E7F4 57			LD	D,A		;
現論理一連ｾｸﾀ番号上位更新保存
E7F5 E1			POP	HL		;
論理ﾄﾗｯｸ番号復帰
E7F6 2B			DEC	HL		;
論理ﾄﾗｯｸ番号減数(-1)
E7F7 C3E4E7		JP	S2TS1		;
指定一連ﾚｺｰﾄﾞ番号≧現論理一連ｾｸﾀ番号まで継続へ
E7FA		;

E7FA E5		S2TS2:	PUSH	HL		;
論理ﾄﾗｯｸ番号一時保存
E7FB 2AC1F1		LD	HL,(SPT)	;
ｾｸﾀ数/1ﾄﾗｯｸ(1ｾｸﾀ=128ﾊﾞｲﾄ)値取得
E7FE 19			ADD	HL,DE		;
現論理一連ｾｸﾀ番号1ﾄﾗｯｸ分仮進行
E7FF DA0FE8		JP	C,S2TS3		;
範囲(0～65535)外で分岐
E802		;

E802 79			LD	A,C		;
指定一連ﾚｺｰﾄﾞ番号下位取得
E803 95			SUB	L		;
仮論理一連ｾｸﾀ番号と比較(下位)
E804 78			LD	A,B		;
指定一連ﾚｺｰﾄﾞ番号上位取得
E805 9C			SBC	A,H		;
仮論理一連ｾｸﾀ番号と比較(上位)
E806 DA0FE8		JP	C,S2TS3		;
指定一連ﾚｺｰﾄﾞ番号＜仮論理一連ｾｸﾀ番号で分岐
E809		;

E809 EB			EX	DE,HL		;
1ﾄﾗｯｸ分進行後論理一連ｾｸﾀ番号をDEへ移動
E80A E1			POP	HL		;
論理ﾄﾗｯｸ番号復帰
E80B 23			INC	HL		;
論理ﾄﾗｯｸ番号進行(+1)
E80C C3FAE7		JP	S2TS2		;
ﾄﾗｯｸ番号確定まで継続へ
E80F		;

E80F E1		S2TS3:	POP	HL		;
論理ﾄﾗｯｸ番号復帰
E810 C5			PUSH	BC		;
指定一連ﾚｺｰﾄﾞ番号一時保存
E811 D5			PUSH	DE		;
論理一連ｾｸﾀ番号一時保存
E812 E5			PUSH	HL		;
論理ﾄﾗｯｸ番号一時保存
E813 EB			EX	DE,HL		;
論理ﾄﾗｯｸ番号をDEへ移動
E814 2ACEF1		LD	HL,(OFF)	;
ﾃﾞｨｽｸ予約ﾄﾗｯｸ数取得
E817 19			ADD	HL,DE		;
実ﾄﾗｯｸ番号取得
E818 44			LD	B,H		;
実ﾄﾗｯｸ番号上位ﾊﾞｲﾄ取得
E819 4D			LD	C,L		;
実ﾄﾗｯｸ番号下位ﾊﾞｲﾄ取得
E81A CD1EF2		CALL	XSETTRK		;
ﾄﾗｯｸ設定(BIOS)
E81D D1			POP	DE		;
ﾄﾗｯｸ番号復帰
E81E 2AB5F1		LD	HL,(TRKNOP)	;
論理ﾄﾗｯｸ番号保存位置ﾎﾟｲﾝﾀ取得
E821 73			LD	(HL),E		;
論理ﾄﾗｯｸ番号下位ﾊﾞｲﾄ保存
E822 23			INC	HL		;
論理ﾄﾗｯｸ番号保存位置ﾎﾟｲﾝﾀ進行(+1)
E823 72			LD	(HL),D		;
論理ﾄﾗｯｸ番号上位ﾊﾞｲﾄ保存
E824 D1			POP	DE		;
論理一連ｾｸﾀ番号復帰
E825 2AB7F1		LD	HL,(SECNOP)	;
論理一連ｾｸﾀ番号保存位置ﾎﾟｲﾝﾀ取得
E828 73			LD	(HL),E		;
論理一連ｾｸﾀ番号下位ﾊﾞｲﾄ保存
E829 23			INC	HL		;
論理一連ｾｸﾀ番号保存位置ﾎﾟｲﾝﾀ進行(+1)
E82A 72			LD	(HL),D		;
論理一連ｾｸﾀ番号上位ﾊﾞｲﾄ保存
E82B C1			POP	BC		;
指定一連ﾚｺｰﾄﾞ番号復帰
E82C 79			LD	A,C		;
指定一連ﾚｺｰﾄﾞ番号下位取得
E82D 93			SUB	E		;
ﾄﾗｯｸ内論理ｾｸﾀ番号下位取得
E82E 4F			LD	C,A		;
ﾄﾗｯｸ内論理ｾｸﾀ番号下位保存
E82F 78			LD	A,B		;
指定一連ﾚｺｰﾄﾞ番号上位取得
E830 9A			SBC	A,D		;
ﾄﾗｯｸ内論理ｾｸﾀ番号上位取得
E831 47			LD	B,A		;
ﾄﾗｯｸ内論理ｾｸﾀ番号上位保存
E832 2AD0F1		LD	HL,(XLTAD)	;
ｾｸﾀ変換ﾃｰﾌﾞﾙ(XLT)基準ﾎﾟｲﾝﾀ取得
E835 EB			EX	DE,HL		;
ｾｸﾀ変換ﾃｰﾌﾞﾙ(XLT)基準ﾎﾟｲﾝﾀをDEへ移動
E836 CD30F2		CALL	XSECTRN		;
ﾄﾗｯｸ内ｾｸﾀ番号変換(BIOS)
E839 4D			LD	C,L		;
変換後ｾｸﾀ番号下位ﾊﾞｲﾄ取得
E83A 44			LD	B,H		;
変換後ｾｸﾀ番号上位ﾊﾞｲﾄ取得
E83B C321F2		JP	XSETSEC		;
ｾｸﾀ設定(BIOS)後呼び出し元へ復帰へ
E83E

E83E		;	( 現ﾚｺｰﾄﾞの配置区画列内位置(ｵﾌｾｯﾄ)取得 )
E83E

E83E 21C3F1	GAPT:	LD	HL,BSH		;
配置区画ｼﾌﾄ係数(BSH)値ﾎﾟｲﾝﾀ取得
E841 4E			LD	C,(HL)		;
配置区画ｼﾌﾄ係数取得(CR値用移動ﾋﾞｯﾄ数ｶｳﾝﾀ初期化)
E842 3AE3F1		LD	A,(FCBCR)	;
FCBの現ﾚｺｰﾄﾞ番号(CR)取得
E845 B7		GAPT1:	OR	A		;
ｷｬﾘｰ ﾌﾗｸﾞ解除
E846 1F			RRA			;
右1ﾋﾞｯﾄ移動
E847 0D			DEC C			;
CR値用移動ﾋﾞｯﾄ数ｶｳﾝﾀ減数(-1)
E848 C245E8		JP	NZ,GAPT1	;
CR値配置区画単位数まで継続へ
E84B		;

E84B 47			LD	B,A		;
CR値からの配置区画位置値保存
E84C 3E08		LD	A,8		;
ﾋﾞｯﾄ数/1ﾊﾞｲﾄ値取得
E84E 96			SUB	(HL)		;
ﾊﾞｲﾄの残ｼﾌﾄ ﾋﾞｯﾄ数取得
E84F 4F			LD	C,A		;
EX値用移動ﾋﾞｯﾄ数ｶｳﾝﾀ初期化
E850 3AE2F1		LD	A,(FCBEX)	;
FCBの現拡張番号(EX)値取得
E853 0D		GAPT2:	DEC	C		;
EX値用移動ﾋﾞｯﾄ数ｶｳﾝﾀ減数(-1)
E854 CA5CE8		JP	Z,GAPT3		;
移動完了で分岐(CR=7ﾋﾞｯﾄなので移動は-1)
E857		;

E857 B7			OR	A		;
ｷｬﾘｰ ﾌﾗｸﾞ解除
E858 17			RLA			;
左1ﾋﾞｯﾄ移動
E859 C353E8		JP	GAPT2		;
EX値配置区画単位数まで継続へ
E85C		;

E85C 80		GAPT3:	ADD	A,B		;
配置区画列内対応位置(ｵﾌｾｯﾄ)値取得
E85D C9			RET			;
呼び出し元へ復帰
E85E

E85E		;	( FCB配置区画列から配置区画番号取得 )
E85E		;	入: BC:配置区画列内位置(ｵﾌｾｯﾄ)  出: HL:対応配置区画番号
E85E

E85E 2A43E7	GANO:	LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
E861 111000		LD	DE,16		;
配置区画列基準ｵﾌｾｯﾄ値取得
E864 19			ADD	HL,DE		;
配置区画列基準ﾎﾟｲﾝﾀ取得
E865 09			ADD	HL,BC		;
対応ﾊﾞｲﾄ単位配置区画列ﾎﾟｲﾝﾀ取得
E866 3ADDF1		LD	A,(BBWFLG)	;
BLS管理単位(ﾊﾞｲﾄ/ﾜｰﾄﾞ)ﾌﾗｸﾞ取得
E869 B7			OR	A		;
ﾊﾞｲﾄ/ﾜｰﾄﾞ管理単位検査
E86A CA71E8		JP	Z,GANO1		;
ﾜｰﾄﾞ単位で分岐
E86D		;

E86D 6E			LD	L,(HL)		;
対応配置区画番号取得
E86E 2600		LD	H,0		;
上位ﾊﾞｲﾄに0設定
E870 C9			RET			;
呼び出し元へ復帰
E871		;

E871 09		GANO1:	ADD	HL,BC		;
対応ﾜｰﾄﾞ単位配置区画列ﾎﾟｲﾝﾀ取得
E872 5E			LD	E,(HL)		;
対応配置区画番号下位取得
E873 23			INC	HL		;
対応ﾜｰﾄﾞ単位配置区画列ﾎﾟｲﾝﾀ進行(+1)
E874 56			LD	D,(HL)		;
対応配置区画番号上位取得
E875 EB			EX	DE,HL		;
対応配置区画番号をHLへ移動
E876 C9			RET			;
呼び出し元へ復帰
E877

E877		;	( 現ﾚｺｰﾄﾞの対応配置区画番号取得 )
E877

E877 CD3EE8	GCRAN:	CALL	GAPT		;
現ﾚｺｰﾄﾞの配置区画列内位置(ｵﾌｾｯﾄ)取得
E87A 4F			LD	C,A		;
配置区画列内位置(ｵﾌｾｯﾄ)指定
E87B 0600		LD	B,0		;
上位に0設定
E87D CD5EE8		CALL	GANO		;
FCB配置区画列から配置区画番号取得
E880 22E5F1		LD	(SECPNT),HL	;
現ﾚｺｰﾄﾞ配置区画番号一時保存
E883 C9			RET			;
呼び出し元へ復帰
E884

E884		;	( 配置区画番号有効(登録)/無効(未登録)検査 )
E884		;	出: ZF=有効(=0)/無効(=1)
E884

E884 2AE5F1	AZCHK:	LD	HL,(SECPNT)	;
現ﾚｺｰﾄﾞ配置区画番号取得
E887 7D			LD	A,L		;
現ﾚｺｰﾄﾞ配置区画番号下位取得
E888 B4			OR	H		;
対応配置区画番号有効/無効検査
E889 C9			RET			;
呼び出し元へ復帰
E88A

E88A		;	( 現配置区画番号から一連ﾚｺｰﾄﾞ番号変換 )
E88A		;	出: HL:一連ﾚｺｰﾄﾞ番号
E88A

E88A 3AC3F1	CVSEC:	LD	A,(BSH)		;
配置区画ｼﾌﾄ係数(BSH)取得
E88D 2AE5F1		LD	HL,(SECPNT)	;
現ﾚｺｰﾄﾞ配置区画番号取得
E890 29		CVSEC1:	ADD	HL,HL		;
左1ﾋﾞｯﾄ移動
E891 3D			DEC	A		;
左移動ﾋﾞｯﾄ数ｶｳﾝﾀ減数(-1)
E892 C290E8		JP	NZ,CVSEC1	;
ﾚｺｰﾄﾞ単位まで移動継続へ
E895		;

E895 22E7F1		LD	(ATPRCD),HL	;
対応配置区画先頭ﾚｺｰﾄﾞ番号保存
E898 3AC4F1		LD	A,(BLM)		;
配置区画ﾏｽｸ(BLM)値取得
E89B 4F			LD	C,A		;
配置区画ﾏｽｸ(BLM)値移動
E89C 3AE3F1		LD	A,(FCBCR)	;
FCBの現ﾚｺｰﾄﾞ番号(CR)取得
E89F A1			AND	C		;
配置区画内ﾚｺｰﾄﾞ位置ﾋﾞｯﾄのみ有効
E8A0 B5			OR	L		;
一連ﾚｺｰﾄﾞ番号下位取得
E8A1 6F			LD	L,A		;
一連ﾚｺｰﾄﾞ番号下位移動
E8A2 22E5F1		LD	(SECPNT),HL	;
一連ﾚｺｰﾄﾞ番号変換保存
E8A5 C9			RET			;
呼び出し元へ復帰
E8A6

E8A6		;	( FCBのEX値ﾎﾟｲﾝﾀ取得 )
E8A6

E8A6 2A43E7	GEXP:	LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
E8A9 110C00		LD	DE,12		;
FCBの現拡張番号(EX)値ｵﾌｾｯﾄ取得
E8AC 19			ADD	HL,DE		;
FCBの現拡張番号(EX)値ﾎﾟｲﾝﾀ取得
E8AD C9			RET			;
呼び出し元へ復帰
E8AE

E8AE		;	( FCBのRCとCR値ﾎﾟｲﾝﾀ取得 )
E8AE		;	出: DE:ﾚｺｰﾄﾞ ｶｳﾝﾀ(RC)値ﾎﾟｲﾝﾀ HL:現ﾚｺｰﾄﾞ番号(CR)値ﾎﾟｲﾝﾀ
E8AE

E8AE 2A43E7	GRCRP:	LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
E8B1 110F00		LD	DE,15		;
ﾚｺｰﾄﾞ ｶｳﾝﾀ(RC)値ｵﾌｾｯﾄ取得
E8B4 19			ADD	HL,DE		;
ﾚｺｰﾄﾞ ｶｳﾝﾀ(RC)値ﾎﾟｲﾝﾀ取得
E8B5 EB			EX	DE,HL		;
ﾚｺｰﾄﾞ ｶｳﾝﾀ(RC)値ﾎﾟｲﾝﾀ一時保存
E8B6 211100		LD	HL,32-15	;
現ﾚｺｰﾄﾞ番号(CR)値への残ｵﾌｾｯﾄ取得
E8B9 19			ADD	HL,DE		;
現ﾚｺｰﾄﾞ番号(CR)値ﾎﾟｲﾝﾀ取得
E8BA C9			RET			;
呼び出し元へ復帰
E8BB

E8BB		;	( FCBのEX,CRとRC値取得保存 )
E8BB

E8BB CDAEE8	GFRCDC:	CALL	GRCRP		;
FCBのRCとCR値ﾎﾟｲﾝﾀ取得
E8BE 7E			LD	A,(HL)		;
現ﾚｺｰﾄﾞ番号(CR)取得
E8BF 32E3F1		LD	(FCBCR),A	;
現ﾚｺｰﾄﾞ番号(CR)保存
E8C2 EB			EX	DE,HL		;
ﾚｺｰﾄﾞ ｶｳﾝﾀ(RC)値ﾎﾟｲﾝﾀをHLへ移動
E8C3 7E			LD	A,(HL)		;
ﾚｺｰﾄﾞ ｶｳﾝﾀ(RC)値取得
E8C4 32E1F1		LD	(FCBRC),A	;
ﾚｺｰﾄﾞ ｶｳﾝﾀ(RC)値保存
E8C7 CDA6E8		CALL	GEXP		;
FCBの現拡張番号(EX)値ﾎﾟｲﾝﾀ取得
E8CA 3AC5F1		LD	A,(EXM)		;
拡張ﾚｺｰﾄﾞ数(ｴﾝﾄﾘ内使用ﾋﾞｯﾄに対する)ﾏｽｸ値取得
E8CD A6			AND	(HL)		;
ｴﾝﾄﾘ内拡張ﾚｺｰﾄﾞ数取得
E8CE 32E2F1		LD	(FCBEX),A	;
FCBの現拡張番号(EX)値保存
E8D1 C9			RET			;
呼び出し元へ復帰
E8D2

E8D2		;	( FCBの現ﾚｺｰﾄﾞ位置(CR)進行 )
E8D2

E8D2 CDAEE8	UFBRC:	CALL	GRCRP		;
FCBのRCとCR値ﾎﾟｲﾝﾀ取得
E8D5 3AD5F1		LD	A,(SRMODE)	;
ﾌｧｲﾙ読み書き種別取得
E8D8 FE02		CP	2		;
不順0書き込みか検査
E8DA C2DEE8		JP	NZ,UFBRC1	;
不順0書き込み以外で分岐
E8DD		;

E8DD AF			XOR	A		;
不順0書き込みで進行数0取得
E8DE 4F		UFBRC1:	LD	C,A		;
進行ﾚｺｰﾄﾞ数保存
E8DF 3AE3F1		LD	A,(FCBCR)	;
FCBの現ﾚｺｰﾄﾞ番号(CR)取得
E8E2 81			ADD	A,C		;
ｴﾝﾄﾘ内ﾚｺｰﾄﾞ位置進行(0or+1)
E8E3 77			LD	(HL),A		;
FCBの現ﾚｺｰﾄﾞ番号(CR)更新保存
E8E4 EB			EX	DE,HL		;
ﾚｺｰﾄﾞ ｶｳﾝﾀ(RC)値ﾎﾟｲﾝﾀをHLへ移動
E8E5 3AE1F1		LD	A,(FCBRC)	;
FCBのﾚｺｰﾄﾞ ｶｳﾝﾀ(RC)値取得
E8E8 77			LD	(HL),A		;
ﾚｺｰﾄﾞ ｶｳﾝﾀ(RC)値更新保存
E8E9 C9			RET			;
呼び出し元へ復帰
E8EA

E8EA		;	( 右ﾋﾞｯﾄ移動 )
E8EA

E8EA 0C		SFTR:	INC	C		;
移動ﾋﾞｯﾄ数補正(+1)
E8EB 0D		SFTR1:	DEC	C		;
移動ﾋﾞｯﾄ数ｶｳﾝﾀ減数(-1)
E8EC C8			RET	Z		;
移動完了で呼び出し元へ復帰
E8ED		;

E8ED 7C			LD	A,H		;
上位ﾊﾞｲﾄ値取得
E8EE B7			OR	A		;
ｷｬﾘｰ ﾌﾗｸﾞ解除(=0)
E8EF 1F			RRA			;
上位ﾊﾞｲﾄ1ﾋﾞｯﾄ右移動
E8F0 67			LD	H,A		;
上位ﾊﾞｲﾄ値保存復帰
E8F1 7D			LD	A,L		;
下位ﾊﾞｲﾄ値取得
E8F2 1F			RRA			;
上位からの1ﾋﾞｯﾄを含め下位ﾊﾞｲﾄ1ﾋﾞｯﾄ右移動
E8F3 6F			LD	L,A		;
下位ﾊﾞｲﾄ値保存復帰
E8F4 C3EBE8		JP	SFTR1		;
指定ﾋﾞｯﾄ数分継続へ
E8F7

E8F7		;	( ﾃﾞｨﾚｸﾄﾘ ﾚｺｰﾄﾞ ﾁｪｯｸｻﾑ ﾍﾞｸﾀ(CSV)値作成/取得 )
E8F7

E8F7 0E80	GCSV:	LD	C,128		;
ﾊﾞｲﾄ数/1ｾｸﾀ値取得(ﾊﾞｲﾄ数ｶｳﾝﾀ初期化)
E8F9 2AB9F1		LD	HL,(DIRBFP)	;
ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
E8FC AF			XOR	A		;
O値取得
E8FD 86		GCSV1:	ADD	A,(HL)		;
対応ﾊﾞｲﾄ値加算
E8FE 23			INC	HL		;
ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ進行(+1)
E8FF 0D			DEC	C		;
ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
E900 C2FDE8		JP	NZ,GCSV1	;
1ｾｸﾀ分まで継続へ
E903		;

E903 C9			RET			;
呼び出し元へ復帰
E904

E904		;	( 左ﾋﾞｯﾄ移動 )
E904

E904 0C		SFTL:	INC	C		;
移動ﾋﾞｯﾄ数補正(+1)
E905 0D		SFTL1:	DEC	C		;
移動ﾋﾞｯﾄ数ｶｳﾝﾀ減数(-1)
E906 C8			RET	Z		;
移動完了で呼び出し元へ復帰
E907		;

E907 29			ADD	HL,HL		;
1ﾋﾞｯﾄ左移動
E908 C305E9		JP	SFTL1		;
指定ﾋﾞｯﾄ数分継続へ
E90B

E90B		;	( (ﾛｸﾞｲﾝ/読み出し専用)ﾍﾞｸﾀ ﾋﾞｯﾄ設定 )
E90B		;	入: BC:ﾍﾞｸﾀ値  出: HL:設置後ﾍﾞｸﾀ値
E90B

E90B C5		SETVCT:	PUSH	BC		;
対応ﾍﾞｸﾀ値一時保存
E90C 3A42E7		LD	A,(LOGDSK)	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号取得
E90F 4F			LD	C,A		;
左移動ﾋﾞｯﾄ数指定
E910 210100		LD	HL,1		;
初期ﾋﾞｯﾄ値取得
E913 CD04E9		CALL	SFTL		;
対応ﾃﾞｨｽｸ ﾋﾞｯﾄ値取得(左ﾋﾞｯﾄ移動)
E916 C1			POP	BC		;
対応ﾍﾞｸﾀ値復帰
E917 79			LD	A,C		;
ﾍﾞｸﾀ下位ﾊﾞｲﾄ取得
E918 B5			OR	L		;
ﾍﾞｸﾀ下位ﾊﾞｲﾄ更新
E919 6F			LD	L,A		;
ﾍﾞｸﾀ下位ﾊﾞｲﾄ保存
E91A 78			LD	A,B		;
ﾍﾞｸﾀ上位ﾊﾞｲﾄ取得
E91B B4			OR	H		;
ﾍﾞｸﾀ上位ﾊﾞｲﾄ更新
E91C 67			LD	H,A		;
ﾍﾞｸﾀ上位ﾊﾞｲﾄ保存
E91D C9			RET			;
呼び出し元へ復帰
E91E

E91E		;	( 読み出し専用(書き込み禁止)ﾃﾞｨｽｸ検査 )
E91E

E91E 2AADF1	DSKROC:	LD	HL,(ROVCT)	;
ﾃﾞｨｽｸ単位読み出し専用ﾍﾞｸﾀ値取得
E921 3A42E7		LD	A,(LOGDSK)	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号取得
E924 4F			LD	C,A		;
右移動ﾋﾞｯﾄ数指定
E925 CDEAE8		CALL	SFTR		;
最下位ﾋﾞｯﾄに対応ﾋﾞｯﾄ移動(右ﾋﾞｯﾄ移動)
E928 7D			LD	A,L		;
対応ﾃﾞｨｽｸ 読み出し専用ﾌﾗｸﾞ値取得
E929 E601		AND	00000001B	;
対応ﾃﾞｨｽｸ 読み出し専用か検査
E92B C9			RET			;
(NZ=読み出し専用)ﾌﾗｸﾞと共に呼び出し元へ復帰
E92C

E92C		;	* [BDOS機能:28] ﾃﾞｨｽｸ単位書き込み禁止設定 *
E92C

E92C 21ADF1	SETWPT:	LD	HL,ROVCT	;
ﾃﾞｨｽｸ単位読み出し専用ﾍﾞｸﾀのﾎﾟｲﾝﾀ取得
E92F 4E			LD	C,(HL)		;
読み出し専用ﾍﾞｸﾀ下位ﾊﾞｲﾄ取得
E930 23			INC	HL		;
ﾍﾞｸﾀのﾎﾟｲﾝﾀ進行(+1)
E931 46			LD	B,(HL)		;
読み出し専用ﾍﾞｸﾀ上位ﾊﾞｲﾄ取得
E932 CD0BE9		CALL	SETVCT		;
ﾍﾞｸﾀに現ﾃﾞｨｽｸ読み出し専用ﾋﾞｯﾄ設定
E935 22ADF1		LD	(ROVCT),HL	;
ﾃﾞｨｽｸ単位読み出し専用ﾍﾞｸﾀ更新保存
E938 2AC8F1		LD	HL,(DRM)	;
ﾃﾞｨﾚｸﾄﾘ総数-1値取得
E93B 23			INC	HL		;
ﾃﾞｨﾚｸﾄﾘ総数(書き込み禁止)値取得
E93C EB			EX	DE,HL		;
ﾃﾞｨﾚｸﾄﾘ総数値をDEへ移動
E93D 2AB3F1		LD	HL,(DIRMXP)	;
操作対象ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)数-1保存位置ﾎﾟｲﾝﾀ取得
E940 73			LD	(HL),E		;
操作対象ﾃﾞｨﾚｸﾄﾘ数下位書き込み禁止値設定
E941 23			INC	HL		;
操作対象ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)数-1保存位置ﾎﾟｲﾝﾀ進行(+1)
E942 72			LD	(HL),D		;
操作対象ﾃﾞｨﾚｸﾄﾘ数上位書き込み禁止値設定
E943 C9			RET			;
呼び出し元へ復帰
E944

E944		;	( ﾃﾞｨﾚｸﾄﾘでの書き込み禁止ﾌｧｲﾙ検査 )
E944

E944 CD5EE9	DROCHK:	CALL	GDEPT		;
ﾚｺｰﾄﾞ内対応ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)基準ﾎﾟｲﾝﾀ取得
E947

E947		;	( FCBでの書き込み禁止ﾌｧｲﾙ検査 )
E947

E947 110900	FROCHK:	LD	DE,9		;
FCB内T1ｵﾌｾｯﾄ値取得
E94A 19			ADD	HL,DE		;
対応FCBのT1ﾎﾟｲﾝﾀ取得
E94B 7E			LD	A,(HL)		;
対応FCBの読み出し専用ﾌﾗｸﾞ(T1)取得
E94C 17			RLA			;
読み出し専用ﾌﾗｸﾞ(MSB)をｷｬﾘｰ ﾌﾗｸﾞへ移動
E94D D0			RET	NC		;
読み書き可で呼び出し元へ復帰
E94E		;

E94E 210FE4		LD	HL,FRERRP	;
読み出し専用ﾌｧｲﾙ警告表示処理ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ取得
E951 C34AE7		JP	ERROUT		;
読み出し専用ﾌｧｲﾙ警告表示後ﾘﾌﾞｰﾄへ
E954

E954		;	( 書き込み禁止ﾃﾞｨｽｸ検査 )
E954

E954 CD1EE9	WPTCHK:	CALL	DSKROC		;
読み出し専用ﾃﾞｨｽｸ検査
E957 C8			RET	Z		;
読み書き可で呼び出し元へ復帰
E958		;

E958 210DE4		LD	HL,ROERRP	;
書き込み禁止警告表示処理ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ取得
E95B C34AE7		JP	ERROUT		;
書き込み禁止警告表示後ﾘﾌﾞｰﾄへ
E95E

E95E		;	( ﾚｺｰﾄﾞ内対応ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)基準ﾎﾟｲﾝﾀ取得 )
E95E

E95E 2AB9F1	GDEPT:	LD	HL,(DIRBFP)	;
ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
E961 3AE9F1		LD	A,(DIROFS)	;
ﾚｺｰﾄﾞ内ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)先頭ｵﾌｾｯﾄ取得
E964

E964		;	( HL=HL+A )
E964

E964 85		ADDHLA:	ADD	A,L		;
下位ﾊﾞｲﾄ値加算
E965 6F			LD	L,A		;
加算後下位ﾊﾞｲﾄ値保存(位置復帰)
E966 D0			RET	NC		;
下位ﾊﾞｲﾄからのｷｬﾘｰ無しで呼び出し元へ復帰
E967		;

E967 24			INC	H		;
ｷｬﾘｰ有りで上位ﾊﾞｲﾄに1加算
E968 C9			RET			;
呼び出し元へ復帰
E969

E969		;	( FCBのS2値取得 )
E969		;	出: A:S2値 HL:S2値ﾎﾟｲﾝﾀ
E969

E969 2A43E7	GUFBS2:	LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
E96C 110E00		LD	DE,14		;
FCB内S2値ｵﾌｾｯﾄ取得
E96F 19			ADD	HL,DE		;
対応FCB内S2値ﾎﾟｲﾝﾀ取得
E970 7E			LD	A,(HL)		;
対応FCB内S2値取得
E971 C9			RET			;
呼び出し元へ復帰
E972

E972		;	( FCBのS2値初期化 )
E972

E972 CD69E9	IUFBS2:	CALL	GUFBS2		;
FCBのS2値ﾎﾟｲﾝﾀ取得
E975 3600		LD	(HL),0		;
FCBのS2値初期化
E977 C9			RET			;
呼び出し元へ復帰
E978

E978		;	( FCB(S2)無変化ﾌﾗｸﾞ設定 )
E978

E978 CD69E9	SUCHGF:	CALL	GUFBS2		;
FCBのS2値取得
E97B F680		OR	10000000B	;
FCB内無変化ﾌﾗｸﾞ設定
E97D 77			LD	(HL),A		;
対応FCB内S2値更新保存
E97E C9			RET			;
呼び出し元へ復帰
E97F

E97F		;	( 現操作対象ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)数検査 )
E97F

E97F 2AEAF1	DMXCK:	LD	HL,(DIRPNT)	;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀ取得
E982 EB			EX	DE,HL		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀをDEへ移動
E983 2AB3F1		LD	HL,(DIRMXP)	;
操作対象最終ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置保存位置ﾎﾟｲﾝﾀ取得
E986 7B			LD	A,E		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀ下位取得
E987 96			SUB	(HL)		;
現操作対象最終ﾃﾞｨﾚｸﾄﾘ位置下位と比較
E988 23			INC	HL		;
操作対象最終ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置保存位置ﾎﾟｲﾝﾀ進行(+1)
E989 7A			LD	A,D		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀ上位取得
E98A 9E			SBC	A,(HL)		;
現操作対象最終ﾃﾞｨﾚｸﾄﾘ位置上位と比較
E98B C9			RET			;
呼び出し元へ復帰
E98C

E98C		;	( 操作対象ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)数更新 )
E98C

E98C CD7FE9	UDDMAX:	CALL	DMXCK		;
現操作対象ﾃﾞｨﾚｸﾄﾘ数検査
E98F D8			RET	C		;
現操作対象数>現ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置で復帰
E990		;

E990 13			INC	DE		;
現ﾃﾞｨﾚｸﾄﾘ位置から操作対象数取得(+1)
E991 72			LD	(HL),D		;
操作対象ﾃﾞｨﾚｸﾄﾘ数上位ﾊﾞｲﾄ値更新保存
E992 2B			DEC	HL		;
操作対象ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)数保存位置ﾎﾟｲﾝﾀ後退(-1)
E993 73			LD	(HL),E		;
操作対象ﾃﾞｨﾚｸﾄﾘ数下位ﾊﾞｲﾄ値更新保存
E994 C9			RET			;
呼び出し元へ復帰
E995

E995		;	( DE-HL=HL )
E995

E995 7B		DSUBDH:	LD	A,E		;
Eﾚｼﾞｽﾀ値取得
E996 95			SUB	L		;
下位ﾊﾞｲﾄ減算(E-L)
E997 6F			LD	L,A		;
下位ﾊﾞｲﾄ減算結果をLﾚｼﾞｽﾀへ保存
E998 7A			LD	A,D		;
Dﾚｼﾞｽﾀ値取得
E999 9C			SBC	A,H		;
ﾎﾞﾛｰを含め上位ﾊﾞｲﾄ減算(D-H)
E99A 67			LD	H,A		;
上位ﾊﾞｲﾄ減算結果をHﾚｼﾞｽﾀへ保存
E99B C9			RET			;
呼び出し元へ復帰
E99C

E99C		;	( ﾃﾞｨﾚｸﾄﾘ ﾁｪｯｸｻﾑ ﾍﾞｸﾀ(CSV)設定 )
E99C

E99C 0EFF	STCSV:	LD	C,-1		;
CSV設定ﾌﾗｸﾞ設定
E99E

E99E		;	( ﾃﾞｨﾚｸﾄﾘ ﾁｪｯｸｻﾑ ﾍﾞｸﾀ(CSV)検査 )
E99E

E99E 2AECF1	CKCSV:	LD	HL,(DRCPNT)	;
ﾚｺｰﾄﾞ単位ﾃﾞｨﾚｸﾄﾘ位置ﾎﾟｲﾝﾀ取得
E9A1 EB			EX	DE,HL		;
ﾚｺｰﾄﾞ単位ﾃﾞｨﾚｸﾄﾘ位置ﾎﾟｲﾝﾀをDEへ移動
E9A2 2ACCF1		LD	HL,(CKS)	;
ﾃﾞｨﾚｸﾄﾘ用ﾚｺｰﾄﾞ/ﾁｪｯｸｻﾑ ﾍﾞｸﾀ(CSV)数取得
E9A5 CD95E9		CALL	DSUBDH		;
ﾃﾞｨﾚｸﾄﾘ範囲か検査(DE-HL=HL)
E9A8 D0			RET	NC		;
ﾃﾞｨﾚｲｸﾄﾘ以外で呼び出し元へ復帰
E9A9		;

E9A9 C5			PUSH	BC		;
CSV設定/検査ﾌﾗｸﾞ一時保存
E9AA CDF7E8		CALL	GCSV		;
ﾃﾞｨﾚｸﾄﾘ ﾚｺｰﾄﾞ ﾁｪｯｸｻﾑ ﾍﾞｸﾀ(CSV)値作成/取得
E9AD 2ABDF1		LD	HL,(CSVP)	;
CSV領域基準ｱﾄﾞﾚｽ(BIOS)取得
E9B0 EB			EX	DE,HL		;
CSV領域基準ｱﾄﾞﾚｽ(BIOS)をDEへ移動
E9B1 2AECF1		LD	HL,(DRCPNT)	;
ﾚｺｰﾄﾞ単位ﾃﾞｨﾚｸﾄﾘ位置ﾎﾟｲﾝﾀ取得
E9B4 19			ADD	HL,DE		;
対応ﾚｺｰﾄﾞCSV領域ﾎﾟｲﾝﾀ取得
E9B5 C1			POP	BC		;
CSV設定/検査ﾌﾗｸﾞ復帰
E9B6 0C			INC	C		;
CSV設定か検査か検査
E9B7 CAC4E9		JP	Z,STCSV1	;
CSV設定で分岐
E9BA		;

E9BA BE			CP	(HL)		;
CSV検査で既CSV値と比較検査
E9BB C8			RET	Z		;
一致で呼び出し元へ復帰
E9BC		;

E9BC CD7FE9		CALL	DMXCK		;
不一致で現操作対象ﾃﾞｨﾚｸﾄﾘ数検査
E9BF D0			RET	NC		;
現操作対象数≦現ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置で復帰
E9C0		;

E9C0 CD2CE9		CALL	SETWPT		;
ﾃﾞｨｽｸ単位書き込み禁止設定
E9C3 C9			RET			;
呼び出し元へ復帰
E9C4		;

E9C4 77		STCSV1:	LD	(HL),A		;
対応ﾚｺｰﾄﾞCSV値更新/設定
E9C5 C9			RET			;
呼び出し元へ復帰
E9C6

E9C6		;	( ﾃﾞｨﾚｸﾄﾘ ﾚｺｰﾄﾞ(ｾｸﾀ)書き込み )
E9C6

E9C6 CD9CE9	DSWR:	CALL	STCSV		;
ﾃﾞｨﾚｸﾄﾘ ﾁｪｯｸｻﾑ ﾍﾞｸﾀ(CSV)設定
E9C9 CDE0E9		CALL	SDDMA		;
DMAｱﾄﾞﾚｽとしてﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧを設定
E9CC 0E01		LD	C,1		;
ﾃﾞｨﾚｸﾄﾘ ｺｰﾄﾞ指定
E9CE CDB8E7		CALL	RSWR		;
ﾚｺｰﾄﾞ(ｾｸﾀ)書き込み(BIOS)
E9D1 C3DAE9		JP	SFDMA		;
DMAｱﾄﾞﾚｽとして一般転送ﾊﾞｯﾌｧを設定後復帰へ
E9D4

E9D4		;	( ﾃﾞｨﾚｸﾄﾘ ﾚｺｰﾄﾞ(ｾｸﾀ)読み出し )
E9D4

E9D4 CDE0E9	DSRD:	CALL	SDDMA		;
DMAｱﾄﾞﾚｽとしてﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧを設定
E9D7 CDB2E7		CALL	RSRD		;
ﾚｺｰﾄﾞ(ｾｸﾀ)読み出し(BIOS)
E9DA

E9DA		;	( DMAｱﾄﾞﾚｽとして一般転送ﾊﾞｯﾌｧ設定 )
E9DA

E9DA 21B1F1	SFDMA:	LD	HL,DMAADR	;
転送ﾊﾞｯﾌｧ基準ｱﾄﾞﾚｽのﾎﾟｲﾝﾀ取得
E9DD C3E3E9		JP	SXDMA		;
DMA(転送)ｱﾄﾞﾚｽ設定後呼び出し元へ復帰へ
E9E0

E9E0		;	( DMAｱﾄﾞﾚｽとしてﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ設定 )
E9E0

E9E0 21B9F1	SDDMA:	LD	HL,DIRBFP	;
ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ基準ｱﾄﾞﾚｽのﾎﾟｲﾝﾀ取得
E9E3		;

E9E3 4E		SXDMA:	LD	C,(HL)		;
DMA(転送)基準ｱﾄﾞﾚｽ下位取得
E9E4 23			INC	HL		;
ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ進行(+1)
E9E5 46			LD	B,(HL)		;
DMA(転送)基準ｱﾄﾞﾚｽ上位取得
E9E6 C324F2		JP	XSETDMA		;
DMA(転送)基準ｱﾄﾞﾚｽ設定(BIOS)後復帰へ
E9E9

E9E9		;	( ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ内容を一般転送ﾊﾞｯﾌｧへｺﾋﾟｰ )
E9E9

E9E9 2AB9F1	MVDIR:	LD	HL,(DIRBFP)	;
ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
E9EC EB			EX	DE,HL		;
ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀをDEへ移動
E9ED 2AB1F1		LD	HL,(DMAADR)	;
転送ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ値取得
E9F0 0E80		LD	C,128		;
転送ﾊﾞｲﾄ数設定
E9F2 C34FE7		JP	MVIR		;
ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ内容を一般転送ﾊﾞｯﾌｧへｺﾋﾟｰ後復帰へ
E9F5

E9F5		;	( ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)走査完了検査 )
E9F5		; 注: 本来-1検査、0101HでもZとなるため256以下に制限される。
E9F5

E9F5 21EAF1	DPTCK:	LD	HL,DIRPNT	;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀのﾎﾟｲﾝﾀ取得
E9F8 7E			LD	A,(HL)		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀ下位取得
E9F9 23			INC	HL		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀのﾎﾟｲﾝﾀ進行(+1)
E9FA BE			CP	(HL)		;
既に最終位置完了か検査
E9FB C0			RET	NZ		;
未完了で未完了ﾌﾗｸﾞ(NZ)と共に呼び出し元へ復帰
E9FC		;

E9FC 3C			INC	A		;
完了ﾌﾗｸﾞ(Z)設定
E9FD C9			RET			;
完了ﾌﾗｸﾞ(Z)と共に呼び出し元へ復帰
E9FE

E9FE		;	( ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀ初期化 )
E9FE

E9FE 21FFFF	DPINI:	LD	HL,-1		;
-1(次回0)値取得
EA01 22EAF1		LD	(DIRPNT),HL	;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀ初期化
EA04 C9			RET			;
呼び出し元へ復帰
EA05

EA05		;	( ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)取得 )
EA05		; 注: C:CSV設定(-1)/検査(0)をCKCSVまで保存
EA05

EA05 2AC8F1	GDIR:	LD	HL,(DRM)	;
ﾃﾞｨﾚｸﾄﾘ総数-1値取得
EA08 EB			EX	DE,HL		;
ﾃﾞｨﾚｸﾄﾘ総数-1値をDEへ移動
EA09 2AEAF1		LD	HL,(DIRPNT)	;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀ取得
EA0C 23			INC	HL		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀ進行(+1)
EA0D 22EAF1		LD	(DIRPNT),HL	;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀ更新保存
EA10 CD95E9		CALL	DSUBDH		;
上限検査((ﾃﾞｨﾚｸﾄﾘ総数-1値)-(ﾃﾞｨﾚｸﾄﾘ位置ﾎﾟｲﾝﾀ))
EA13 D219EA		JP	NC,GDIR1	;
上限未到達で次処理へ
EA16		;

EA16 C3FEE9		JP	DPINI		;
上限到達で後処理後呼び出し元へ復帰へ
EA19		;

EA19 3AE9F1	GDIR1:	LD	A,(DIRPNT)	;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀ下位ﾊﾞｲﾄ取得
EA1C E603		AND	00000011B	;
ﾚｺｰﾄﾞ内ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置(0～3)取得
EA1E 0605		LD	B,5		;
×32用左移動ﾋﾞｯﾄ数ｶｳﾝﾀ初期化
EA20 87		GDIR2:	ADD	A,A		;
×2
EA21 05			DEC	B		;
×32用左移動ﾋﾞｯﾄ数ｶｳﾝﾀ減数(-1)
EA22 C220EA		JP	NZ,GDIR2	;
×32まで継続へ
EA25		;

EA25 32E9F1		LD	(DIROFS),A	;
ﾚｺｰﾄﾞ内ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)先頭ｵﾌｾｯﾄ保存
EA28 B7			OR	A		;
ﾚｺｰﾄﾞ内先頭位置(新規ｾｸﾀ)か検査
EA29 C0			RET	NZ		;
既存ﾚｺｰﾄﾞ内で呼び出し元へ復帰
EA2A		;

EA2A C5			PUSH	BC		;
CSV設定/検査ﾌﾗｸﾞ(Cﾚｼﾞｽﾀ)一時保存
EA2B CDC3E7		CALL	DS2TS		;
新規ﾃﾞｨﾚｸﾄﾘ ﾚｺｰﾄﾞ用ﾄﾗｯｸ/ｾｸﾀ設定
EA2E CDD4E9		CALL	DSRD		;
ﾃﾞｨﾚｸﾄﾘ ﾚｺｰﾄﾞ(ｾｸﾀ)読み出し
EA31 C1			POP	BC		;
CSV設定/検査ﾌﾗｸﾞ(Cﾚｼﾞｽﾀ)復帰
EA32 C39EE9		JP	CKCSV		;
CSV設定/検査後呼び出し元へ復帰へ
EA35

EA35		;	( 配置区画(ALC)ﾃｰﾌﾞﾙ 対応ﾚｺｰﾄﾞ ﾋﾞｯﾄ値取得 )
EA35		;	入: BC:ﾚｺｰﾄﾞ番号  出: D:ﾋﾞｯﾄ数ｶｳﾝﾀ
EA35

EA35 79		GALCB:	LD	A,C		;
ﾚｺｰﾄﾞ番号下位取得
EA36 E607		AND	00000111B	;
ﾋﾞｯﾄ位置用ﾋﾞｯﾄ以外解除
EA38 3C			INC	A		;
ﾋﾞｯﾄ数取得
EA39 5F			LD	E,A		;
ﾋﾞｯﾄ数ｶｳﾝﾀ初期化
EA3A 57			LD	D,A		;
ﾋﾞｯﾄ数保存
EA3B 79			LD	A,C		;
ﾚｺｰﾄﾞ番号下位取得
EA3C 0F			RRCA			;
(÷2)ﾊﾞｲﾄ単位変換(÷8)
EA3D 0F			RRCA			;
(÷4)
EA3E 0F			RRCA			;
(÷8)
EA3F E61F		AND	00011111B	;
無効ﾋﾞｯﾄ解除
EA41 4F			LD	C,A		;
ﾊﾞｲﾄ単位ｵﾌｾｯﾄ下位仮保存
EA42 78			LD	A,B		;
ﾚｺｰﾄﾞ番号上位取得
EA43 87			ADD	A,A		;
(×2)下位3ﾋﾞｯﾄを上位3ﾋﾞｯﾄ位置へ移動(×32)
EA44 87			ADD	A,A		;
(×4)
EA45 87			ADD	A,A		;
(×8)
EA46 87			ADD	A,A		;
(×16)
EA47 87			ADD	A,A		;
(×32)
EA48 B1			OR	C		;
ﾊﾞｲﾄ単位ｵﾌｾｯﾄ下位取得
EA49 4F			LD	C,A		;
ﾊﾞｲﾄ単位ｵﾌｾｯﾄ下位保存
EA4A 78			LD	A,B		;
ﾚｺｰﾄﾞ番号上位取得
EA4B 0F			RRCA			;
(÷2)上位5ﾋﾞｯﾄを下位5ﾋﾞｯﾄ位置へ移動(÷8)
EA4C 0F			RRCA			;
(÷4)
EA4D 0F			RRCA			;
(÷8)
EA4E E61F		AND	00011111B	;
ﾊﾞｲﾄ単位ｵﾌｾｯﾄ上位取得(無効ﾋﾞｯﾄ解除)
EA50 47			LD	B,A		;
ﾊﾞｲﾄ単位ｵﾌｾｯﾄ上位保存
EA51 2ABFF1		LD	HL,(ALVP)	;
配置区画ﾍﾞｸﾀ領域基準ｱﾄﾞﾚｽ(BIOS)取得
EA54 09			ADD	HL,BC		;
対応配置区画ﾍﾞｸﾀ領域ﾎﾟｲﾝﾀ取得
EA55 7E			LD	A,(HL)		;
配置区画ﾍﾞｸﾀ対応ﾊﾞｲﾄ値取得
EA56 07		GALCB1:	RLCA			;
1ﾋﾞｯﾄ左回転
EA57 1D			DEC	E		;
ﾋﾞｯﾄ数ｶｳﾝﾀ減数(-1)
EA58 C256EA		JP	NZ,GALCB1	;
対応ﾋﾞｯﾄLSB位置まで継続へ
EA5B		;

EA5B C9			RET			;
呼び出し元へ復帰
EA5C

EA5C		;	( 配置区画(ALC)ﾃｰﾌﾞﾙ 対応ﾚｺｰﾄﾞ ﾋﾞｯﾄ値変更 )
EA5C		;	入: E:配置区画ﾋﾞｯﾄ設定(1)/解除(0)
EA5C

EA5C D5		XALCB:	PUSH	DE		;
配置区画ﾋﾞｯﾄ設定/解除値一時保存
EA5D CD35EA		CALL	GALCB		;
対応ﾚｺｰﾄﾞ配置区画ﾋﾞｯﾄ値取得
EA60 E6FE		AND	11111110B	;
対応配置区画ﾋﾞｯﾄ仮解除
EA62 C1			POP	BC		;
配置区画ﾋﾞｯﾄ設定/解除値復帰
EA63 B1			OR	C		;
対応配置区画ﾋﾞｯﾄ設定or解除
EA64		;

EA64 0F		XALCB1:	RRCA			;
1ﾋﾞｯﾄ右回転
EA65 15			DEC	D		;
ﾋﾞｯﾄ数ｶｳﾝﾀ減数(-1)
EA66 C264EA		JP	NZ,XALCB1	;
対応ﾋﾞｯﾄ元位置まで継続へ
EA69		;

EA69 77			LD	(HL),A		;
対応配置区画ﾊﾞｲﾄ更新保存
EA6A C9			RET			;
呼び出し元へ復帰
EA6B

EA6B		;	( DIR/FCBのALCﾍﾞｸﾀ列から配置区画(ALC)ﾃｰﾌﾞﾙ更新 )
EA6B		;	入: C:配置区画ﾋﾞｯﾄ設定(1)/解除(0)
EA6B

EA6B CD5EE9	UALCT:	CALL	GDEPT		;
ﾚｺｰﾄﾞ内対応ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)基準ﾎﾟｲﾝﾀ取得
EA6E 111000		LD	DE,16		;
DIR/FCB内ALCﾍﾞｸﾀ先頭ｵﾌｾｯﾄ取得
EA71 19			ADD	HL,DE		;
対応DIR/FCBのALCﾍﾞｸﾀ列基準ﾎﾟｲﾝﾀ取得
EA72 C5			PUSH	BC		;
配置区画(ALC)ﾋﾞｯﾄ設定/解除値一時保存
EA73 0E11		LD	C,16+1		;
DIR/FCB内ALCﾍﾞｸﾀ列ﾊﾞｲﾄ数ｶｳﾝﾀ初期化(実ﾊﾞｲﾄ数+1)
EA75 D1		UALCT1:	POP	DE		;
配置区画(ALC)ﾋﾞｯﾄ設定/解除値復帰
EA76 0D			DEC	C		;
ALCﾍﾞｸﾀ列ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
EA77 C8			RET	Z		;
全ﾊﾞｲﾄ完了で呼び出し元へ復帰
EA78		;

EA78 D5			PUSH	DE		;
配置区画(ALC)ﾋﾞｯﾄ設定/解除値一時保存
EA79 3ADDF1		LD	A,(BBWFLG)	;
BLS管理単位(ﾊﾞｲﾄ/ﾜｰﾄﾞ)ﾌﾗｸﾞ取得
EA7C B7			OR	A		;
ALCﾍﾞｸﾀ単位(ﾊﾞｲﾄ/ﾜｰﾄﾞ)検査
EA7D CA88EA		JP	Z,UALCT2	;
ﾜｰﾄﾞ/1ﾍﾞｸﾀで分岐
EA80

EA80		;	(( ﾊﾞｲﾄALCﾍﾞｸﾀ ))
EA80

EA80 C5			PUSH	BC		;
ALCﾍﾞｸﾀ列ﾊﾞｲﾄ数ｶｳﾝﾀ一時保存
EA81 E5			PUSH	HL		;
ALCﾍﾞｸﾀ列ﾎﾟｲﾝﾀ一時保存
EA82 4E			LD	C,(HL)		;
対応ALCﾍﾞｸﾀ取得
EA83 0600		LD	B,0		;
上位ﾊﾞｲﾄに0設定
EA85 C38EEA		JP	UALCT3		;
共通処理へ
EA88

EA88		;	(( ﾜｰﾄﾞALCﾍﾞｸﾀ ))
EA88

EA88 0D		UALCT2:	DEC	C		;
ALCﾍﾞｸﾀ列ﾊﾞｲﾄ数ｶｳﾝﾀ補正(-1)
EA89 C5			PUSH	BC		;
ALCﾍﾞｸﾀ列ﾊﾞｲﾄ数ｶｳﾝﾀ一時保存
EA8A 4E			LD	C,(HL)		;
対応ALCﾍﾞｸﾀ下位ﾊﾞｲﾄ取得
EA8B 23			INC	HL		;
ALCﾍﾞｸﾀ列ﾎﾟｲﾝﾀ進行(+1)
EA8C 46			LD	B,(HL)		;
対応ALCﾍﾞｸﾀ上位ﾊﾞｲﾄ取得
EA8D E5			PUSH	HL		;
ALCﾍﾞｸﾀ列ﾎﾟｲﾝﾀ一時保存
EA8E

EA8E		;	(( 共通処理 ))
EA8E

EA8E 79		UALCT3:	LD	A,C		;
対応ALCﾍﾞｸﾀ下位ﾊﾞｲﾄ取得
EA8F B0			OR	B		;
対応ALCﾍﾞｸﾀ有効/無効検査
EA90 CA9DEA		JP	Z,UALCT4	;
無効で分岐
EA93		;

EA93 2AC6F1		LD	HL,(DSM)	;
配置区画単位利用可能数-1値取得
EA96 7D			LD	A,L		;
有効最終ALCﾍﾞｸﾀ値下位取得
EA97 91			SUB	C		;
ALCﾍﾞｸﾀ値有効/無効検査(下位)
EA98 7C			LD	A,H		;
有効最終ALCﾍﾞｸﾀ値上位取得
EA99 98			SBC	A,B		;
ALCﾍﾞｸﾀ値有効/無効検査(上位)
EA9A D45CEA		CALL	NC,XALCB	;
有効でﾒﾓﾘ上のALCﾃｰﾌﾞﾙ更新
EA9D E1		UALCT4:	POP	HL		;
ALCﾍﾞｸﾀ列ﾎﾟｲﾝﾀ復帰
EA9E 23			INC	HL		;
ALCﾍﾞｸﾀ列ﾎﾟｲﾝﾀ進行(+1)
EA9F C1			POP	BC		;
ALCﾍﾞｸﾀ列ﾊﾞｲﾄ数ｶｳﾝﾀ復帰
EAA0 C375EA		JP	UALCT1		;
全16ﾊﾞｲﾄ完了まで継続へ
EAA3

EAA3		;	( 配置区画(ALC)ﾃｰﾌﾞﾙ作成 )
EAA3

EAA3		;	(( ﾒﾓﾘ上の配置区画ﾍﾞｸﾀ(ALV)領域初期化 ))
EAA3

EAA3 2AC6F1	DSKI:	LD	HL,(DSM)	;
配置区画(BLS)単位利用可能数-1値取得
EAA6 0E03		LD	C,3		;
÷8用右移動ﾋﾞｯﾄ数指定(8ﾋﾞｯﾄ/1ﾊﾞｲﾄのため)
EAA8 CDEAE8		CALL	SFTR		;
ﾋﾞｯﾄ単位からﾊﾞｲﾄ単位へ変更(右3ﾋﾞｯﾄ移動)
EAAB 23			INC	HL		;
配置区画ﾍﾞｸﾀ(ALV)領域ﾊﾞｲﾄ数取得
EAAC 44			LD	B,H		;
ALV領域ﾊﾞｲﾄ数ｶｳﾝﾀ上位初期化
EAAD 4D			LD	C,L		;
ALV領域ﾊﾞｲﾄ数ｶｳﾝﾀ下位初期化
EAAE 2ABFF1		LD	HL,(ALVP)	;
配置区画ﾍﾞｸﾀ領域(ALV)基準ｱﾄﾞﾚｽ(BIOS)取得
EAB1 3600	DSKI1:	LD	(HL),0		;
対応ﾊﾞｲﾄ初期化
EAB3 23			INC	HL		;
配置区画ﾍﾞｸﾀ領域ﾎﾟｲﾝﾀ進行(+1)
EAB4 0B			DEC	BC		;
ALV領域ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
EAB5 78			LD	A,B		;
ALV領域ﾊﾞｲﾄ数ｶｳﾝﾀ上位取得
EAB6 B1			OR	C		;
初期化完了検査
EAB7 C2B1EA		JP	NZ,DSKI1	;
全ﾊﾞｲﾄまで初期化継続へ
EABA

EABA		;	(( 全ﾃﾞｨﾚｸﾄﾘ走査,配置区画(ALC)ﾃｰﾌﾞﾙ作成,関連初期化 ))
EABA

EABA 2ACAF1		LD	HL,(AL0)	;
ﾃﾞｨﾚｸﾄﾘ用ALV予約値取得
EABD EB			EX	DE,HL		;
ﾃﾞｨﾚｸﾄﾘ用ALV予約値をDEへ移動
EABE 2ABFF1		LD	HL,(ALVP)	;
配置区画ﾍﾞｸﾀ領域(ALV)基準ｱﾄﾞﾚｽ(BIOS)取得
EAC1 73			LD	(HL),E		;
ALV先頭にﾃﾞｨﾚｸﾄﾘ用予約値設定
EAC2 23			INC	HL		;
配置区画ﾍﾞｸﾀ領域ﾎﾟｲﾝﾀ進行(+1)
EAC3 72			LD	(HL),D		;
ALV第2ﾊﾞｲﾄにﾃﾞｨﾚｸﾄﾘ用予約値設定
EAC4 CDA1E7		CALL	DSKCLR		;
ﾃﾞｨｽｸ原点位置移動
EAC7 2AB3F1		LD	HL,(DIRMXP)	;
操作対象最終ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置保存位置ﾎﾟｲﾝﾀ取得
EACA 3603		LD	(HL),3		;
操作対象最終ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置下位初期化(1ﾚｺｰﾄﾞ分)
EACC 23			INC	HL		;
操作対象最終ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置保存位置ﾎﾟｲﾝﾀ進行(+1)
EACD 3600		LD	(HL),0		;
操作対象最終ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置上位初期化
EACF CDFEE9		CALL	DPINI		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀ初期化(=-1)
EAD2 0EFF	DSKI2:	LD	C,-1		;
CSV設定ﾌﾗｸﾞ設定
EAD4 CD05EA		CALL	GDIR		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)取得(CSV設定)
EAD7 CDF5E9		CALL	DPTCK		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)走査完了検査
EADA C8			RET	Z		;
ﾃﾞｨﾚｸﾄﾘ走査完了で呼び出し元へ復帰
EADB		;

EADB CD5EE9		CALL	GDEPT		;
ﾚｺｰﾄﾞ内対応ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)基準ﾎﾟｲﾝﾀ取得
EADE 3EE5		LD	A,0E5H		;
未使用ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)ｺｰﾄﾞ値取得
EAE0 BE			CP	(HL)		;
未使用ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)か検査
EAE1 CAD2EA		JP	Z,DSKI2		;
未使用ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)でﾃﾞｨﾚｸﾄﾘ走査完了まで継続へ
EAE4		;

EAE4 3A41E7		LD	A,(USERNO)	;
使用者番号取得
EAE7 BE			CP	(HL)		;
使用者番号検査
EAE8 C2F6EA		JP	NZ,DSKI3	;
不一致で分岐
EAEB		;

EAEB 23			INC	HL		;
ﾌｧｲﾙ名先頭位置ﾎﾟｲﾝﾀ取得
EAEC 7E			LD	A,(HL)		;
ﾌｧｲﾙ名先頭ﾊﾞｲﾄ取得
EAED D624		SUB	'$'		;
ｼｽﾃﾑ(自動処理(SUBMIT)一時)ﾌｧｲﾙ検査
EAEF C2F6EA		JP	NZ,DSKI3	;
通常ﾌｧｲﾙで分岐
EAF2		;

EAF2 3D			DEC	A		;
ｼｽﾃﾑ ﾌｧｲﾙ存在ﾌﾗｸﾞ取得
EAF3 3245E7		LD	(RETPR),A	;
ｼｽﾃﾑ ﾌｧｲﾙ存在ﾌﾗｸﾞ保存
EAF6 0E01	DSKI3:	LD	C,1		;
配置区画ﾋﾞｯﾄ設定指定
EAF8 CD6BEA		CALL	UALCT		;
配置区画(ALC)ﾃｰﾌﾞﾙ対応ﾋﾞｯﾄ設定(使用)
EAFB CD8CE9		CALL	UDDMAX		;
操作対象ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)数更新
EAFE C3D2EA		JP	DSKI2		;
ﾃﾞｨﾚｸﾄﾘ走査完了まで継続へ
EB01

EB01		;	( 対象ﾌｧｲﾙ有無復帰ｺｰﾄﾞで呼び出し元へ復帰 )
EB01

EB01 3AD4F1	BDRETX:	LD	A,(SRCHPR)	;
検索結果ｺｰﾄﾞ(0=有り,-1=無し)取得
EB04 C301E7		JP	BDRETB		;
復帰ｺｰﾄﾞ(ﾊﾞｲﾄ)保存後呼び出し元へ復帰へ
EB07

EB07		;	( ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)番号(EX)検査 )
EB07		;	入: C:ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)内EX値  出: ZF:0=不一致,1=一致
EB07

EB07 C5		EXCHK:	PUSH	BC		;
検索位置ｶｳﾝﾀとﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)内EX値一時保存[無意味]
EB08 F5			PUSH	AF		;
FCBのEX指定値一時保存
EB09 3AC5F1		LD	A,(EXM)		;
拡張ﾚｺｰﾄﾞ数(ｴﾝﾄﾘ内使用ﾋﾞｯﾄに対する)ﾏｽｸ値取得
EB0C 2F			CPL			;
ｴﾝﾄﾘ数(番号)ﾋﾞｯﾄに対するﾏｽｸ値取得
EB0D 47			LD	B,A		;
ｴﾝﾄﾘ数(番号)ﾏｽｸ値保存
EB0E 79			LD	A,C		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)内EX値取得
EB0F A0			AND	B		;
ｴﾝﾄﾘ数(番号)取得
EB10 4F			LD	C,A		;
ｴﾝﾄﾘ数(番号)一時保存
EB11 F1			POP	AF		;
FCBのEX指定値復帰
EB12 A0			AND	B		;
ｴﾝﾄﾘ数(番号)取得
EB13 91			SUB	C		;
ﾃﾞｨﾚｸﾄﾘとFCBのｴﾝﾄﾘ数(番号)比較
EB14 E61F		AND	00011111B	;
無効ﾋﾞｯﾄ解除
EB16 C1			POP	BC		;
検索位置ｶｳﾝﾀとﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)内EX値[無意味]
EB17 C9			RET			;
呼び出し元へ復帰
EB18

EB18		;	( 初回ﾌｧｲﾙ検索 )
EB18		;	入: C:比較ﾊﾞｲﾄ数
EB18

EB18 3EFF	FSRCH:	LD	A,-1		;
非存在ｺｰﾄﾞ値(0FFH)取得
EB1A 32D4F1		LD	(SRCHPR),A	;
検索結果復帰ｺｰﾄﾞ初期化(非存在)
EB1D 21D8F1		LD	HL,SRCCSV	;
比較ﾊﾞｲﾄ数値ﾎﾟｲﾝﾀ取得
EB20 71			LD	(HL),C		;
比較ﾊﾞｲﾄ数保存
EB21 2A43E7		LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
EB24 22D9F1		LD	(SRFBSV),HL	;
検索用にFCB基準ﾎﾟｲﾝﾀ保存
EB27 CDFEE9		CALL	DPINI		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀ初期化(=-1)
EB2A CDA1E7		CALL	DSKCLR		;
ﾃﾞｨｽｸ原点位置移動
EB2D

EB2D		;	( 次回ﾌｧｲﾙ検索 )
EB2D

EB2D 0E00	NSRCH:	LD	C,0		;
CSV検査ﾌﾗｸﾞ設定
EB2F CD05EA		CALL	GDIR		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)取得
EB32 CDF5E9		CALL	DPTCK		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)走査完了検査
EB35 CA94EB		JP	Z,SRCH6		;
ﾃﾞｨﾚｸﾄﾘ走査完了で終了処理へ
EB38		;

EB38 2AD9F1		LD	HL,(SRFBSV)	;
検索用のFCB基準ﾎﾟｲﾝﾀ取得
EB3B EB			EX	DE,HL		;
FCB基準ﾎﾟｲﾝﾀをDEへ移動
EB3C 1A			LD	A,(DE)		;
FCB先頭指定ﾊﾞｲﾄ値取得
EB3D FEE5		CP	0E5H		;
空きｴﾝﾄﾘ検索か検査
EB3F CA4AEB		JP	Z,SRCH1		;
空きｴﾝﾄﾘ検索で分岐
EB42

EB42		;	(( 既存操作対象ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)数検査 ))
EB42

EB42 D5			PUSH	DE		;
FCB基準ﾎﾟｲﾝﾀ一時保存
EB43 CD7FE9		CALL	DMXCK		;
現操作対象ﾃﾞｨﾚｸﾄﾘ数検査
EB46 D1			POP	DE		;
FCB基準ﾎﾟｲﾝﾀ復帰
EB47 D294EB		JP	NC,SRCH6	;
現総数≦現ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置で終了処理へ
EB4A

EB4A		;	(( ｴﾝﾄﾘ内ﾊﾞｲﾄ列比較 ))
EB4A

EB4A CD5EE9	SRCH1:	CALL	GDEPT		;
ﾚｺｰﾄﾞ内対応ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)基準ﾎﾟｲﾝﾀ取得
EB4D 3AD8F1		LD	A,(SRCCSV)	;
比較ﾊﾞｲﾄ数値取得
EB50 4F			LD	C,A		;
比較ﾊﾞｲﾄ数ｶｳﾝﾀ初期化
EB51 0600		LD	B,0		;
検索位置ｶｳﾝﾀ初期化
EB53 79		SRCH2:	LD	A,C		;
比較ﾊﾞｲﾄ数ｶｳﾝﾀ値取得
EB54 B7			OR	A		;
比較ﾊﾞｲﾄ数完了か検査
EB55 CA83EB		JP	Z,SRCH5		;
比較ﾊﾞｲﾄ数完了で分岐
EB58		;

EB58 1A			LD	A,(DE)		;
対応ﾊﾞｲﾄ取得
EB59 FE3F		CP	'?'		;
一致視指定か検査
EB5B CA7CEB		JP	Z,SRCH4		;
一致視指定で分岐(比較無)
EB5E		;

EB5E 78			LD	A,B		;
検索位置ｶｳﾝﾀ値取得
EB5F FE0D		CP	13		;
S1値位置か検査
EB61 CA7CEB		JP	Z,SRCH4		;
S1値位置で分岐(比較無)
EB64		;

EB64 FE0C		CP	12		;
EX値位置か検査
EB66 1A			LD	A,(DE)		;
FCBのEX指定値取得
EB67 CA73EB		JP	Z,SRCH3		;
EX値位置で分岐
EB6A		;

EB6A 96			SUB	(HL)		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)内対応ﾊﾞｲﾄと比較
EB6B E67F		AND	01111111B	;
最上位ﾋﾞｯﾄ解除
EB6D C22DEB		JP	NZ,NSRCH	;
不一致で次ｴﾝﾄﾘ継続へ
EB70		;

EB70 C37CEB		JP	SRCH4		;
一致で次ﾊﾞｲﾄ継続へ
EB73

EB73		;	((( 拡張ﾚｺｰﾄﾞ数(EX)検査 )))
EB73

EB73 C5		SRCH3:	PUSH	BC		;
検索位置ｶｳﾝﾀと比較ﾊﾞｲﾄ数ｶｳﾝﾀ一時保存
EB74 4E			LD	C,(HL)		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)内EX値取得
EB75 CD07EB		CALL	EXCHK		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)番号(EX)検査
EB78 C1			POP	BC		;
検索位置ｶｳﾝﾀと比較ﾊﾞｲﾄ数ｶｳﾝﾀ復帰
EB79 C22DEB		JP	NZ,NSRCH	;
ｴﾝﾄﾘ番号不一致で次ｴﾝﾄﾘ継続へ
EB7C		;

EB7C 13		SRCH4:	INC	DE		;
FCBﾎﾟｲﾝﾀ進行(+1)
EB7D 23			INC	HL		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)ﾎﾟｲﾝﾀ進行(+1)
EB7E 04			INC	B		;
検索位置ｶｳﾝﾀ進行(+1)
EB7F 0D			DEC	C		;
比較ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
EB80 C353EB		JP	SRCH2		;
次ﾊﾞｲﾄ継続へ
EB83

EB83		;	(( 一致終了 ))
EB83

EB83 3AEAF1	SRCH5:	LD	A,(DIRPNT)	;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀ下位ﾊﾞｲﾄ取得
EB86 E603		AND	00000011B	;
ｾｸﾀ内ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置(0～3)取得
EB88 3245E7		LD	(RETPR),A	;
復帰ｺｰﾄﾞとして設定
EB8B 21D4F1		LD	HL,SRCHPR	;
検索結果ｺｰﾄﾞのﾎﾟｲﾝﾀ取得
EB8E 7E			LD	A,(HL)		;
検索結果ｺｰﾄﾞ(0=有り,-1=無し)取得
EB8F 17			RLA			;
直前検索一致有無検査
EB90 D0			RET	NC		;
直前検索一致有りで呼び出し元へ復帰
EB91		;

EB91 AF			XOR	A		;
0値取得
EB92 77			LD	(HL),A		;
検索一致ﾌﾗｸﾞ設定(=0)
EB93 C9			RET			;
呼び出し元へ復帰
EB94

EB94		;	(( 不一致終了 ))
EB94

EB94 CDFEE9	SRCH6:	CALL	DPINI		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀ初期化(=-1)
EB97 3EFF		LD	A,-1		;
非存在ｺｰﾄﾞ値(0FFH)取得
EB99 C301E7		JP	BDRETB		;
復帰ｺｰﾄﾞ(ﾊﾞｲﾄ)保存後呼び出し元へ復帰へ
EB9C

EB9C		;	( ﾌｧｲﾙ削除 )
EB9C

EB9C CD54E9	DELT:	CALL	WPTCHK		;
書き込み禁止ﾃﾞｨｽｸ検査(禁止で禁止表示後ﾘﾌﾞｰﾄ)
EB9F 0E0C		LD	C,12		;
比較ﾊﾞｲﾄ数指定
EBA1 CD18EB		CALL	FSRCH		;
初回ﾌｧｲﾙ検索
EBA4 CDF5E9	DELT1:	CALL	DPTCK		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)走査完了検査
EBA7 C8			RET	Z		;
ﾃﾞｨﾚｸﾄﾘ走査完了で呼び出し元へ復帰
EBA8		;

EBA8 CD44E9		CALL	DROCHK		;
ﾃﾞｨﾚｸﾄﾘでの書き込み禁止ﾌｧｲﾙ検査
EBAB CD5EE9		CALL	GDEPT		;
ﾚｺｰﾄﾞ内対応ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)基準ﾎﾟｲﾝﾀ取得
EBAE 36E5		LD	(HL),0E5H	;
ｴﾝﾄﾘ先頭に未使用ｺｰﾄﾞ設定
EBB0 0E00		LD	C,0		;
配置区画ﾋﾞｯﾄ解除指定
EBB2 CD6BEA		CALL	UALCT		;
配置区画(ALC)ﾃｰﾌﾞﾙ対応ﾋﾞｯﾄ解除(未使用)
EBB5 CDC6E9		CALL	DSWR		;
ﾃﾞｨﾚｸﾄﾘ ﾚｺｰﾄﾞ(ｾｸﾀ)書き込み
EBB8 CD2DEB		CALL	NSRCH		;
次回ﾌｧｲﾙ検索
EBBB C3A4EB		JP	DELT1		;
全ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)完了まで継続へ
EBBE

EBBE		;	( 新規配置区画(ALV)登録 )
EBBE		;	入: BC:検索開始配置区画番号  出: HL:新規対象配置区画番号
EBBE

EBBE 50		NSALV:	LD	D,B		;
上昇検索用配置区画番号上位初期化
EBBF 59			LD	E,C		;
上昇検索用配置区画番号下位初期化
EBC0

EBC0		;	(( 下降検索 ))
EBC0

EBC0 79		NSALV1:	LD	A,C		;
下降検索数ｶｳﾝﾀ下位取得
EBC1 B0			OR	B		;
下降検索完了検査
EBC2 CAD1EB		JP	Z,NSALV2	;
下降検索完了で分岐
EBC5		;

EBC5 0B			DEC	BC		;
下降検索数ｶｳﾝﾀ減数(-1)
EBC6 D5			PUSH	DE		;
上昇検索用配置区画番号一時保存
EBC7 C5			PUSH	BC		;
下降検索数ｶｳﾝﾀ兼区画番号一時保存
EBC8 CD35EA		CALL	GALCB		;
対応ﾚｺｰﾄﾞ配置区画ﾋﾞｯﾄ値取得
EBCB 1F			RRA			;
対応配置ﾋﾞｯﾄをｷｬﾘｰ ﾌﾗｸﾞに反映
EBCC D2ECEB		JP	NC,NSALV3	;
対応配置区画未使用で分岐
EBCF		;

EBCF C1			POP	BC		;
下降検索数ｶｳﾝﾀ兼区画番号復帰
EBD0 D1			POP	DE		;
上昇検索用配置区画番号復帰
EBD1

EBD1		;	(( 上昇検索 ))
EBD1

EBD1 2AC6F1	NSALV2:	LD	HL,(DSM)	;
配置区画単位利用可能数-1値取得
EBD4 7B			LD	A,E		;
配置区画番号下位取得
EBD5 95			SUB	L		;
最終配置区画番号下位と比較
EBD6 7A			LD	A,D		;
配置区画番号上位取得
EBD7 9C			SBC	A,H		;
最終配置区画番号上位と比較
EBD8 D2F4EB		JP	NC,NSALV4	;
最終配置区画番号到達で分岐
EBDB		;

EBDB 13			INC	DE		;
上昇検索用配置区画番号進行(+1)
EBDC C5			PUSH	BC		;
下降検索数ｶｳﾝﾀ兼区画番号一時保存
EBDD D5			PUSH	DE		;
上昇検索用配置区画番号一時保存
EBDE 42			LD	B,D		;
上昇検索用配置区画番号上位指定
EBDF 4B			LD	C,E		;
上昇検索用配置区画番号下位指定
EBE0 CD35EA		CALL	GALCB		;
上昇検索用配置区画ﾋﾞｯﾄ値取得
EBE3 1F			RRA			;
対応配置ﾋﾞｯﾄをｷｬﾘｰ ﾌﾗｸﾞに反映
EBE4 D2ECEB		JP	NC,NSALV3	;
対応配置区画未使用で分岐
EBE7		;

EBE7 D1			POP	DE		;
上昇検索用配置区画番号復帰
EBE8 C1			POP	BC		;
下降検索数ｶｳﾝﾀ兼区画番号復帰
EBE9 C3C0EB		JP	NSALV1		;
全検索完了まで継続へ
EBEC

EBEC		;	(( 空き有り ))
EBEC

EBEC 17		NSALV3:	RLA			;
対応配置ﾋﾞｯﾄを含むﾊﾞｲﾄ値の位置補正(復帰)
EBED 3C			INC	A		;
対応ﾊﾞｲﾄの対応配置区画ﾋﾞｯﾄ設定
EBEE CD64EA		CALL	XALCB1		;
ﾋﾞｯﾄ位置復帰,配置区画(ALC)ﾃｰﾌﾞﾙ書き戻し
EBF1 E1			POP	HL		;
対象配置区画番号復帰 [注:0の場合有るが予約領域]
EBF2 D1			POP	DE		;
ｽﾀｯｸ ﾎﾟｲﾝﾀ補正(-2)
EBF3 C9			RET			;
呼び出し元へ復帰
EBF4

EBF4		;	(( 下降検索残検査 ))
EBF4

EBF4 79		NSALV4:	LD	A,C		;
下降検索数ｶｳﾝﾀ下位取得
EBF5 B0			OR	B		;
下降検索完了検査
EBF6 C2C0EB		JP	NZ,NSALV1	;
下降検索未完了で継続へ
EBF9

EBF9		;	(( 空き無し ))
EBF9

EBF9 210000		LD	HL,0		;
空き無しｺｰﾄﾞ設定
EBFC C9			RET			;
呼び出し元へ復帰
EBFD

EBFD		;	( ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)全更新後書き込み )
EBFD

EBFD 0E00	DXWRA:	LD	C,0		;
FCB内ｵﾌｾｯﾄ指定(0:先頭)
EBFF 1E20		LD	E,32		;
転送ﾊﾞｲﾄ数(32)設定
EC01

EC01		;	( ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)部分更新後書き込み )
EC01		;	入: C:FCB内開始位置ｵﾌｾｯﾄ値 E:転送(更新)ﾊﾞｲﾄ数
EC01

EC01 D5		DXWRS:	PUSH	DE		;
転送ﾊﾞｲﾄ数一時保存
EC02 0600		LD	B,0		;
FCB内ｵﾌｾｯﾄ上位に0設定
EC04 2A43E7		LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
EC07 09			ADD	HL,BC		;
FCB転送開始位置ﾎﾟｲﾝﾀ取得
EC08 EB			EX	DE,HL		;
FCB転送開始位置ﾎﾟｲﾝﾀをDE(転送元)へ移動
EC09 CD5EE9		CALL	GDEPT		;
ﾚｺｰﾄﾞ内対応ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)基準ﾎﾟｲﾝﾀ取得(HL)
EC0C C1			POP	BC		;
転送ﾊﾞｲﾄ数復帰
EC0D CD4FE7		CALL	MVIR		;
対応ﾊﾞｲﾄ列FCB→ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)
EC10

EC10		;	( ﾄﾗｯｸ/ｾｸﾀ設定後ﾃﾞｨﾚｸﾄﾘ ﾚｺｰﾄﾞ(ｾｸﾀ)書き込み )
EC10

EC10 CDC3E7	XDWR:	CALL	DS2TS		;
対応ﾃﾞｨﾚｸﾄﾘ ﾚｺｰﾄﾞ用ﾄﾗｯｸ/ｾｸﾀ設定
EC13 C3C6E9		JP	DSWR		;
ﾃﾞｨﾚｸﾄﾘ ﾚｺｰﾄﾞ(ｾｸﾀ)書き込み後呼び出し元へ復帰へ
EC16

EC16		;	( ﾌｧｲﾙ名変更 )
EC16

EC16 CD54E9	REN:	CALL	WPTCHK		;
書き込み禁止ﾃﾞｨｽｸ検査(禁止で禁止表示後ﾘﾌﾞｰﾄ)
EC19 0E0C		LD	C,12		;
比較ﾊﾞｲﾄ数指定
EC1B CD18EB		CALL	FSRCH		;
初回ﾌｧｲﾙ検索
EC1E 2A43E7		LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
EC21 7E			LD	A,(HL)		;
指定ﾄﾞﾗｲﾌﾞ番号取得
EC22 111000		LD	DE,16		;
変更後ﾄﾞﾗｲﾌﾞ番号+ﾌｧｲﾙ名先頭ｵﾌｾｯﾄ値取得
EC25 19			ADD	HL,DE		;
変更後ﾄﾞﾗｲﾌﾞ番号+ﾌｧｲﾙ名基準ﾎﾟｲﾝﾀ取得
EC26 77			LD	(HL),A		;
ﾄﾞﾗｲﾌﾞ番号同一に強制変更
EC27 CDF4E9	REN1:	CALL	DPTCK		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)走査完了検査
EC2A C8			RET	Z		;
ﾃﾞｨﾚｸﾄﾘ走査完了で呼び出し元へ復帰
EC2B		;

EC2B CD44E9		CALL	DROCHK		;
ﾃﾞｨﾚｸﾄﾘでの書き込み禁止ﾌｧｲﾙ検査
EC2E 0E10		LD	C,16		;
FCB内開始位置ｵﾌｾｯﾄ指定
EC30 1E0C		LD	E,12		;
転送(更新)ﾊﾞｲﾄ数指定
EC32 CD01EC		CALL	DXWRS		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)部分更新後書き込み
EC35 CD2DEB		CALL	NSRCH		;
次回ﾌｧｲﾙ検索
EC38 C327EC		JP	REN1		;
全ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)完了まで継続へ
EC3B

EC3B		;	( ﾌｧｲﾙ属性変更 )
EC3B

EC3B 0E0C	SATRB:	LD	C,12		;
比較ﾊﾞｲﾄ数指定
EC3D CD18EB		CALL	FSRCH		;
初回ﾌｧｲﾙ検索
EC40 CDF5E9	SATRB1:	CALL	DPTCK		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)走査完了検査
EC43 C8			RET	Z		;
ﾃﾞｨﾚｸﾄﾘ走査完了で呼び出し元へ復帰
EC44		;

EC44 0E00		LD	C,0		;
FCB内開始位置ｵﾌｾｯﾄ指定
EC46 1E0C		LD	E,12		;
転送(更新)ﾊﾞｲﾄ数指定
EC48 CD01EC		CALL	DXWRS		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)部分更新後書き込み
EC4B CD2DEB		CALL	NSRCH		;
次回ﾌｧｲﾙ検索
EC4E C340EC		JP	SATRB1		;
全ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)完了まで継続へ
EC51

EC51		;	( ﾌｧｲﾙ開始(ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ取得,FCB初期化) )
EC51

EC51 0E0F	OPEN:	LD	C,15		;
比較(DR～S2)ﾊﾞｲﾄ数指定
EC53 CD18EB		CALL	FSRCH		;
初回ﾌｧｲﾙ検索
EC56 CDF5E9		CALL	DPTCK		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)走査完了検査
EC59 C8			RET	Z		;
ﾃﾞｨﾚｸﾄﾘ走査完了で呼び出し元へ復帰
EC5A

EC5A CDA6E8	OPEN1:	CALL	GEXP		;
FCBの現拡張番号(EX)値ﾎﾟｲﾝﾀ取得
EC5D 7E			LD	A,(HL)		;
FCB拡張ﾚｺｰﾄﾞ番号取得
EC5E F5			PUSH	AF		;
FCB拡張ﾚｺｰﾄﾞ番号一時保存
EC5F E5			PUSH	HL		;
FCBの拡張番号(EX)値ﾎﾟｲﾝﾀ一時保存
EC60 CD5EE9		CALL	GDEPT		;
ﾚｺｰﾄﾞ内対応ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)基準ﾎﾟｲﾝﾀ取得
EC63 EB			EX	DE,HL		;
対応ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)基準ﾎﾟｲﾝﾀをDEへ移動(転送元)
EC64 2A43E7		LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得(転送先)
EC67 0E20		LD	C,32		;
転送ﾊﾞｲﾄ数指定
EC69 D5			PUSH	DE		;
対応ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)基準ﾎﾟｲﾝﾀ一時保存
EC6A CD4FE7		CALL	MVIR		;
対応ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)内容をFCBへｺﾋﾟｰ
EC6D CD78E9		CALL	SUCHGF		;
FCB(S2)無変化ﾌﾗｸﾞ設定
EC70 D1			POP	DE		;
対応ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)基準ﾎﾟｲﾝﾀ復帰
EC71 210C00		LD	HL,12		;
拡張ﾚｺｰﾄﾞ番号(EX)位置ｵﾌｾｯﾄ値取得
EC74 19			ADD	HL,DE		;
ｴﾝﾄﾘの拡張ﾚｺｰﾄﾞ番号(EX)ﾎﾟｲﾝﾀ取得
EC75 4E			LD	C,(HL)		;
ｴﾝﾄﾘの拡張ﾚｺｰﾄﾞ番号(EX)取得
EC76 210F00		LD	HL,15		;
ﾚｺｰﾄﾞ番号(RC)位置ｵﾌｾｯﾄ値取得
EC79 19			ADD	HL,DE		;
ｴﾝﾄﾘのﾚｺｰﾄﾞ番号(RC)ﾎﾟｲﾝﾀ取得
EC7A 46			LD	B,(HL)		;
ｴﾝﾄﾘのﾚｺｰﾄﾞ番号(RC)取得
EC7B E1			POP	HL		;
FCBの拡張番号(EX)値ﾎﾟｲﾝﾀ復帰
EC7C F1			POP	AF		;
FCB拡張ﾚｺｰﾄﾞ番号復帰
EC7D 77			LD	(HL),A		;
FCB内拡張ﾚｺｰﾄﾞ番号再設定(復帰)
EC7E 79			LD	A,C		;
ｴﾝﾄﾘの拡張ﾚｺｰﾄﾞ番号(EX)取得
EC7F BE			CP	(HL)		;
拡張ﾚｺｰﾄﾞ番号(EX)比較
EC80 78			LD	A,B		;
ｴﾝﾄﾘのﾚｺｰﾄﾞ番号(RC)取得
EC81 CA8BEC		JP	Z,OPEN2		;
拡張ﾚｺｰﾄﾞ番号(EX)一致で分岐
EC84		;

EC84 3E00		LD	A,0		;
不一致既存ｺｰﾄﾞ取得
EC86 DA8BEC		JP	C,OPEN2		;
拡張ﾚｺｰﾄﾞ番号(EX)がｴﾝﾄﾘ<FCBで分岐
EC89		;

EC89 3E80		LD	A,10000000B	;
不一致新規ﾌﾗｸﾞ取得
EC8B 2A43E7	OPEN2:	LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
EC8E 110F00		LD	DE,15		;
ﾚｺｰﾄﾞ番号(RC)位置ｵﾌｾｯﾄ値取得
EC91 19			ADD	HL,DE		;
FCBのﾚｺｰﾄﾞ番号(RC)ﾎﾟｲﾝﾀ取得
EC92 77			LD	(HL),A		;
FCB内ﾚｺｰﾄﾞ番号(RC)設定
EC93 C9			RET			;
呼び出し元へ復帰
EC94

EC94		;	( ﾃﾞｨﾚｸﾄﾘ/FCB間ﾜｰﾄﾞALCﾍﾞｸﾀ登録処理 )
EC94		;	入:  DE:ﾃﾞｨﾚｸﾄﾘ/FCBのALCﾍﾞｸﾀ列ﾎﾟｲﾝﾀ HL:FCB/ﾃﾞｨﾚｸﾄﾘのALCﾍﾞｸﾀ列ﾎﾟｲﾝﾀ
EC94

EC94 7E		DDCHK:	LD	A,(HL)		;
FCB/ﾃﾞｨﾚｸﾄﾘの対応ALCﾍﾞｸﾀ下位取得
EC95 23			INC	HL		;
FCB/ﾃﾞｨﾚｸﾄﾘのALCﾍﾞｸﾀ列ﾎﾟｲﾝﾀ進行(+1)
EC96 B6			OR	(HL)		;
FCB/ﾃﾞｨﾚｸﾄﾘの対応ALCﾍﾞｸﾀ登録検査
EC97 2B			DEC	HL		;
FCB/ﾃﾞｨﾚｸﾄﾘのALCﾍﾞｸﾀ列ﾎﾟｲﾝﾀ後退(-1:回復)
EC98 C0			RET	NZ		;
FCB/ﾃﾞｨﾚｸﾄﾘの対応ALCﾍﾞｸﾀ既登録で呼び出し元へ復帰
EC99		;

EC99 1A			LD	A,(DE)		;
ﾃﾞｨﾚｸﾄﾘ/FCBの対応ALCﾍﾞｸﾀ下位取得
EC9A 77			LD	(HL),A		;
FCB/ﾃﾞｨﾚｸﾄﾘの対応ALCﾍﾞｸﾀ下位設定
EC9B 13			INC	DE		;
ﾃﾞｨﾚｸﾄﾘ/FCBのALCﾍﾞｸﾀ列ﾎﾟｲﾝﾀ進行(+1)
EC9C 23			INC	HL		;
FCB/ﾃﾞｨﾚｸﾄﾘのALCﾍﾞｸﾀ列ﾎﾟｲﾝﾀ進行(+1)
EC9D 1A			LD	A,(DE)		;
ﾃﾞｨﾚｸﾄﾘ/FCBの対応ALCﾍﾞｸﾀ上位取得
EC9E 77			LD	(HL),A		;
FCB/ﾃﾞｨﾚｸﾄﾘの対応ALCﾍﾞｸﾀ上位設定
EC9F 1B			DEC	DE		;
ﾃﾞｨﾚｸﾄﾘ/FCBのALCﾍﾞｸﾀ列ﾎﾟｲﾝﾀ後退(-1:回復)
ECA0 2B			DEC	HL		;
FCB/ﾃﾞｨﾚｸﾄﾘのALCﾍﾞｸﾀ列ﾎﾟｲﾝﾀ後退(-1:回復)
ECA1 C9			RET			;
呼び出し元へ復帰
ECA2

ECA2		;	( ﾌｧｲﾙ閉鎖(ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ登録/書き込み) )
ECA2

ECA2 AF		CLOSE:	XOR	A		;
0値取得
ECA3 3245E7		LD	(RETPR),A	;
復帰ｺｰﾄﾞ初期化
ECA6 32EAF1		LD	(DIRPNT),A	;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀ下位ﾊﾞｲﾄ初期化
ECA9 32EBF1		LD	(DIRPNT+1),A	;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀ上位ﾊﾞｲﾄ初期化
ECAC CD1EE9		CALL	DSKROC		;
読み出し専用ﾃﾞｨｽｸ検査
ECAF C0			RET	NZ		;
読み出し専用ﾃﾞｨｽｸで呼び出し元へ復帰
ECB0		;

ECB0 CD69E9		CALL	GUFBS2		;
FCBのS2値取得
ECB3 E680		AND	10000000B	;
FCB内容変化有無検査
ECB5 C0			RET	NZ		;
内容無変化で呼び出し元へ復帰
ECB6		;

ECB6 0E0F		LD	C,15		;
比較(DR～S2)ﾊﾞｲﾄ数指定
ECB8 CD18EB		CALL	FSRCH		;
初回ﾌｧｲﾙ検索
ECBB CDF5E9		CALL	DPTCK		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)走査完了検査
ECBE C8			RET	Z		;
対象ｴﾝﾄﾘ無し(走査完了)で呼び出し元へ復帰
ECBF

ECBF 011000		LD	BC,16		;
配置区画番号列先頭ｵﾌｾｯﾄ値取得
ECC2 CD5EE9		CALL	GDEPT		;
ﾚｺｰﾄﾞ内対応ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)基準ﾎﾟｲﾝﾀ取得
ECC5 09			ADD	HL,BC		;
ｴﾝﾄﾘの配置区画番号列基準ﾎﾟｲﾝﾀ取得
ECC6 EB			EX	DE,HL		;
ｴﾝﾄﾘの配置区画番号列基準ﾎﾟｲﾝﾀをDEへ移動
ECC7 2A43E7		LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
ECCA 09			ADD	HL,BC		;
FCBの配置区画番号列基準ﾎﾟｲﾝﾀ取得
ECCB 0E10		LD	C,16		;
処理ﾊﾞｲﾄ数ｶｳﾝﾀ初期化
ECCD 3ADDF1	CLOSE1:	LD	A,(BBWFLG)	;
BLS管理単位(ﾊﾞｲﾄ/ﾜｰﾄﾞ)ﾌﾗｸﾞ取得
ECD0 B7			OR	A		;
ﾊﾞｲﾄ/ﾜｰﾄﾞ単位検査
ECD1 CAE8EC		JP	Z,CLOSE4	;
ﾜｰﾄﾞ単位で分岐
ECD4

ECD4		;	(( ﾊﾞｲﾄALCﾍﾞｸﾀ処理 ))
ECD4

ECD4 7E			LD	A,(HL)		;
FCBの対応ALCﾍﾞｸﾀ取得
ECD5 B7			OR	A		;
FCBの対応ALCﾍﾞｸﾀ登録検査
ECD6 1A			LD	A,(DE)		;
ﾃﾞｨﾚｸﾄﾘの対応ALCﾍﾞｸﾀ取得
ECD7 C2DBEC		JP	NZ,CLOSE2	;
FCBの対応ALCﾍﾞｸﾀ既登録で分岐
ECDA		;

ECDA 77			LD	(HL),A		;
FCB未登録ならﾃﾞｨﾚｸﾄﾘの対応ALCﾍﾞｸﾀを設定
ECDB B7		CLOSE2:	OR	A		;
ﾃﾞｨﾚｸﾄﾘの対応ALCﾍﾞｸﾀ登録検査
ECDC C2E1EC		JP	NZ,CLOSE3	;
ﾃﾞｨﾚｸﾄﾘの対応ALCﾍﾞｸﾀ既登録で分岐
ECDF		;

ECDF 7E			LD	A,(HL)		;
FCBの対応ALCﾍﾞｸﾀ取得
ECE0 12			LD	(DE),A		;
ﾃﾞｨﾚｸﾄﾘ未登録ならFCBの対応ALCﾍﾞｸﾀを設定
ECE1 BE		CLOSE3:	CP	(HL)		;
両対応ALCﾍﾞｸﾀ比較
ECE2 C21FED		JP	NZ,CLOSE7	;
不一致で分岐
ECE5		;

ECE5 C3FDEC		JP	CLOSE5		;
一致で次へ分岐
ECE8

ECE8		;	(( ﾜｰﾄﾞALCﾍﾞｸﾀ処理 ))
ECE8

ECE8 CD94EC	CLOSE4:	CALL	DDCHK		;
ﾃﾞｨﾚｸﾄﾘ/FCB間ﾜｰﾄﾞALCﾍﾞｸﾀ登録処理
ECEB EB			EX	DE,HL		;
DE:FCB,HL:ﾃﾞｨﾚｸﾄﾘのALVﾍﾞｸﾀ列ﾎﾟｲﾝﾀ
ECEC CD94EC		CALL	DDCHK		;
FCB/ﾃﾞｨﾚｸﾄﾘ間ﾜｰﾄﾞALCﾍﾞｸﾀ登録処理
ECEF EB			EX	DE,HL		;
DE:ﾃﾞｨﾚｸﾄﾘ,HL:FCBのALVﾍﾞｸﾀ列ﾎﾟｲﾝﾀ(回復)
ECF0 1A			LD	A,(DE)		;
ﾃﾞｨﾚｸﾄﾘの対応ALCﾍﾞｸﾀ下位取得
ECF1 BE			CP	(HL)		;
両対応ALCﾍﾞｸﾀ下位比較
ECF2 C21FED		JP	NZ,CLOSE7	;
不一致で分岐
ECF5		;

ECF5 13			INC	DE		;
ﾃﾞｨﾚｸﾄﾘのALCﾍﾞｸﾀ列ﾎﾟｲﾝﾀ進行(+1)
ECF6 23			INC	HL		;
FCBのALCﾍﾞｸﾀ列ﾎﾟｲﾝﾀ進行(+1)
ECF7 1A			LD	A,(DE)		;
ﾃﾞｨﾚｸﾄﾘの対応ALCﾍﾞｸﾀ上位取得
ECF8 BE			CP	(HL)		;
両対応ALCﾍﾞｸﾀ上位比較
ECF9 C21FED		JP	NZ,CLOSE7	;
不一致で分岐
ECFC		;

ECFC 0D			DEC	C		;
処理ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
ECFD

ECFD		;	(( 継続共通処理 ))
ECFD

ECFD 13		CLOSE5:	INC	DE		;
ﾃﾞｨﾚｸﾄﾘのALCﾍﾞｸﾀ列ﾎﾟｲﾝﾀ進行(+1)
ECFE 23			INC	HL		;
FCBのALCﾍﾞｸﾀ列ﾎﾟｲﾝﾀ進行(+1)
ECFF 0D			DEC	C		;
処理ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
ED00 C2CDEC		JP	NZ,CLOSE1	;
ﾊﾞｲﾄ列処理完了まで継続へ
ED03

ED03		;	(( 終了処理 ))
ED03

ED03 01ECFF		LD	BC,0-32+12	;
拡張ﾚｺｰﾄﾞ番号(EX)までの負のｵﾌｾｯﾄ値取得
ED06 09			ADD	HL,BC		;
FCBの拡張ﾚｺｰﾄﾞ番号ﾎﾟｲﾝﾀ取得
ED07 EB			EX	DE,HL		;
DE:FCBの拡張ﾚｺｰﾄﾞ番号ﾎﾟｲﾝﾀ,HL:次ｴﾝﾄﾘ先頭ﾎﾟｲﾝﾀ
ED08 09			ADD	HL,BC		;
ﾃﾞｨﾚｸﾄﾘの拡張ﾚｺｰﾄﾞ番号ﾎﾟｲﾝﾀ取得
ED09 1A			LD	A,(DE)		;
FCBの拡張ﾚｺｰﾄﾞ番号取得
ED0A BE			CP	(HL)		;
両拡張ﾚｺｰﾄﾞ番号比較
ED0B DA17ED		JP	C,CLOSE6	;
対応ﾌｧｲﾙ最終ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ以外で分岐
ED0E

ED0E		;	(( 最終ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ使用ﾚｺｰﾄﾞ数更新 ))
ED0E

ED0E 77			LD	(HL),A		;
ﾃﾞｨﾚｸﾄﾘの拡張ﾚｺｰﾄﾞ番号更新
ED0F 010300		LD	BC,15-12	;
ﾚｺｰﾄﾞ数(RC)位置ｵﾌｾｯﾄ値取得
ED12 09			ADD	HL,BC		;
ﾃﾞｨﾚｸﾄﾘのﾚｺｰﾄﾞ数ﾎﾟｲﾝﾀ取得
ED13 EB			EX	DE,HL		;
DE:ﾃﾞｨﾚｸﾄﾘのﾚｺｰﾄﾞ数ﾎﾟｲﾝﾀ,HL:FCBの拡張ﾚｺｰﾄﾞ番号ﾎﾟｲﾝﾀ
ED14 09			ADD	HL,BC		;
FCBのﾚｺｰﾄﾞ数ﾎﾟｲﾝﾀ取得
ED15 7E			LD	A,(HL)		;
FCBのﾚｺｰﾄﾞ数取得
ED16 12			LD	(DE),A		;
ﾃﾞｨﾚｸﾄﾘのﾚｺｰﾄﾞ数更新
ED17

ED17		;	(( 終了共通処理 ))
ED17

ED17 3EFF	CLOSE6:	LD	A,11111111B	;
全1ﾋﾞｯﾄ値取得
ED19 32D2F1		LD	(EXMSK),A	;
ｴﾝﾄﾘ内分拡張ﾚｺｰﾄﾞ(EX)値参照ﾏｽｸ設定
ED1C C310EC		JP	XDWR		;
ﾄﾗｯｸ/ｾｸﾀ設定後ﾃﾞｨﾚｸﾄﾘ ﾚｺｰﾄﾞ(ｾｸﾀ)書き込み後復帰へ
ED1F		;

ED1F 2145E7	CLOSE7:	LD	HL,RETPR	;
復帰ｺｰﾄﾞ値ﾎﾟｲﾝﾀ取得
ED22 35			DEC	(HL)		;
失敗(0FFH)ｺｰﾄﾞ設定
ED23 C9			RET			;
呼び出し元へ復帰
ED24

ED24		;	( ﾌｧｲﾙ(空ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ)作成 )
ED24

ED24 CD54E9	MAKE:	CALL	WPTCHK		;
書き込み禁止ﾃﾞｨｽｸ検査(禁止で禁止表示後ﾘﾌﾞｰﾄ)
ED27 2A43E7		LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
ED2A E5			PUSH	HL		;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)一時保存
ED2B 21ACF1		LD	HL,FREDM	;
未使用ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ印ﾎﾟｲﾝﾀ取得
ED2E 2243E7		LD	(DESV),HL	;
FCBを未使用ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘに一時変更
ED31 0E01		LD	C,1		;
比較(DR)ﾊﾞｲﾄ数指定
ED33 CD18EB		CALL	FSRCH		;
初回ﾌｧｲﾙ検索(未使用ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ)
ED36 CDF5E9		CALL	DPTCK		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)走査完了検査
ED39 E1			POP	HL		;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)復帰
ED3A 2243E7		LD	(DESV),HL	;
BDOS機能移行時DEﾚｼﾞｽﾀ値復帰
ED3D C8			RET	Z		;
ﾃﾞｨﾚｸﾄﾘ走査完了で呼び出し元へ復帰
ED3E		;

ED3E EB			EX	DE,HL		;
FCB基準ﾎﾟｲﾝﾀをDEに保存
ED3F 210F00		LD	HL,15		;
ﾚｺｰﾄﾞ数(RC)位置ｵﾌｾｯﾄ取得
ED42 19			ADD	HL,DE		;
FCBのﾚｺｰﾄﾞ数ﾎﾟｲﾝﾀ取得
ED43 0E11		LD	C,1+16		;
RCと配置区画番号列のﾊﾞｲﾄ数取得
ED45 AF			XOR	A		;
0値取得
ED46 77		MAKE1:	LD	(HL),A		;
対応ﾊﾞｲﾄ初期化
ED47 23			INC	HL		;
FCBﾎﾟｲﾝﾀ進行(+1)
ED48 0D			DEC	C		;
ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
ED49 C246ED		JP	NZ,MAKE1	;
全ﾊﾞｲﾄ初期化完了まで継続へ
ED4C		;

ED4C 210D00		LD	HL,13		;
S1値位置ｵﾌｾｯﾄ取得
ED4F 19			ADD	HL,DE		;
FCBのS1値ﾎﾟｲﾝﾀ取得
ED50 77			LD	(HL),A		;
FCBのS1値初期化
ED51 CD8CE9		CALL	UDDMAX		;
操作対象ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)数更新
ED54 CDFDEB		CALL	DXWRA		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)全更新後書き込み
ED57 C378E9		JP	SUCHGF		;
FCB(S2)無変化ﾌﾗｸﾞ設定後呼び出し元へ復帰へ
ED5A

ED5A		;	( 現ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ保存と次ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ取得/作成 )
ED5A

ED5A AF		OPNEX:	XOR	A		;
0値取得
ED5B 32D2F1		LD	(EXMSK),A	;
ｴﾝﾄﾘ内分拡張ﾚｺｰﾄﾞ(EX)値参照ﾏｽｸ初期化(非参照)
ED5E CDA2EC		CALL	CLOSE		;
現ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ登録/書き込み
ED61 CDF5E9		CALL	DPTCK		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)走査完了検査
ED64 C8			RET	Z		;
対象ｴﾝﾄﾘ無し(走査完了)で呼び出し元へ復帰
ED65		;

ED65 2A43E7		LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
ED68 010C00		LD	BC,12		;
拡張ﾚｺｰﾄﾞ数(EX)位置ｵﾌｾｯﾄ取得
ED6B 09			ADD	HL,BC		;
FCBの拡張ﾚｺｰﾄﾞ数ﾎﾟｲﾝﾀ取得
ED6C 7E			LD	A,(HL)		;
拡張ﾚｺｰﾄﾞ数取得
ED6D 3C			INC	A		;
拡張ﾚｺｰﾄﾞ数進行(+1)
ED6E E61F		AND	00011111B	;
無効ﾋﾞｯﾄ解除
ED70 77			LD	(HL),A		;
拡張ﾚｺｰﾄﾞ数更新保存
ED71 CA83ED		JP	Z,OPNEX1	;
拡張ﾚｺｰﾄﾞ数(EX)溢れで分岐
ED74		;

ED74 47			LD	B,A		;
拡張ﾚｺｰﾄﾞ数保存
ED75 3AC5F1		LD	A,(EXM)		;
拡張ﾚｺｰﾄﾞ数(ｴﾝﾄﾘ内使用ﾋﾞｯﾄに対する)ﾏｽｸ値取得
ED78 A0			AND	B		;
拡張ﾚｺｰﾄﾞ数のｴﾝﾄﾘ内無効ﾋﾞｯﾄ解除
ED79 21D2F1		LD	HL,EXMSK	;
ｴﾝﾄﾘ内分拡張ﾚｺｰﾄﾞ(EX)値参照ﾏｽｸ値ﾎﾟｲﾝﾀ取得
ED7C A6			AND	(HL)		;
ｴﾝﾄﾘ内分拡張ﾚｺｰﾄﾞ(EX)値参照か検査
ED7D CA8EED		JP	Z,OPNEX2	;
非参照(無視または無効)で分岐
ED80		;

ED80 C3ACED		JP	OPNEX3		;
有効(本ｴﾝﾄﾘ継続使用)で分岐
ED83		;

ED83 010200	OPNEX1:	LD	BC,14-12	;
現位置からのS2値位置ｵﾌｾｯﾄ取得
ED86 09			ADD	HL,BC		;
FCBのS2値ﾎﾟｲﾝﾀ取得
ED87 34			INC	(HL)		;
S2値進行(+1)
ED88 7E			LD	A,(HL)		;
S2値取得
ED89 E60F		AND	00001111B	;
無効ﾋﾞｯﾄ解除
ED8B CAB6ED		JP	Z,OPNEX5	;
S2値溢れで異常終了へ
ED8E		;

ED8E 0E0F	OPNEX2:	LD	C,15		;
比較(DR～S2)ﾊﾞｲﾄ数指定
ED90 CD18EB		CALL	FSRCH		;
初回ﾌｧｲﾙ検索
ED93 CDF5E9		CALL	DPTCK		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)走査完了検査
ED96 C2ACED		JP	NZ,OPNEX3	;
ﾃﾞｨﾚｸﾄﾘ走査未完了で分岐
ED99		;

ED99 3AD3F1		LD	A,(RWFLG)	;
ﾌｧｲﾙ読み(-1)/書き(0)操作ﾌﾗｸﾞ取得
ED9C 3C			INC	A		;
読み/書き検査
ED9D CAB6ED		JP	Z,OPNEX5	;
ﾌｧｲﾙ読み込み操作(対象ﾌｧｲﾙ無し)で分岐
EDA0		;

EDA0 CD24ED		CALL	MAKE		;
ﾌｧｲﾙ(空ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ)作成
EDA3 CDF5E9		CALL	DPTCK		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)走査完了検査
EDA6 CAB6ED		JP	Z,OPNEX5	;
ﾃﾞｨﾚｸﾄﾘ空き無し(走査完了)で分岐
EDA9		;

EDA9 C3AFED		JP	OPNEX4		;
正常終了処理へ
EDAC		;

EDAC CD5AEC	OPNEX3:	CALL	OPEN1		;
ﾌｧｲﾙ次ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ取得
EDAF		;

EDAF CDBBE8	OPNEX4:	CALL	GFRCDC		;
FCBのEX,CRとRC値取得保存
EDB2 AF			XOR	A		;
正常復帰ｺｰﾄﾞ値取得
EDB3 C301E7		JP	BDRETB		;
復帰ｺｰﾄﾞ(ﾊﾞｲﾄ)保存後呼び出し元へ復帰へ
EDB6		;

EDB6 CD05E7	OPNEX5:	CALL	BDRET1		;
異常復帰ｺｰﾄﾞ(1)設定
EDB9 C378E9		JP	SUCHGF		;
FCB(S2)無変化ﾌﾗｸﾞ設定後呼び出し元へ復帰へ
EDBC

EDBC		;	( 順次ﾌｧｲﾙ読み込み )
EDBC

EDBC 3E01	SRDF:	LD	A,1		;
順次操作ﾌﾗｸﾞ値取得
EDBE 32D5F1		LD	(SRMODE),A	;
ﾌｧｲﾙ読み書き種別を順次設定
EDC1 3EFF	SRDF1:	LD	A,-1		;
ﾌｧｲﾙ読み込み操作ﾌﾗｸﾞ値取得
EDC3 32D3F1		LD	(RWFLG),A	;
ﾌｧｲﾙ読み込み操作ﾌﾗｸﾞ設定
EDC6 CDBBE8		CALL	GFRCDC		;
FCBのEX,CRとRC値取得保存
EDC9 3AE3F1		LD	A,(FCBCR)	;
FCBの現ﾚｺｰﾄﾞ番号(CR)取得
EDCC 21E1F1		LD	HL,FCBRC	;
FCBのﾚｺｰﾄﾞ ｶｳﾝﾀ(RC)値ﾎﾟｲﾝﾀ取得
EDCF BE			CP	(HL)		;
対象ﾚｺｰﾄﾞが本ｴﾝﾄﾘ内か検査
EDD0 DAE6ED		JP	C,SRDF2		;
本ｴﾝﾄﾘ内で分岐
EDD3		;

EDD3 FE80		CP	128		;
次ｴﾝﾄﾘ先頭ﾚｺｰﾄﾞか検査
EDD5 C2FBED		JP	NZ,SRDF3	;
次ｴﾝﾄﾘ先頭ﾚｺｰﾄﾞ以外で分岐
EDD8		;

EDD8 CD5AED		CALL	OPNEX		;
次ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ取得
EDDB AF			XOR	A		;
0値取得
EDDC 32E3F1		LD	(FCBCR),A	;
FCBの現ﾚｺｰﾄﾞ番号(CR)初期化
EDDF 3A45E7		LD	A,(RETPR)	;
復帰ｺｰﾄﾞ取得
EDE2 B7			OR	A		;
内部検索/閉鎖処理正常終了検査
EDE3 C2FBED		JP	NZ,SRDF3	;
異常終了で分岐
EDE6		;

EDE6 CD77E8	SRDF2:	CALL	GCRAN		;
現ﾚｺｰﾄﾞの対応配置区画番号取得
EDE9 CD84E8		CALL	AZCHK		;
配置区画番号有効/無効検査
EDEC CAFBED		JP	Z,SRDF3		;
無効で分岐
EDEF		;

EDEF CD8AE8		CALL	CVSEC		;
現配置区画番号から一連ﾚｺｰﾄﾞ番号取得
EDF2 CDD1E7		CALL	S2TS		;
対応ﾚｺｰﾄﾞ用ﾄﾗｯｸ/ｾｸﾀ設定
EDF5 CDB2E7		CALL	RSRD		;
ﾚｺｰﾄﾞ(ｾｸﾀ)読み出し(BIOS)
EDF8 C3D2E8		JP	UFBRC		;
FCBの現ﾚｺｰﾄﾞ位置(CR)進行後呼び出し元へ復帰
EDFB		;

EDFB C305E7	SRDF3:	JP	BDRET1		;
復帰ｺｰﾄﾞ(1)設定後呼び出し元へ復帰へ
EDFE

EDFE		;	( 順次ﾌｧｲﾙ書き込み )
EDFE

EDFE 3E01	SWRF:	LD	A,1		;
順次操作ﾌﾗｸﾞ値取得
EE00 32D5F1		LD	(SRMODE),A	;
ﾌｧｲﾙ読み書き種別を順次設定
EE03 3E00	SWRF1:	LD	A,0		;
ﾌｧｲﾙ書き込み操作ﾌﾗｸﾞ値取得
EE05 32D3F1		LD	(RWFLG),A	;
ﾌｧｲﾙ書き込み操作ﾌﾗｸﾞ設定
EE08 CD54E9		CALL	WPTCHK		;
書き込み禁止ﾃﾞｨｽｸ検査(禁止で禁止表示後ﾘﾌﾞｰﾄ)
EE0B 2A43E7		LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
EE0E CD47E9		CALL	FROCHK		;
FCBでの書き込み禁止ﾌｧｲﾙ検査(禁止で禁止表示後ﾘﾌﾞｰﾄ)
EE11 CDBBE8		CALL	GFRCDC		;
FCBのEX,CRとRC値取得保存
EE14 3AE3F1		LD	A,(FCBCR)	;
FCBの現ﾚｺｰﾄﾞ番号(CR)取得
EE17 FE80		CP	127+1		;
現ﾚｺｰﾄﾞ番号有効/無効検査
EE19 D205E7		JP	NC,BDRET1	;
無効で復帰ｺｰﾄﾞ(1)設定後呼び出し元へ復帰へ
EE1C		;

EE1C CD77E8		CALL	GCRAN		;
現ﾚｺｰﾄﾞの対応配置区画番号取得
EE1F CD84E8		CALL	AZCHK		;
配置区画番号既登録/未登録検査
EE22 0E00		LD	C,0		;
既存配置区画ｺｰﾄﾞ設定
EE24 C26EEE		JP	NZ,SWRF6	;
既登録で分岐
EE27		;

EE27 CD3EE8		CALL	GAPT		;
現ﾚｺｰﾄﾞの配置区画列内位置(ｵﾌｾｯﾄ)取得
EE2A 32D7F1		LD	(APTSV),A	;
現ﾚｺｰﾄﾞの配置区画列内位置(ｵﾌｾｯﾄ)保存
EE2D 010000		LD	BC,0		;
検索開始配置区画番号(仮)初期化
EE30 B7			OR	A		;
現ﾚｺｰﾄﾞ配置区画列先頭位置か検査
EE31 CA3BEE		JP	Z,SWRF2		;
先頭位置で分岐(配置区画ﾃｰﾌﾞﾙ先頭から検索)
EE34		;

EE34 4F			LD	C,A		;
現ﾚｺｰﾄﾞの配置区画列内位置(ｵﾌｾｯﾄ)設定
EE35 0B			DEC	BC		;
直前ﾚｺｰﾄﾞの配置区画列内位置(ｵﾌｾｯﾄ)取得
EE36 CD5EE8		CALL	GANO		;
直前ﾚｺｰﾄﾞの配置区画番号取得
EE39 44			LD	B,H		;
直前ﾚｺｰﾄﾞの配置区画番号上位指定
EE3A 4D			LD	C,L		;
直前ﾚｺｰﾄﾞの配置区画番号下位指定
EE3B CDBEEB	SWRF2:	CALL	NSALV		;
新規配置区画(ALV)登録
EE3E 7D			LD	A,L		;
新規配置区画番号下位取得
EE3F B4			OR	H		;
登録成否検査
EE40 C248EE		JP	NZ,SWRF3	;
新規登録成功で分岐
EE43		;

EE43 3E02		LD	A,2		;
失敗(空き無し)ｺｰﾄﾞ取得
EE45 C301E7		JP	BDRETB		;
復帰ｺｰﾄﾞ(ﾊﾞｲﾄ)保存後呼び出し元へ復帰へ
EE48		;

EE48 22E5F1	SWRF3:	LD	(SECPNT),HL	;
現ﾚｺｰﾄﾞ配置区画番号保存
EE4B EB			EX	DE,HL		;
現ﾚｺｰﾄﾞ配置区画番号保存
EE4C 2A43E7		LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
EE4F 011000		LD	BC,16		;
配置区画番号列先頭ｵﾌｾｯﾄ値取得
EE52 09			ADD	HL,BC		;
FCBの配置区画番号列基準ﾎﾟｲﾝﾀ取得
EE53 3ADDF1		LD	A,(BBWFLG)	;
BLS管理単位(ﾊﾞｲﾄ/ﾜｰﾄﾞ)ﾌﾗｸﾞ取得
EE56 B7			OR	A		;
ﾊﾞｲﾄ/ﾜｰﾄﾞ単位検査
EE57 3AD7F1		LD	A,(APTSV)	;
現ﾚｺｰﾄﾞの配置区画列内位置(ｵﾌｾｯﾄ)取得
EE5A CA64EE		JP	Z,SWRF4		;
ﾜｰﾄﾞ単位で分岐
EE5D		;

EE5D CD64E9		CALL	ADDHLA		;
ﾊﾞｲﾄ単位対応配置区画番号列ﾎﾟｲﾝﾀ取得
EE60 73			LD	(HL),E		;
対応配置区画番号設定
EE61 C36CEE		JP	SWRF5		;
次へ
EE64		;

EE64 4F		SWRF4:	LD	C,A		;
現ﾚｺｰﾄﾞの配置区画列内位置(ｵﾌｾｯﾄ)取得
EE65 0600		LD	B,0		;
上位0設定
EE67 09			ADD	HL,BC		;
ﾊﾞｲﾄ単位対応配置区画番号列ﾎﾟｲﾝﾀ取得
EE68 09			ADD	HL,BC		;
ﾜｰﾄﾞ単位対応配置区画番号列ﾎﾟｲﾝﾀ取得
EE69 73			LD	(HL),E		;
対応配置区画番号下位設定
EE6A 23			INC	HL		;
対応配置区画番号列ﾎﾟｲﾝﾀ進行(+1)
EE6B 72			LD	(HL),D		;
対応配置区画番号上位設定
EE6C		;

EE6C 0E02	SWRF5:	LD	C,2		;
新規登録配置区画ｺｰﾄﾞ設定
EE6E		;

EE6E 3A45E7	SWRF6:	LD	A,(RETPR)	;
復帰ｺｰﾄﾞ取得
EE71 B7			OR	A		;
内部検索/閉鎖処理正常終了検査
EE72 C0			RET	NZ		;
異常終了で呼び出し元へ復帰
EE73		;

EE73 C5			PUSH	BC		;
新規/既存配置区画ｺｰﾄﾞ一時保存
EE74 CD8AE8		CALL	CVSEC		;
現配置区画番号から一連ﾚｺｰﾄﾞ番号取得
EE77 3AD5F1		LD	A,(SRMODE)	;
ﾌｧｲﾙ読み書き種別取得
EE7A 3D			DEC	A		;
不順0書き込みか検査
EE7B 3D			DEC	A		;
(不順0書き込み=2)
EE7C C2BBEE		JP	NZ,SWRF9	;
不順0書き込み以外で分岐
EE7F

EE7F		;	(( 不順0書き込み(既存配置区画0書き) ))
EE7F

EE7F C1			POP	BC		;
新規/既存配置区画ｺｰﾄﾞ復帰
EE80 C5			PUSH	BC		;
新規/既存配置区画ｺｰﾄﾞ一時保存
EE81 79			LD	A,C		;
新規/既存配置区画ｺｰﾄﾞ取得
EE82 3D			DEC	A		;
新規/既存配置区画検査
EE83 3D			DEC	A		;
(既存配置区画=2)
EE84 C2BBEE		JP	NZ,SWRF9	;
新規登録配置区画で分岐
EE87		;

EE87 E5			PUSH	HL		;
ﾚｺｰﾄﾞ単位ｾｸﾀ番号一時保存
EE88 2AB9F1		LD	HL,(DIRBFP)	;
ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
EE8B 57			LD	D,A		;
ﾊﾞｲﾄ数ｶｳﾝﾀ初期化(=0:+ｶｳﾝﾀ)
EE8C 77		SWRF7:	LD	(HL),A		;
対応ﾊﾞｲﾄ初期化(=0)
EE8D 23			INC	HL		;
ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ進行(+1)
EE8E 14			INC	D		;
ﾊﾞｲﾄ数ｶｳﾝﾀ進行(+1)
EE8F F28CEE		JP	P,SWRF7		;
128ﾊﾞｲﾄ(MSB=1)まで継続へ
EE92		;

EE92 CDE0E9		CALL	SDDMA		;
DMAｱﾄﾞﾚｽとしてﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧを設定
EE95 2AE7F1		LD	HL,(ATPRCD)	;
対応配置区画先頭ﾚｺｰﾄﾞ番号取得
EE98 0E02		LD	C,2		;
ﾚｺｰﾄﾞ種別(ﾌｧｲﾙ配置区画先頭)値取得
EE9A 22E5F1	SWRF8:	LD	(SECPNT),HL	;
対応ﾚｺｰﾄﾞ番号(論理ｾｸﾀ)保存
EE9D C5			PUSH	BC		;
ﾚｺｰﾄﾞ種別値一時保存
EE9E CDD1E7		CALL	S2TS		;
対応ﾚｺｰﾄﾞ用ﾄﾗｯｸ/ｾｸﾀ設定
EEA1 C1			POP	BC		;
ﾚｺｰﾄﾞ種別値復帰
EEA2 CDB8E7		CALL	RSWR		;
ﾚｺｰﾄﾞ(ｾｸﾀ)書き込み(BIOS)
EEA5 2AE5F1		LD	HL,(SECPNT)	;
対応ﾚｺｰﾄﾞ番号(論理ｾｸﾀ)取得
EEA8 0E00		LD	C,0		;
ﾚｺｰﾄﾞ種別(ﾌｧｲﾙ配置区画非先頭)値取得
EEAA 3AC4F1		LD	A,(BLM)		;
配置区画ﾏｽｸ(BLM)値取得
EEAD 47			LD	B,A		;
配置区画ﾏｽｸ値保存
EEAE A5			AND	L		;
配置区画内書き込みﾚｺｰﾄﾞ数取得
EEAF B8			CP	B		;
配置区画内最終ﾚｺｰﾄﾞ書き込みか検査
EEB0 23			INC	HL		;
対応ﾚｺｰﾄﾞ番号(論理ｾｸﾀ)進行(+1)
EEB1 C29AEE		JP	NZ,SWRF8	;
配置区画内最終ﾚｺｰﾄﾞまで継続へ
EEB4		;

EEB4 E1			POP	HL		;
ﾚｺｰﾄﾞ単位ｾｸﾀ番号復帰
EEB5 22E5F1		LD	(SECPNT),HL	;
ﾚｺｰﾄﾞ単位ｾｸﾀ番号再設定(復帰)
EEB8 CDDAE9		CALL	SFDMA		;
DMAｱﾄﾞﾚｽとして一般転送ﾊﾞｯﾌｧを設定
EEBB

EEBB		;	(( 対象ﾚｺｰﾄﾞ書き込み ))
EEBB

EEBB CDD1E7	SWRF9:	CALL	S2TS		;
対象ﾚｺｰﾄﾞ用ﾄﾗｯｸ/ｾｸﾀ設定
EEBE C1			POP	BC		;
新規/既存配置区画ｺｰﾄﾞ復帰
EEBF C5			PUSH	BC		;
新規/既存配置区画ｺｰﾄﾞ一時保存
EEC0 CDB8E7		CALL	RSWR		;
ﾚｺｰﾄﾞ(ｾｸﾀ)書き込み(BIOS)
EEC3 C1			POP	BC		;
新規/既存配置区画ｺｰﾄﾞ復帰
EEC4 3AE3F1		LD	A,(FCBCR)	;
FCBの現ﾚｺｰﾄﾞ番号(CR)取得
EEC7 21E1F1		LD	HL,FCBRC	;
FCBのﾚｺｰﾄﾞ数(RC)値ﾎﾟｲﾝﾀ取得
EECA BE			CP	(HL)		;
既存/新規ﾚｺｰﾄﾞ検査
EECB DAD2EE		JP	C,SWRF10	;
既存ﾚｺｰﾄﾞで分岐
EECE		;

EECE 77			LD	(HL),A		;
現ﾚｺｰﾄﾞ番号をﾚｺｰﾄﾞ数として仮設定
EECF 34			INC	(HL)		;
ﾚｺｰﾄﾞ数(RC)更新(+1)
EED0 0E02		LD	C,2		;
ﾚｺｰﾄﾞ種別(新規ﾚｺｰﾄﾞ)値取得
EED2 00		SWRF10:	NOP			;
[無意味な命令:ﾊﾟｯﾁ後遺症]
EED3 00			NOP			;
[無意味な命令:ﾊﾟｯﾁ後遺症]
EED4 210000		LD	HL,0		;
0値取得 [無意味な命令]
EED7 F5			PUSH	AF		;
現ﾚｺｰﾄﾞ番号一時保存
EED8 CD69E9		CALL	GUFBS2		;
FCBのS2値取得
EEDB E67F		AND	01111111B	;
FCB内容無変化ﾌﾗｸﾞ解除
EEDD 77			LD	(HL),A		;
FCB内容変更ﾌﾗｸﾞ設定(ﾋﾞｯﾄ7=0)
EEDE F1			POP	AF		;
現ﾚｺｰﾄﾞ番号復帰
EEDF FE7F		CP	127		;
FCB内最終ﾚｺｰﾄﾞか検査
EEE1 C200EF		JP	NZ,SWRF12	;
FCB内最終ﾚｺｰﾄﾞ以外で分岐
EEE4		;

EEE4 3AD5F1		LD	A,(SRMODE)	;
ﾌｧｲﾙ読み書き種別取得
EEE7 FE01		CP	1		;
順次か検査
EEE9 C200EF		JP	NZ,SWRF12	;
不順で分岐
EEEC		;

EEEC CDD2E8		CALL	UFBRC		;
FCBの現ﾚｺｰﾄﾞ位置(CR)進行
EEEF CD5AED		CALL	OPNEX		;
現ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ保存と次ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ取得
EEF2 2145E7		LD	HL,RETPR	;
復帰ｺｰﾄﾞ値ﾎﾟｲﾝﾀ取得
EEF5 7E			LD	A,(HL)		;
復帰ｺｰﾄﾞ取得
EEF6 B7			OR	A		;
内部検索/閉鎖処理正常終了検査
EEF7 C2FEEE		JP	NZ,SWRF11	;
異常終了で分岐
EEFA		;

EEFA 3D			DEC	A		;
-1値取得
EEFB 32E3F1		LD	(FCBCR),A	;
FCBの現ﾚｺｰﾄﾞ番号(CR)初期化(次のUFBRCで=0)
EEFE 3600	SWRF11:	LD	(HL),0		;
復帰ｺｰﾄﾞ初期化
EF00 C3D2E8	SWRF12:	JP	UFBRC		;
FCBの現ﾚｺｰﾄﾞ位置(CR)進行後呼び出し元へ復帰へ
EF03

EF03		;	( 不順ｱｸｾｽ準備 )
EF03		;	入: C:読み(-1)/書き(0)ﾌﾗｸﾞ  出: ZF:成功(1)/失敗(0)
EF03

EF03 AF		PRACS:	XOR	A		;
不順操作ﾌﾗｸﾞ値取得
EF04 32D5F1		LD	(SRMODE),A	;
ﾌｧｲﾙ読み書き種別を不順設定
EF07		;

EF07 C5		PRACS1:	PUSH	BC		;
読み(-1)/書き(0)ﾌﾗｸﾞ一時保存
EF08 2A43E7		LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
EF0B EB			EX	DE,HL		;
FCB基準ﾎﾟｲﾝﾀをDEへ移動
EF0C 212100		LD	HL,33		;
不順ｱｸｾｽ用一連ﾚｺｰﾄﾞ番号(R0)値先頭ｵﾌｾｯﾄ取得
EF0F 19			ADD	HL,DE		;
一連ﾚｺｰﾄﾞ番号値基準ﾎﾟｲﾝﾀ取得
EF10 7E			LD	A,(HL)		;
一連ﾚｺｰﾄﾞ番号最下位ﾊﾞｲﾄ取得
EF11 E67F		AND	01111111B	;
無効ﾋﾞｯﾄ解除
EF13 F5			PUSH	AF		;
ﾚｺｰﾄﾞ位置(CR)値一時保存
EF14 7E			LD	A,(HL)		;
一連ﾚｺｰﾄﾞ番号最下位ﾊﾞｲﾄ取得
EF15 17			RLA			;
ﾋﾞｯﾄ7をｷｬﾘｰ ﾌﾗｸﾞへ移動
EF16 23			INC	HL		;
一連ﾚｺｰﾄﾞ番号値ﾎﾟｲﾝﾀ進行(+1)
EF17 7E			LD	A,(HL)		;
一連ﾚｺｰﾄﾞ番号第2ﾊﾞｲﾄ取得
EF18 17			RLA			;
最下位ﾊﾞｲﾄのﾋﾞｯﾄ7をﾋﾞｯﾄ0位置に取得
EF19 E61F		AND	00011111B	;
無効ﾋﾞｯﾄ解除
EF1B 4F			LD	C,A		;
拡張ﾚｺｰﾄﾞ数(EX)値保存
EF1C 7E			LD	A,(HL)		;
一連ﾚｺｰﾄﾞ番号第2ﾊﾞｲﾄ取得
EF1D 1F			RRA			;
(÷2)ﾋﾞｯﾄ7～4をﾋﾞｯﾄ3～0位置へ移動(÷16)
EF1E 1F			RRA			;
(÷4)
EF1F 1F			RRA			;
(÷8)
EF20 1F			RRA			;
(÷16)
EF21 E60F		AND	00001111B	;
無効ﾋﾞｯﾄ解除
EF23 47			LD	B,A		;
S2値保存
EF24 F1			POP	AF		;
ﾚｺｰﾄﾞ位置(CR)値復帰
EF25 23			INC	HL		;
一連ﾚｺｰﾄﾞ番号値ﾎﾟｲﾝﾀ進行(+1)
EF26 6E			LD	L,(HL)		;
一連ﾚｺｰﾄﾞ番号最上位ﾊﾞｲﾄ取得
EF27 2C			INC	L		;
範囲(0～65535ﾚｺｰﾄﾞ)検査
EF28 2D			DEC	L		;
(最上位=1か検査)
EF29 2E06		LD	L,6		;
範囲(65535ﾚｺｰﾄﾞ)外ｱｸｾｽ異常ｺｰﾄﾞ取得
EF2B C28BEF		JP	NZ,PRACS5	;
範囲外で分岐
EF2E		;

EF2E 212000		LD	HL,32		;
現ﾚｺｰﾄﾞ位置(CR)値ｵﾌｾｯﾄ取得
EF31 19			ADD	HL,DE		;
現ﾚｺｰﾄﾞ位置(CR)値ﾎﾟｲﾝﾀ取得
EF32 77			LD	(HL),A		;
FCBの現ﾚｺｰﾄﾞ位置(CR)値更新
EF33 210C00		LD	HL,12		;
拡張ﾚｺｰﾄﾞ数(EX)位置ｵﾌｾｯﾄ取得
EF36 19			ADD	HL,DE		;
拡張ﾚｺｰﾄﾞ数(EX)値ﾎﾟｲﾝﾀ取得
EF37 79			LD	A,C		;
一連ﾚｺｰﾄﾞ番号からの拡張ﾚｺｰﾄﾞ数(EX)値取得
EF38 96			SUB	(HL)		;
一致検査
EF39 C247EF		JP	NZ,PRACS2	;
不一致で分岐
EF3C		;

EF3C 210E00		LD	HL,14		;
S2値位置ｵﾌｾｯﾄ取得
EF3F 19			ADD	HL,DE		;
S2値ﾎﾟｲﾝﾀ取得
EF40 78			LD	A,B		;
一連ﾚｺｰﾄﾞ番号からのS2値取得
EF41 96			SUB	(HL)		;
一致か比較
EF42 E67F		AND	01111111B	;
無効ﾋﾞｯﾄ解除
EF44 CA7FEF		JP	Z,PRACS3	;
一致で分岐
EF47

EF47		;	(( 対応ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘへ変更処理 ))
EF47

EF47 C5		PRACS2:	PUSH	BC		;
一連ﾚｺｰﾄﾞ番号からのS2,EX値一時保存
EF48 D5			PUSH	DE		;
FCB基準ﾎﾟｲﾝﾀ一時保存
EF49 CDA2EC		CALL	CLOSE		;
ﾌｧｲﾙ閉鎖(ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ登録/書き込み)
EF4C D1			POP	DE		;
FCB基準ﾎﾟｲﾝﾀ復帰
EF4D C1			POP	BC		;
一連ﾚｺｰﾄﾞ番号からのS2,EX値復帰
EF4E 2E03		LD	L,3		;
現拡張閉鎖不能
EF50 3A45E7		LD	A,(RETPR)	;
復帰ｺｰﾄﾞ取得
EF53 3C			INC	A		;
内部検索/閉鎖処理正常終了検査
EF54 CA84EF		JP	Z,PRACS4	;
異常終了で分岐
EF57		;

EF57 210C00		LD	HL,12		;
拡張ﾚｺｰﾄﾞ数(EX)位置ｵﾌｾｯﾄ取得
EF5A 19			ADD	HL,DE		;
拡張ﾚｺｰﾄﾞ数(EX)値ﾎﾟｲﾝﾀ取得
EF5B 71			LD	(HL),C		;
FCBに一連ﾚｺｰﾄﾞ番号からのEX値設定
EF5C 210E00		LD	HL,14		;
S2値位置ｵﾌｾｯﾄ取得
EF5F 19			ADD	HL,DE		;
S2値ﾎﾟｲﾝﾀ取得
EF60 70			LD	(HL),B		;
FCBに一連ﾚｺｰﾄﾞ番号からのS2値設定
EF61 CD51EC		CALL	OPEN		;
ﾌｧｲﾙ開始(ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ取得,FCB初期化)
EF64 3A45E7		LD	A,(RETPR)	;
復帰ｺｰﾄﾞ取得
EF67 3C			INC	A		;
内部検索/閉鎖処理正常終了検査
EF68 C27FEF		JP	NZ,PRACS3	;
正常終了で分岐
EF6B		;

EF6B C1			POP	BC		;
読み(-1)/書き(0)ﾌﾗｸﾞ復帰
EF6C C5			PUSH	BC		;
読み(-1)/書き(0)ﾌﾗｸﾞ一時保存
EF6D 2E04		LD	L,4		;
未作成ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ指定異常ｺｰﾄﾞ(読み専用)取得
EF6F 0C			INC	C		;
読み(-1)/書き(0)操作検査
EF70 CA84EF		JP	Z,PRACS4	;
読み操作で分岐
EF73		;

EF73 CD24ED		CALL	MAKE		;
ﾌｧｲﾙ(空ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ)作成
EF76 2E05		LD	L,5		;
ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ作成異常ｺｰﾄﾞ(書き専用)取得
EF78 3A45E7		LD	A,(RETPR)	;
復帰ｺｰﾄﾞ取得
EF7B 3C			INC	A		;
内部検索/閉鎖処理正常終了検査
EF7C CA84EF		JP	Z,PRACS4	;
異常終了で分岐
EF7F

EF7F		;	(( 終了処理 ))
EF7F

EF7F C1		PRACS3:	POP	BC		;
読み(-1)/書き(0)ﾌﾗｸﾞ復帰
EF80 AF			XOR	A		;
正常終了復帰ｺｰﾄﾞ(0)取得
EF81 C301E7		JP	BDRETB		;
復帰ｺｰﾄﾞ(ﾊﾞｲﾄ)保存後呼び出し元へ復帰へ
EF84		;

EF84 E5		PRACS4:	PUSH	HL		;
復帰ｺｰﾄﾞ一時保存
EF85 CD69E9		CALL	GUFBS2		;
FCBのS2値取得
EF88 36C0		LD	(HL),0C0H	;
FCB無変化,異常ﾌﾗｸﾞ設定
EF8A E1			POP	HL		;
復帰ｺｰﾄﾞ復帰
EF8B C1		PRACS5:	POP	BC		;
読み(-1)/書き(0)ﾌﾗｸﾞ復帰
EF8C 7D			LD	A,L		;
復帰ｺｰﾄﾞ取得
EF8D 3245E7		LD	(RETPR),A	;
復帰ｺｰﾄﾞ設定
EF90 C378E9		JP	SUCHGF		;
FCB(S2)無変化ﾌﾗｸﾞ設定後呼び出し元へ復帰へ
EF93

EF93		;	( 不順ﾌｧｲﾙ読み込み )
EF93

EF93 0EFF	RREAD:	LD	C,-1		;
読み込み操作ﾌﾗｸﾞ取得
EF95 CD03EF		CALL	PRACS		;
不順ｱｸｾｽ準備(順次ｱｸｾｽ用FCB設定)
EF98 CCC1ED		CALL	Z,SRDF1		;
準備成功で順次ｱｸｾｽとして読み込み処理
EF9B C9			RET			;
呼び出し元へ復帰
EF9C

EF9C		;	( 不順ﾌｧｲﾙ書き込み )
EF9C

EF9C 0E00	RWRITE:	LD	C,0		;
書き込み操作ﾌﾗｸﾞ取得
EF9E CD03EF		CALL	PRACS		;
不順ｱｸｾｽ準備(順次ｱｸｾｽ用FCB設定)
EFA1 CC03EE		CALL	Z,SWRF1		;
準備成功で順次ｱｸｾｽとして書き込み処理
EFA4 C9			RET			;
呼び出し元へ復帰
EFA5

EFA5		;	( 指定ﾚｺｰﾄﾞの一連ﾚｺｰﾄﾞ位置取得 )
EFA5		;	入: DE:対象(RCorCR)値ｵﾌｾｯﾄ HL:ﾃﾞｨﾚｸﾄﾘ/FCB基準ﾎﾟｲﾝﾀ
EFA5		;	出: A:対象ﾚｺｰﾄﾞ番号ｵｰﾊﾞｰﾌﾛｰ ﾌﾗｸﾞ B:対象ﾚｺｰﾄﾞ番号上位 C:対象ﾚｺｰﾄﾞ番号下位
EFA5

EFA5 EB		GTRCDN:	EX	DE,HL		;
DE:ﾃﾞｨﾚｸﾄﾘ/FCB基準ﾎﾟｲﾝﾀ,HL:対象(RCorCR)値ｵﾌｾｯﾄ
EFA6 19			ADD	HL,DE		;
対象(RCorCR)値ﾎﾟｲﾝﾀ取得
EFA7 4E			LD	C,(HL)		;
対象(RCorCR)値取得
EFA8 0600		LD	B,0		;
上位ﾊﾞｲﾄ0設定
EFAA 210C00		LD	HL,12		;
拡張ﾚｺｰﾄﾞ数(EX)値ｵﾌｾｯﾄ取得
EFAD 19			ADD	HL,DE		;
拡張ﾚｺｰﾄﾞ数(EX)値ﾎﾟｲﾝﾀ取得
EFAE 7E			LD	A,(HL)		;
拡張ﾚｺｰﾄﾞ数(EX)値取得
EFAF 0F			RRCA			;
最下位ﾋﾞｯﾄをﾋﾞｯﾄ7位置へ移動
EFB0 E680		AND	10000000B	;
無効ﾋﾞｯﾄ解除
EFB2 81			ADD	A,C		;
対象位置下位ﾊﾞｲﾄ作成(1+7ﾋﾞｯﾄ)
EFB3 4F			LD	C,A		;
対象位置下位ﾊﾞｲﾄ保存
EFB4 3E00		LD	A,0		;
0値取得
EFB6 88			ADC	A,B		;
対象位置上位ﾊﾞｲﾄ作成(最下位からのｷｬﾘｰ分)
EFB7 47			LD	B,A		;
対象位置上位ﾊﾞｲﾄ一時保存
EFB8 7E			LD	A,(HL)		;
拡張ﾚｺｰﾄﾞ数(EX)値取得
EFB9 0F			RRCA			;
ﾋﾞｯﾄ4～1をﾋﾞｯﾄ3～0位置へ移動
EFBA E60F		AND	00001111B	;
無効ﾋﾞｯﾄ解除
EFBC 80			ADD	A,B		;
対象位置上位ﾊﾞｲﾄ作成(EX分)
EFBD 47			LD	B,A		;
対象位置上位ﾊﾞｲﾄ一時保存
EFBE 210E00		LD	HL,14		;
S2値ｵﾌｾｯﾄ取得
EFC1 19			ADD	HL,DE		;
S2値ﾎﾟｲﾝﾀ取得
EFC2 7E			LD	A,(HL)		;
S2値取得
EFC3 87			ADD	A,A		;
(×2)ﾋﾞｯﾄ3～0をﾋﾞｯﾄ7～4位置へ移動(×16)
EFC4 87			ADD	A,A		;
(×4)
EFC5 87			ADD	A,A		;
(×8)
EFC6 87			ADD	A,A		;
(×16)
EFC7 F5			PUSH	AF		;
EX分ｵｰﾊﾞｰﾌﾛｰ(CF)ﾌﾗｸﾞ保存
EFC8 80			ADD	A,B		;
対象位置上位ﾊﾞｲﾄ作成(S2分)
EFC9 47			LD	B,A		;
対象位置上位ﾊﾞｲﾄ保存
EFCA F5			PUSH	AF		;
S2分ｵｰﾊﾞｰﾌﾛｰ(CF)ﾌﾗｸﾞ一時保存
EFCB E1			POP	HL		;
S2分ｵｰﾊﾞｰﾌﾛｰ(CF)ﾌﾗｸﾞ復帰
EFCC 7D			LD	A,L		;
S2分ｵｰﾊﾞｰﾌﾛｰ(CF)ﾌﾗｸﾞ取得
EFCD E1			POP	HL		;
EX分ｵｰﾊﾞｰﾌﾛｰ(CF)ﾌﾗｸﾞ復帰
EFCE B5			OR	L		;
最終ｵｰﾊﾞｰﾌﾛｰ(CF)ﾌﾗｸﾞ取得
EFCF E601		AND	00000001B	;
無効ﾋﾞｯﾄ解除
EFD1 C9			RET			;
呼び出し元へ復帰
EFD2

EFD2		;	( ﾌｧｲﾙ容量値取得 )
EFD2

EFD2 0E0C	RFMAX:	LD	C,12		;
比較ﾊﾞｲﾄ数指定
EFD4 CD18EB		CALL	FSRCH		;
初回ﾌｧｲﾙ検索
EFD7 2A43E7		LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
EFDA 112100		LD	DE,33		;
一連ﾚｺｰﾄﾞ番号(R0)値先頭ｵﾌｾｯﾄ取得
EFDD 19			ADD	HL,DE		;
一連ﾚｺｰﾄﾞ番号値基準ﾎﾟｲﾝﾀ取得
EFDE E5			PUSH	HL		;
一連ﾚｺｰﾄﾞ番号値基準ﾎﾟｲﾝﾀ一時保存
EFDF 72			LD	(HL),D		;
一連ﾚｺｰﾄﾞ番号最下位ﾊﾞｲﾄ初期化(=0)
EFE0 23			INC	HL		;
一連ﾚｺｰﾄﾞ番号値ﾎﾟｲﾝﾀ進行(+1)
EFE1 72			LD	(HL),D		;
一連ﾚｺｰﾄﾞ番号第2ﾊﾞｲﾄ初期化(=0)
EFE2 23			INC	HL		;
一連ﾚｺｰﾄﾞ番号値ﾎﾟｲﾝﾀ進行(+1)
EFE3 72			LD	(HL),D		;
一連ﾚｺｰﾄﾞ番号最上位ﾊﾞｲﾄ初期化(=0)
EFE4 CDF5E9	RFMAX1:	CALL	DPTCK		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)走査完了検査
EFE7 CA0CF0		JP	Z,RFMAX3	;
ﾃﾞｨﾚｸﾄﾘ走査完了で分岐
EFEA		;

EFEA CD5EE9		CALL	GDEPT		;
ﾚｺｰﾄﾞ内対応ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)基準ﾎﾟｲﾝﾀ取得
EFED 110F00		LD	DE,15		;
ﾚｺｰﾄﾞ数(RC)値ｵﾌｾｯﾄ取得
EFF0 CDA5EF		CALL	GTRCDN		;
現ｴﾝﾄﾘ最終ﾚｺｰﾄﾞの一連ﾚｺｰﾄﾞ番号取得
EFF3 E1			POP	HL		;
一連ﾚｺｰﾄﾞ番号値基準ﾎﾟｲﾝﾀ復帰
EFF4 E5			PUSH	HL		;
一連ﾚｺｰﾄﾞ番号値基準ﾎﾟｲﾝﾀ一時保存
EFF5 5F			LD	E,A		;
対象ﾚｺｰﾄﾞ番号ｵｰﾊﾞｰﾌﾛｰ ﾌﾗｸﾞ保存
EFF6 79			LD	A,C		;
対象ﾚｺｰﾄﾞ番号下位取得
EFF7 96			SUB	(HL)		;
最大値検出(下位ﾊﾞｲﾄ)
EFF8 23			INC	HL		;
一連ﾚｺｰﾄﾞ番号値ﾎﾟｲﾝﾀ進行(+1)
EFF9 78			LD	A,B		;
対象ﾚｺｰﾄﾞ番号上位取得
EFFA 9E			SBC	A,(HL)		;
最大値検出(上位ﾊﾞｲﾄ)
EFFB 23			INC	HL		;
一連ﾚｺｰﾄﾞ番号値ﾎﾟｲﾝﾀ進行(+1)
EFFC 7B			LD	A,E		;
対象ﾚｺｰﾄﾞ番号ｵｰﾊﾞｰﾌﾛｰ ﾌﾗｸﾞ取得
EFFD 9E			SBC	A,(HL)		;
最大値検出(ｵｰﾊﾞｰﾌﾛｰ ﾌﾗｸﾞ)
EFFE DA06F0		JP	C,RFMAX2	;
今回最大値以外で分岐
F001		;

F001 73			LD	(HL),E		;
対象ﾚｺｰﾄﾞ番号最上位ﾊﾞｲﾄ(ｵｰﾊﾞｰﾌﾛｰ)更新保存
F002 2B			DEC	HL		;
一連ﾚｺｰﾄﾞ番号値ﾎﾟｲﾝﾀ後退(-1)
F003 70			LD	(HL),B		;
対象ﾚｺｰﾄﾞ番号第2ﾊﾞｲﾄ更新保存
F004 2B			DEC	HL		;
一連ﾚｺｰﾄﾞ番号値ﾎﾟｲﾝﾀ後退(-1)
F005 71			LD	(HL),C		;
対象ﾚｺｰﾄﾞ番号最下位ﾊﾞｲﾄ更新保存
F006 CD2DEB	RFMAX2:	CALL	NSRCH		;
次回ﾌｧｲﾙ検索
F009 C3E4EF		JP	RFMAX1		;
全ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ走査完了まで継続へ
F00C		;

F00C E1		RFMAX3:	POP	HL		;
ｽﾀｯｸ ﾎﾟｲﾝﾀ補正(+2) (一連ﾚｺｰﾄﾞ番号値基準ﾎﾟｲﾝﾀ)
F00D C9			RET			;
呼び出し元へ復帰
F00E

F00E		;	* [BDOS機能:36] 不順時ﾚｺｰﾄﾞ設定 *
F00E

F00E 2A43E7	STRRCD:	LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
F011 112000		LD	DE,32		;
現ﾚｺｰﾄﾞ位置(CR)値ｵﾌｾｯﾄ取得
F014 CDA5EF		CALL	GTRCDN		;
現ﾚｺｰﾄﾞ位置の一連ﾚｺｰﾄﾞ番号取得
F017 212100		LD	HL,33		;
一連ﾚｺｰﾄﾞ番号(R0)値先頭ｵﾌｾｯﾄ取得
F01A 19			ADD	HL,DE		;
一連ﾚｺｰﾄﾞ番号値基準ﾎﾟｲﾝﾀ取得
F01B 71			LD	(HL),C		;
対象ﾚｺｰﾄﾞ番号最下位ﾊﾞｲﾄ保存
F01C 23			INC	HL		;
一連ﾚｺｰﾄﾞ番号値ﾎﾟｲﾝﾀ進行(+1)
F01D 70			LD	(HL),B		;
対象ﾚｺｰﾄﾞ番号第2ﾊﾞｲﾄ保存
F01E 23			INC	HL		;
一連ﾚｺｰﾄﾞ番号値ﾎﾟｲﾝﾀ進行(+1)
F01F 77			LD	(HL),A		;
対象ﾚｺｰﾄﾞ番号最上位ﾊﾞｲﾄ保存
F020 C9			RET			;
呼び出し元へ復帰
F021

F021		;	( 既使用ﾄﾞﾗｲﾌﾞ検査と新規時配置区画(ALC)ﾃｰﾌﾞﾙ作成 )
F021

F021 2AAFF1	DSKSEL:	LD	HL,(LGVCT)	;
登録ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ(ﾋﾞｯﾄ単位ﾌﾗｸﾞ)取得
F024 3A42E7		LD	A,(LOGDSK)	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号取得
F027 4F			LD	C,A		;
右移動ﾋﾞｯﾄ数指定
F028 CDEAE8		CALL	SFTR		;
右ﾋﾞｯﾄ移動
F02B E5			PUSH	HL		;
対応登録ﾄﾞﾗｲﾌﾞ値一時保存
F02C EB			EX	DE,HL		;
[無効な命令]
F02D CD59E7		CALL	MVDPH		;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ取得
F030 E1			POP	HL		;
対応登録ﾄﾞﾗｲﾌﾞ値復帰
F031 CC47E7		CALL	Z,SLEOUT	;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ取得失敗で選択異常警告表示後ﾘﾌﾞｰﾄへ
F034 7D			LD	A,L		;
対応登録ﾄﾞﾗｲﾌﾞ値取得
F035 1F			RRA			;
対応ﾄﾞﾗｲﾌﾞ登録状況をｷｬﾘｰ ﾌﾗｸﾞに反映
F036 D8			RET	C		;
対応ﾄﾞﾗｲﾌﾞ既登録で呼び出し元へ復帰
F037

F037		;	(( 新規ﾄﾞﾗｲﾌﾞ ))
F037

F037 2AAFF1		LD	HL,(LGVCT)	;
登録ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ(ﾋﾞｯﾄ単位ﾌﾗｸﾞ)取得
F03A 4D			LD	C,L		;
設定用元登録ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ下位設定
F03B 44			LD	B,H		;
設定用元登録ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ上位設定
F03C CD0BE9		CALL	SETVCT		;
登録ﾍﾞｸﾀで現ﾃﾞｨｽｸ ﾋﾞｯﾄ設定
F03F 22AFF1		LD	(LGVCT),HL	;
登録ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ更新保存
F042 C3A3EA		JP	DSKI		;
配置区画(ALC)ﾃｰﾌﾞﾙ作成後呼び出し元へ復帰へ
F045

F045		;	* [BDOS機能:14] ﾃﾞｨｽｸ選択 *
F045

F045 3AD6F1	SELDSK:	LD	A,(ESV)		;
BDOS機能移行時Eﾚｼﾞｽﾀ(ﾃﾞｨｽｸ番号)値
F048 2142E7		LD	HL,LOGDSK	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号値ﾎﾟｲﾝﾀ取得
F04B BE			CP	(HL)		;
現ﾃﾞｨｽｸか検査
F04C C8			RET	Z		;
現ﾃﾞｨｽｸで呼び出し元へ復帰
F04D		;

F04D 77			LD	(HL),A		;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号更新保存
F04E C321F0		JP	DSKSEL		;
既使用検査と新規時配置区画ﾃｰﾌﾞﾙ作成後復帰へ
F051

F051		;	( ﾄﾞﾗｲﾌﾞ設定(選択) )
F051

F051 3EFF	STDSK:	LD	A,-1		;
ﾄﾞﾗｲﾌﾞ変更有りﾌﾗｸﾞ値取得
F053 32DEF1		LD	(CHGFLG),A	;
ﾄﾞﾗｲﾌﾞ変更ﾌﾗｸﾞ設定
F056 2A43E7		LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
F059 7E			LD	A,(HL)		;
1基準ﾄﾞﾗｲﾌﾞ指定値取得
F05A E61F		AND	00011111B	;
無効ﾋﾞｯﾄ解除
F05C 3D			DEC	A		;
0基準ﾄﾞﾗｲﾌﾞ番号取得
F05D 32D6F1		LD	(ESV),A		;
0基準ﾄﾞﾗｲﾌﾞ番号保存
F060 FE1E		CP	1EH		;
現ﾄﾞﾗｲﾌﾞ指定か検査
F062 D275F0		JP	NC,STDSK1	;
現ﾄﾞﾗｲﾌﾞ指定で分岐
F065		;

F065 3A42E7		LD	A,(LOGDSK)	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号取得
F068 32DFF1		LD	(DSKNSV),A	;
現ﾄﾞﾗｲﾌﾞ番号保存
F06B 7E			LD	A,(HL)		;
1基準ﾄﾞﾗｲﾌﾞ指定値取得
F06C 32E0F1		LD	(FDRNSV),A	;
1基準ﾄﾞﾗｲﾌﾞ指定値保存
F06F E6E0		AND	11100000B	;
ﾄﾞﾗｲﾌﾞ指定ﾋﾞｯﾄ解除
F071 77			LD	(HL),A		;
FCB先頭ﾊﾞｲﾄのﾄﾞﾗｲﾌﾞ指定ﾋﾞｯﾄ解除
F072 CD45F0		CALL	SELDSK		;
指定ﾄﾞﾗｲﾌﾞ選択
F075 3A41E7	STDSK1:	LD	A,(USERNO)	;
使用者番号取得
F078 2A43E7		LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
F07B B6			OR	(HL)		;
使用者番号合成
F07C 77			LD	(HL),A		;
FCB先頭ﾊﾞｲﾄに使用者番号合成設定
F07D C9			RET			;
呼び出し元へ復帰
F07E

F07E		;	* [BDOS機能:12] ﾊﾞｰｼﾞｮﾝ番号取得 *
F07E

F07E 3E22	RDVER:	LD	A,22H		;
ﾊﾞｰｼﾞｮﾝ番号(2.2)取得
F080 C301E7		JP	BDRETB		;
復帰ｺｰﾄﾞ(ﾊﾞｲﾄ)保存後呼び出し元へ復帰へ
F083

F083		;	* [BDOS機能:13] 全ﾃﾞｨｽｸ ﾘｾｯﾄ *
F083

F083 210000	RESDSK:	LD	HL,0		;
0値取得
F086 22ADF1		LD	(ROVCT),HL	;
ﾃﾞｨｽｸ単位読み出し専用ﾍﾞｸﾀ初期化
F089 22AFF1		LD	(LGVCT),HL	;
登録ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ初期化
F08C AF			XOR	A		;
0値取得
F08D 3242E7		LD	(LOGDSK),A	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号初期化
F090 218000		LD	HL,TBF		;
標準転送ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ値取得
F093 22B1F1		LD	(DMAADR),HL	;
転送ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ初期化
F096 CDDAE9		CALL	SFDMA		;
DMAｱﾄﾞﾚｽとして一般転送ﾊﾞｯﾌｧを設定
F099 C321F0		JP	DSKSEL		;
既使用検査と新規時配置区画ﾃｰﾌﾞﾙ作成後復帰へ
F09C

F09C		;	* [BDOS機能:15] ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ) *
F09C

F09C CD72E9	OPNF:	CALL	IUFBS2		;
FCBのS2値初期化
F09F CD51F0		CALL	STDSK		;
ﾄﾞﾗｲﾌﾞ設定(選択)
F0A2 C351EC		JP	OPEN		;
ﾌｧｲﾙ開始処理へ
F0A5

F0A5		;	* [BDOS機能:16] ﾌｧｲﾙ閉鎖(ｸﾛｰｽﾞ) *
F0A5

F0A5 CD51F0	CLSF:	CALL	STDSK		;
ﾄﾞﾗｲﾌﾞ設定(選択)
F0A8 C3A2EC		JP	CLOSE		;
ﾌｧｲﾙ閉鎖(ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ登録/書き込み)処理へ
F0AB

F0AB		;	* [BDOS機能:17] 初回ﾌｧｲﾙ検索 *
F0AB

F0AB 0E00	FSRCF:	LD	C,0		;
比較ﾊﾞｲﾄ数(仮)指定(0:全ｴﾝﾄﾘ)
F0AD EB			EX	DE,HL		;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)をHLへ移動
F0AE 7E			LD	A,(HL)		;
1基準ﾄﾞﾗｲﾌﾞ指定値取得
F0AF FE3F		CP	'?'		;
既定(現ﾄﾞﾗｲﾌﾞ, )か検査
F0B1 CAC2F0		JP	Z,FSRCF1	;
既定指定で分岐
F0B4		;

F0B4 CDA6E8		CALL	GEXP		;
FCBの拡張番号(EX)値ﾎﾟｲﾝﾀ取得
F0B7 7E			LD	A,(HL)		;
拡張番号指定値取得
F0B8 FE3F		CP	'?'		;
拡張番号無視か検査
F0BA C472E9		CALL	NZ,IUFBS2	;
拡張番号有効でFCBのS2値初期化
F0BD CD51F0		CALL	STDSK		;
ﾄﾞﾗｲﾌﾞ設定(選択)
F0C0 0E0F		LD	C,15		;
比較(DR～S2)ﾊﾞｲﾄ数指定(=15)
F0C2		;

F0C2 CD18EB	FSRCF1:	CALL	FSRCH		;
初回ﾌｧｲﾙ検索
F0C5 C3E9E9		JP	MVDIR		;
ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ内容を一般転送ﾊﾞｯﾌｧへｺﾋﾟｰ
F0C8

F0C8		;	* [BDOS機能:18] 次回ﾌｧｲﾙ検索 *
F0C8

F0C8 2AD9F1	NSRCF:	LD	HL,(SRFBSV)	;
検索用のFCB基準ﾎﾟｲﾝﾀ取得
F0CB 2243E7		LD	(DESV),HL	;
初回検索時FCB基準ﾎﾟｲﾝﾀ再設定
F0CE CD51F0		CALL	STDSK		;
ﾄﾞﾗｲﾌﾞ設定(選択)
F0D1 CD2DEB		CALL	NSRCH		;
次回ﾌｧｲﾙ検索
F0D4 C3E9E9		JP	MVDIR		;
ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ内容を一般転送ﾊﾞｯﾌｧへｺﾋﾟｰ
F0D7

F0D7		;	* [BDOS機能:19] ﾌｧｲﾙ削除 *<
F0D7

F0D7 CD51F0	DELF:	CALL	STDSK		;
ﾄﾞﾗｲﾌﾞ設定(選択)
F0DA CD9CEB		CALL	DELT		;
ﾌｧｲﾙ削除
F0DD C301EB		JP	BDRETX		;
対象ﾌｧｲﾙ有無復帰ｺｰﾄﾞで呼び出し元へ復帰へ
F0E0

F0E0		;	* [BDOS機能:20] 順次ﾌｧｲﾙ読み込み *
F0E0

F0E0 CD51F0	SFRD:	CALL	STDSK		;
ﾄﾞﾗｲﾌﾞ設定(選択)
F0E3 C3BCED		JP	SRDF		;
順次ﾌｧｲﾙ読み込み後呼び出し元へ復帰へ
F0E6

F0E6		;	* [BDOS機能:21] 順次ﾌｧｲﾙ書き込み *
F0E6

F0E6 CD51F0	SFWR:	CALL	STDSK		;
ﾄﾞﾗｲﾌﾞ設定(選択)
F0E9 C3FEED		JP	SWRF		;
順次ﾌｧｲﾙ書き込み後呼び出し元へ復帰へ
F0EC

F0EC		;	* [BDOS機能:22] ﾌｧｲﾙ作成 *
F0EC

F0EC CD72E9	MAKEF:	CALL	IUFBS2		;
FCBのS2値初期化
F0EF CD51F0		CALL	STDSK		;
ﾄﾞﾗｲﾌﾞ設定(選択)
F0F2 C324ED		JP	MAKE		;
ﾌｧｲﾙ(空ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ)作成後呼び出し元へ復帰へ
F0F5

F0F5		;	* [BDOS機能:23] ﾌｧｲﾙ名変更 *
F0F5

F0F5 CD51F0	RENF:	CALL	STDSK		;
ﾄﾞﾗｲﾌﾞ設定(選択)
F0F8 CD16EC		CALL	REN		;
ﾌｧｲﾙ名変更
F0FB C301EB		JP	BDRETX		;
対象ﾌｧｲﾙ有無復帰ｺｰﾄﾞで呼び出し元へ復帰へ
F0FE

F0FE		;	* [BDOS機能:24] 登録ﾃﾞｨｽｸ ﾍﾞｸﾀ取得 *
F0FE

F0FE 2AAFF1	GLGVCT:	LD	HL,(LGVCT)	;
登録ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ(ﾋﾞｯﾄ単位ﾌﾗｸﾞ)取得
F101 C329F1		JP	BDRETW		;
復帰ｺｰﾄﾞ(ﾜｰﾄﾞ)保存後呼び出し元へ復帰へ
F104

F104		;	* [BDOS機能:25] ﾃﾞｨｽｸ番号取得 *
F104

F104 3A42E7	GDSKNO:	LD	A,(LOGDSK)	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号取得
F107 C301E7		JP	BDRETB		;
復帰ｺｰﾄﾞ(ﾊﾞｲﾄ)保存後呼び出し元へ復帰へ
F10A

F10A		;	* [BDOS機能:26] DMAｱﾄﾞﾚｽ設定 *
F10A

F10A EB		SETDMA:	EX	DE,HL		;
指定DMAｱﾄﾞﾚｽをDEへ移動
F10B 22B1F1		LD	(DMAADR),HL	;
転送ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ値設定(変更)
F10E C3DAE9		JP	SFDMA		;
DMAｱﾄﾞﾚｽとして一般転送ﾊﾞｯﾌｧを設定後復帰へ
F111

F111		;	* [BDOS機能:27] 配置ﾍﾞｸﾀ取得 *
F111

F111 2ABFF1	GALVCT:	LD	HL,(ALVP)	;
配置区画ﾍﾞｸﾀ領域基準ｱﾄﾞﾚｽ(BIOS)取得
F114 C329F1		JP	BDRETW		;
復帰ｺｰﾄﾞ(ﾜｰﾄﾞ)保存後呼び出し元へ復帰へ
F117

F117		;	* [BDOS機能:29] ﾃﾞｨｽｸ単位読み出し専用ﾍﾞｸﾀ取得 *
F117

F117 2AADF1	GROVCT:	LD	HL,(ROVCT)	;
ﾃﾞｨｽｸ単位読み出し専用ﾍﾞｸﾀ値取得
F11A C329F1		JP	BDRETW		;
復帰ｺｰﾄﾞ(ﾜｰﾄﾞ)保存後呼び出し元へ復帰へ
F11D

F11D		;	* [BDOS機能:30] ﾌｧｲﾙ属性設定 *
F11D

F11D CD51F0	STATRB:	CALL	STDSK		;
ﾄﾞﾗｲﾌﾞ設定(選択)
F120 CD3BEC		CALL	SATRB		;
ﾌｧｲﾙ属性変更
F123 C301EB		JP	BDRETX		;
対象ﾌｧｲﾙ有無復帰ｺｰﾄﾞで呼び出し元へ復帰へ
F126

F126		;	* [BDOS機能:31] DPB(ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸ)ｱﾄﾞﾚｽ取得 *
F126

F126 2ABBF1	RDPB:	LD	HL,(DPBP)	;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸ(DPB)基準ﾎﾟｲﾝﾀ取得
F129		;

F129 2245E7	BDRETW:	LD	(RETPR),HL	;
復帰ｺｰﾄﾞ保存
F12C C9			RET			;
呼び出し元へ復帰
F12D

F12D		;	* [BDOS機能:32] 使用者番号取得/設定 *
F12D

F12D 3AD6F1	GSUSR:	LD	A,(ESV)		;
BDOS機能移行時Eﾚｼﾞｽﾀ値
F130 FEFF		CP	-1		;
使用者番号取得指定か検査
F132 C23BF1		JP	NZ,STUSR1	;
使用者番号設定指定で分岐
F135		;

F135 3A41E7		LD	A,(USERNO)	;
使用者番号取得
F138 C301E7		JP	BDRETB		;
復帰ｺｰﾄﾞ(ﾊﾞｲﾄ)保存後呼び出し元へ復帰へ
F13B		;

F13B E61F	STUSR1:	AND	00011111B	;
無効ﾋﾞｯﾄ解除
F13D 3241E7		LD	(USERNO),A	;
使用者番号設定
F140 C9			RET			;
呼び出し元へ復帰
F141

F141		;	* [BDOS機能:33] 不順ﾌｧｲﾙ読み込み *
F141

F141 CD51F0	RFRD:	CALL	STDSK		;
ﾄﾞﾗｲﾌﾞ設定(選択)
F144 C393EF		JP	RREAD		;
不順ﾌｧｲﾙ読み込み後呼び出し元へ復帰へ
F147

F147		;	* [BDOS機能:34] 不順ﾌｧｲﾙ書き込み *
F147

F147 CD51F0	RFWR:	CALL	STDSK		;
ﾄﾞﾗｲﾌﾞ設定(選択)
F14A C39CEF		JP	RWRITE		;
不順ﾌｧｲﾙ書き込み後呼び出し元へ復帰へ
F14D

F14D		;	* [BDOS機能:35] ﾌｧｲﾙ容量値取得 *
F14D

F14D CD51F0	RFMAXF:	CALL	STDSK		;
ﾄﾞﾗｲﾌﾞ設定(選択)
F150 C3D2EF		JP	RFMAX		;
ﾌｧｲﾙ容量値取得後呼び出し元へ復帰へ
F153

F153		;	* [BDOS機能:37] ﾄﾞﾗｲﾌﾞ ﾘｾｯﾄ *
F153

F153 2A43E7	RESDRV:	LD	HL,(DESV)	;
ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
F156 7D			LD	A,L		;
ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ下位取得
F157 2F			CPL			;
ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ下位ﾏｽｸ値取得
F158 5F			LD	E,A		;
ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ下位ﾏｽｸ値保存
F159 7C			LD	A,H		;
ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ上下位取得
F15A 2F			CPL			;
ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ上位ﾏｽｸ値取得
F15B 2AAFF1		LD	HL,(LGVCT)	;
登録ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ(ﾋﾞｯﾄ単位ﾌﾗｸﾞ)取得
F15E A4			AND	H		;
既登録ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ上位の指定ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄのみ解除
F15F 57			LD	D,A		;
解除後既登録ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ上位保存
F160 7D			LD	A,L		;
既登録ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ下位取得
F161 A3			AND	E		;
既登録ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ下位の指定ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄのみ解除
F162 5F			LD	E,A		;
解除後既登録ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ下位保存
F163 2AADF1		LD	HL,(ROVCT)	;
ﾃﾞｨｽｸ単位読み出し専用ﾍﾞｸﾀ値取得
F166 EB			EX	DE,HL		;
DE:ﾃﾞｨｽｸ単位読み出し専用ﾍﾞｸﾀ,HL:解除後登録ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ
F167 22AFF1		LD	(LGVCT),HL	;
登録ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ(ﾋﾞｯﾄ単位ﾌﾗｸﾞ)更新保存
F16A 7D			LD	A,L		;
更新後登録ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ下位取得
F16B A3			AND	E		;
読み出し専用ﾍﾞｸﾀ下位の対応解除ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ解除
F16C 6F			LD	L,A		;
解除後読み出し専用ﾍﾞｸﾀ下位保存
F16D 7C			LD	A,H		;
更新後登録ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ上位取得
F16E A2			AND	D		;
読み出し専用ﾍﾞｸﾀ上位の対応解除ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ解除
F16F 67			LD	H,A		;
解除後読み出し専用ﾍﾞｸﾀ上位保存
F170 22ADF1		LD	(ROVCT),HL	;
ﾃﾞｨｽｸ単位読み出し専用ﾍﾞｸﾀ更新保存
F173 C9			RET			;
呼び出し元へ復帰
F174

F174		;	* BDOS機能終了処理 *
F174

F174 3ADEF1	BDEND:	LD	A,(CHGFLG)	;
ﾄﾞﾗｲﾌﾞ変更ﾌﾗｸﾞ取得
F177 B7			OR	A		;
ﾄﾞﾗｲﾌﾞ変更有無検査
F178 CA91F1		JP	Z,BDEND1	;
変更無しで分岐
F17B		;

F17B 2A43E7		LD	HL,(DESV)	;
FCB基準ﾎﾟｲﾝﾀ(BDOS機能移行時DEﾚｼﾞｽﾀ値)取得
F17E 3600		LD	(HL),0		;
FCBﾄﾞﾗｲﾌﾞ(DR)番号を移行時現値に(仮)設定
F180 3AE0F1		LD	A,(FDRNSV)	;
機能開始時FCBの1基準ﾄﾞﾗｲﾌﾞ指定値取得
F183 B7			OR	A		;
機能開始時FCB現ﾄﾞﾗｲﾌﾞ値指定か検査
F184 CA91F1		JP	Z,BDEND1	;
現ﾄﾞﾗｲﾌﾞ値指定で分岐
F187		;

F187 77			LD	(HL),A		;
FCB指定ﾄﾞﾗｲﾌﾞ番号再設定(復帰)
F188 3ADFF1		LD	A,(DSKNSV)	;
機能開始時ﾄﾞﾗｲﾌﾞ番号取得
F18B 32D6F1		LD	(ESV),A		;
機能開始時ﾄﾞﾗｲﾌﾞ番号指定
F18E CD45F0		CALL	SELDSK		;
指定ﾄﾞﾗｲﾌﾞ選択
F191		;

F191 210FE7	BDEND1:	LD	HL,SPSV		;
BDOS機能開始時ｽﾀｯｸ ﾎﾟｲﾝﾀ値取得
F194 F9			LD	SP,HL		;
BDOS機能開始時ｽﾀｯｸ ﾎﾟｲﾝﾀ値復帰
F195 2A45E7		LD	HL,(RETPR)	;
復帰ｺｰﾄﾞ取得
F198 7D			LD	A,L		;
復帰ｺｰﾄﾞ下位ﾊﾞｲﾄ設定
F199 44			LD	B,H		;
復帰ｺｰﾄﾞ上位ﾊﾞｲﾄ設定
F19A C9			RET			;
呼び出し元へ復帰
F19B

F19B		;	* [BDOS機能:40] 不順ﾌｧｲﾙ00H書き込み *
F19B

F19B CD51F0	RFZWR:	CALL	STDSK		;
ﾄﾞﾗｲﾌﾞ設定(選択)
F19E 3E02		LD	A,2		;
不順0書き込みｺｰﾄﾞ取得
F1A0 32D5F1		LD	(SRMODE),A	;
ﾌｧｲﾙ読み書き種別を不順0書き込み設定
F1A3 0E00		LD	C,0		;
書き込み操作ﾌﾗｸﾞ取得
F1A5 CD07EF		CALL	PRACS1		;
不順ｱｸｾｽ準備(順次ｱｸｾｽ用FCB設定)
F1A8 CC03EE		CALL	Z,SWRF1		;
準備成功で順次ｱｸｾｽとして書き込み処理
F1AB C9			RET			;
呼び出し元へ復帰
F1AC

F1AC		;	[ ﾌｧｲﾙ入出力系 定数/変数定義 ]
F1AC

F1AC E5		FREDM:	DB	0E5H		;
未使用ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ先頭ｺｰﾄﾞ
F1AD 0000	ROVCT:	DW	0		;
ﾃﾞｨｽｸ単位読み出し専用ﾍﾞｸﾀ(ﾋﾞｯﾄ単位ﾌﾗｸﾞ)
F1AF 0000	LGVCT:	DW	0		;
登録ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ(ﾋﾞｯﾄ単位ﾌﾗｸﾞ)
F1B1 8000	DMAADR:	DW	TBF		;
転送ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ
F1B3 0000	DIRMXP:	DW	0		;
操作対象ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)数-1(最終位置)保存位置ﾎﾟｲﾝﾀ
F1B5 0000	TRKNOP:	DW	0		;
論理ﾄﾗｯｸ番号保存位置ﾎﾟｲﾝﾀ
F1B7 0000	SECNOP:	DW	0		;
論理一連ｾｸﾀ番号保存位置ﾎﾟｲﾝﾀ(ｾｸﾀ番号はSPT単位で±)
F1B9 0000	DIRBFP:	DW	0		;
ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ基準ｱﾄﾞﾚｽ(BIOS)
F1BB 0000	DPBP:	DW	0		;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸ(DPB)基準ｱﾄﾞﾚｽ(BIOS)
F1BD 0000	CSVP:	DW	0		;
CSV領域基準ｱﾄﾞﾚｽ(BIOS)
F1BF 0000	ALVP:	DW	0		;
配置区画ﾍﾞｸﾀ領域(ALV)基準ｱﾄﾞﾚｽ(BIOS)
F1C1 0000	SPT:	DW	0		;
ｾｸﾀ数/1ﾄﾗｯｸ(1ｾｸﾀ=128ﾊﾞｲﾄ)
F1C3 00		BSH:	DB	0		;
配置区画(BLS)ｼﾌﾄ係数
F1C4 00		BLM:	DB	0		;
配置区画(BLS)ﾏｽｸ値
F1C5 00		EXM:	DB	0		;
拡張ﾚｺｰﾄﾞ数(ｴﾝﾄﾘ内使用ﾋﾞｯﾄに対する)ﾏｽｸ値
F1C6 0000	DSM:	DW	0		;
BLS単位でのOS予約領域を除くﾃﾞｨｽｸ総容量-1
F1C8 0000	DRM:	DW	0		;
ﾃﾞｨﾚｸﾄﾘ総数-1値
F1CA 00		AL0:	DB	0		;
ﾃﾞｨﾚｸﾄﾘ用ALV予約値下位ﾊﾞｲﾄ
F1CB 00		AL1:	DB	0		;
ﾃﾞｨﾚｸﾄﾘ用ALV予約値上位ﾊﾞｲﾄ
F1CC 0000	CKS:	DW	0		;
ﾃﾞｨﾚｸﾄﾘ用ﾚｺｰﾄﾞ/ﾁｪｯｸｻﾑ ﾍﾞｸﾀ(CSV)数
F1CE 0000	OFF:	DW	0		;
ﾃﾞｨｽｸ予約ﾄﾗｯｸ数
F1D0 0000	XLTAD:	DW	0		;
ｾｸﾀ変換ﾃｰﾌﾞﾙ(XLT)基準ﾎﾟｲﾝﾀ
F1D2 00		EXMSK:	DB	0		;
ｴﾝﾄﾘ内分拡張ﾚｺｰﾄﾞ(EX)値参照ﾏｽｸ(ﾌﾗｸﾞ)
F1D3 00		RWFLG:	DB	0		;
ﾌｧｲﾙ読み(-1)/書き(0)操作ﾌﾗｸﾞ
F1D4 00		SRCHPR:	DB	0		;
検索結果ｺｰﾄﾞ(0=有り,-1=無し)
F1D5 00		SRMODE:	DB	0		;
ﾌｧｲﾙ読み書き種別(0=不順,1=順次,2=不順0書き込み)
F1D6 00		ESV:	DB	0		;
BDOS機能移行時Eﾚｼﾞｽﾀ値
F1D7 00		APTSV:	DB	0		;
現ﾚｺｰﾄﾞの配置区画列内位置(ｵﾌｾｯﾄ)
F1D8 00		SRCCSV:	DB	0		;
検索ﾊﾞｲﾄ数
F1D9 0000	SRFBSV:	DW	0		;
検索用FCB基準ﾎﾟｲﾝﾀ保存域
F1DB 0000		DW	0

F1DD 00		BBWFLG:	DB	0		;
BLS管理単位ﾌﾗｸﾞ(0=ﾜｰﾄﾞ,-1=ﾊﾞｲﾄ)
F1DE 00		CHGFLG:	DB	0		;
ﾄﾞﾗｲﾌﾞ変更ﾌﾗｸﾞ(0=変更無し,-1=変更有り)
F1DF 00		DSKNSV:	DB	0		;
機能開始時ﾄﾞﾗｲﾌﾞ番号
F1E0 00		FDRNSV:	DB	0		;
機能開始時FCBの1基準ﾄﾞﾗｲﾌﾞ指定値
F1E1 00		FCBRC:	DB	0		;
FCBのﾚｺｰﾄﾞ ｶｳﾝﾀ(RC)値
F1E2 00		FCBEX:	DB	0		;
FCBの現拡張番号(EX)値
F1E3 00		FCBCR:	DB	0		;
FCBの現ﾚｺｰﾄﾞ番号(CR)
F1E4 00			DB	0

F1E5 0000	SECPNT:	DW	0		;
現ﾚｺｰﾄﾞ配置区画番号 : (論理)ｾｸﾀ ﾎﾟｲﾝﾀ
F1E7 0000	ATPRCD:	DW	0		;
対応配置区画先頭ﾚｺｰﾄﾞ番号
F1E9 00		DIROFS:	DB	0		;
ﾚｺｰﾄﾞ内ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)先頭ｵﾌｾｯﾄ値
F1EA 0000	DIRPNT:	DW	0		;
ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)位置ﾎﾟｲﾝﾀ兼ｶｳﾝﾀ
F1EC 0000	DRCPNT:	DW	0		;
ﾚｺｰﾄﾞ単位ﾃﾞｨﾚｸﾄﾘ位置ﾎﾟｲﾝﾀ
F1EE

F1EE			END


1.2 BIOS ｿｰｽ

0000		;***************************

0000		;*			   *

0000		;*  CP/M-80 Ver 2.2  BIOS  *

0000		;*			   *

0000		;***************************

0000

0000			TITLE	BIOS

0000

0000			INCLUDE	64180.LIB

0000

0000

0000		;	* CP/M関係定義 *
0000

003E		MSIZ	EQU	62		;
CP/Mﾒﾓﾘ容量
0000

DC00		CCP	EQU	(MSIZ-7)*1024	;
CCP(Console Command Processor)先頭ｱﾄﾞﾚｽ
E406		BDOS	EQU	CCP+0806H	;
BDOS(Basic Disk Operating System)先頭ｱﾄﾞﾚｽ
F200		BIOS	EQU	CCP+1600H	;
BIOS(Basic Input/Output System)先頭ｱﾄﾞﾚｽ
0000

0000		;	( ｼｽﾃﾑ ﾊﾟﾗﾒｰﾀ領域定義 )
0000

0000		WBENT	EQU	0000H		;
ｳｫｰﾑ ﾌﾞｰﾄ移行命令先頭ｱﾄﾞﾚｽ
0003		IOBYTE	EQU	0003H		;
I/Oﾊﾞｲﾄ値ｱﾄﾞﾚｽ
0004		CDISK	EQU	0004H		;
現使用者番号:現選択ﾄﾞﾗｲﾌﾞ番号値ｱﾄﾞﾚｽ
0005		BDENT	EQU	0005H		;
BODS移行命令先頭ｱﾄﾞﾚｽ
0080		TBF	EQU	0080H		;
標準転送ﾊﾞｯﾌｧ先頭ｱﾄﾞﾚｽ
0000

0000		;	( BDOSからのｾｸﾀ書き込み時の種別ｺｰﾄﾞ )
0000

0000		WRALL	EQU	0		;
既配置区画書き込み
0001		WRDIR	EQU	1		;
ﾃﾞｨﾚｸﾄﾘ書き込み
0002		WRUAL	EQU	2		;
未配置区画書き込み
0000

0000		;	* 制御ｺｰﾄﾞ定義 *
0000

0003		ETX	EQU	03H		;
End of TeXt	打ち切り
0008		BS	EQU	08H		;
Back Skip	ｶｰｿﾙ1文字後退
000A		LF	EQU	0AH		;
Line Feed	ｶｰｿﾙ改行
000C		FF	EQU	0CH		;
Form Feed
000D		CR	EQU	0DH		;
Carrige Return	ｶｰｿﾙ復帰
001A		SUB	EQU	1AH		;
Sub
001B		ESC	EQU	1BH		;
ESCape
007F		DEL	EQU	7FH		;
DELete
0000

0000		;	* I/O定義 *
0000

0000		;	( CPU: HD64180 )
0000

0000		A0A	EQU	00H		;
非同期ｼﾘｱﾙ0 制御ﾚｼﾞｽﾀA
0001		A1A	EQU	01H		;
非同期ｼﾘｱﾙ1 制御ﾚｼﾞｽﾀA
0002		A0B	EQU	02H		;
非同期ｼﾘｱﾙ0 制御ﾚｼﾞｽﾀB
0003		A1B	EQU	03H		;
非同期ｼﾘｱﾙ1 制御ﾚｼﾞｽﾀB
0004		A0S	EQU	04H		;
非同期ｼﾘｱﾙ0 ｽﾃｰﾀｽ ﾚｼﾞｽﾀ
0005		A1S	EQU	05H		;
非同期ｼﾘｱﾙ1 ｽﾃｰﾀｽ ﾚｼﾞｽﾀ
0006		A0T	EQU	06H		;
非同期ｼﾘｱﾙ0 送信ﾃﾞｰﾀ ﾚｼﾞｽﾀ
0007		A1T	EQU	07H		;
非同期ｼﾘｱﾙ1 送信ﾃﾞｰﾀ ﾚｼﾞｽﾀ
0008		A0R	EQU	08H		;
非同期ｼﾘｱﾙ0 受信ﾃﾞｰﾀ ﾚｼﾞｽﾀ
0009		A1R	EQU	09H		;
非同期ｼﾘｱﾙ1 受信ﾃﾞｰﾀ ﾚｼﾞｽﾀ
000A		S0C	EQU	0AH		;
同期ｼﾘｱﾙ 制御ﾚｼﾞｽﾀ
000B		S0D	EQU	0BH		;
同期ｼﾘｱﾙ ｽﾃｰﾀｽ ﾚｼﾞｽﾀ
000C		T0DL	EQU	0CH		;
ﾀｲﾏ0 ﾃﾞｰﾀ下位ﾚｼﾞｽﾀ
000D		T0DH	EQU	0DH		;
ﾀｲﾏ0 ﾃﾞｰﾀ上位ﾚｼﾞｽﾀ
000E		T0RL	EQU	0EH		;
ﾀｲﾏ0 再設定値下位ﾚｼﾞｽﾀ
000F		T0RH	EQU	0FH		;
ﾀｲﾏ0 再設定値上位ﾚｼﾞｽﾀ
0010		TXC	EQU	10H		;
ﾀｲﾏ制御ﾚｼﾞｽﾀ
0014		T1DL	EQU	14H		;
ﾀｲﾏ1 ﾃﾞｰﾀ下位ﾚｼﾞｽﾀ
0015		T1DH	EQU	15H		;
ﾀｲﾏ1 ﾃﾞｰﾀ上位ﾚｼﾞｽﾀ
0016		T1RL	EQU	16H		;
ﾀｲﾏ1 再設定値下位ﾚｼﾞｽﾀ
0017		T1RH	EQU	17H		;
ﾀｲﾏ1 再設定値上位ﾚｼﾞｽﾀ
0020		D0SL	EQU	20H		;
DMA0 転送元ｱﾄﾞﾚｽ下位ﾚｼﾞｽﾀ
0021		D0SH	EQU	21H		;
DMA0 転送元ｱﾄﾞﾚｽ上位ﾚｼﾞｽﾀ
0022		D0SB	EQU	22H		;
DMA0 転送元ﾊﾞﾝｸ ﾚｼﾞｽﾀ
0023		D0DL	EQU	23H		;
DMA0 転送先ｱﾄﾞﾚｽ下位ﾚｼﾞｽﾀ
0024		D0DH	EQU	24H		;
DMA0 転送先ｱﾄﾞﾚｽ上位ﾚｼﾞｽﾀ
0025		D0DB	EQU	25H		;
DMA0 転送先ﾊﾞﾝｸ ﾚｼﾞｽﾀ
0026		D0CL	EQU	26H		;
DMA0 転送ﾊﾞｲﾄ数下位ﾚｼﾞｽﾀ
0027		D0CH	EQU	27H		;
DMA0 転送ﾊﾞｲﾄ数上位ﾚｼﾞｽﾀ
0028		D1ML	EQU	28H		;
DMA1 転送ﾒﾓﾘ ｱﾄﾞﾚｽ下位ﾚｼﾞｽﾀ
0029		D1MH	EQU	29H		;
DMA1 転送ﾒﾓﾘ ｱﾄﾞﾚｽ上位ﾚｼﾞｽﾀ
002A		D1MB	EQU	2AH		;
DMA1 転送ﾒﾓﾘ ﾊﾞﾝｸ ﾚｼﾞｽﾀ
002B		D1IL	EQU	2BH		;
DMA1 転送I/Oｱﾄﾞﾚｽ下位ﾚｼﾞｽﾀ
002C		D1IH	EQU	2CH		;
DMA1 転送I/Oｱﾄﾞﾚｽ上位ﾚｼﾞｽﾀ
002E		D1CL	EQU	2EH		;
DMA1 転送ﾊﾞｲﾄ数下位ﾚｼﾞｽﾀ
002F		D1CH	EQU	2FH		;
DMA1 転送ﾊﾞｲﾄ数上位ﾚｼﾞｽﾀ
0030		DXS	EQU	30H		;
DMAｽﾃｰﾀｽ ﾚｼﾞｽﾀ
0031		DXM	EQU	31H		;
DMA種別ﾚｼﾞｽﾀ
0032		DWR	EQU	32H		;
DMA/ｳｪｲﾄ制御ﾚｼﾞｽﾀ
0000		;

0033		ILR	EQU	33H		;
割り込みﾍﾞｸﾀ下位ﾚｼﾞｽﾀ
0034		ITR	EQU	34H		;
INT/TRAP制御ﾚｼﾞｽﾀ
0036		RFR	EQU	36H		;
ﾘﾌﾚｯｼｭ制御ﾚｼﾞｽﾀ
0038		CBR	EQU	38H		;
MMU 共通領域基準ﾚｼﾞｽﾀ
0039		BBR	EQU	39H		;
MMU ﾊﾞﾝｸ基準ﾚｼﾞｽﾀ
003A		BAR	EQU	3AH		;
MMU 共通/ﾊﾞﾝｸ領域ﾚｼﾞｽﾀ
003F		ICR	EQU	3FH		;
I/O制御ﾚｼﾞｽﾀ
0000

0000		;	( FDC: MB89311(MB8877A強化版) )
0000

0040		F1C	EQU	40H		;
制御ﾚｼﾞｽﾀ
0041		F1T	EQU	41H		;
ﾄﾗｯｸ ﾚｼﾞｽﾀ
0042		F1S	EQU	42H		;
ｾｸﾀ ﾚｼﾞｽﾀ
0043		F1D	EQU	43H		;
ﾃﾞｰﾀ ﾚｼﾞｽﾀ
0000

0000		;	( PPI: 8255 )
0000

0050		P1A	EQU	50H		;
ﾎﾟｰﾄAﾃﾞｰﾀ ﾚｼﾞｽﾀ
0051		P1B	EQU	51H		;
ﾎﾟｰﾄBﾃﾞｰﾀ ﾚｼﾞｽﾀ
0052		P1C	EQU	52H		;
ﾎﾟｰﾄCﾃﾞｰﾀ ﾚｼﾞｽﾀ
0053		P1X	EQU	53H		;
ﾎﾟｰﾄ制御ﾚｼﾞｽﾀ
0000

0000		;	( 拡張出力ﾎﾟｰﾄ )
0000

0060		PPT	EQU	60H		;
出力ﾎﾟｰﾄ
0000

0000		;	(( PPIﾎﾟｰﾄ信号配置 ))
0000

0000		; A7	O	M-ON		;
FDD ﾓｰﾀON
0000		; A6	O	HLD		;
FDD ﾍｯﾄﾞ ﾛｰﾄﾞ
0000		; A5	O	MFM		;
FDD MFM/FM
0000		; A4	O	SIDE		;
FDD 面1/0
0000		; A3	O	DS3		;
FDD ﾄﾞﾗｲﾌﾞ3選択
0000		; A2	O	DS2		;
FDD ﾄﾞﾗｲﾌﾞ2選択
0000		; A1	O	DS1		;
FDD ﾄﾞﾗｲﾌﾞ1選択
0000		; A0	O	DS0		;
FDD ﾄﾞﾗｲﾌﾞ0選択
0000		;

0000		; B7	O	DB7		;
ﾌﾟﾘﾝﾀ ﾃﾞｰﾀ7
0000		; B6	O	DB6		;
ﾌﾟﾘﾝﾀ ﾃﾞｰﾀ6
0000		; B5	O	DB5		;
ﾌﾟﾘﾝﾀ ﾃﾞｰﾀ5
0000		; B4	O	DB4		;
ﾌﾟﾘﾝﾀ ﾃﾞｰﾀ4
0000		; B3	O	DB3		;
ﾌﾟﾘﾝﾀ ﾃﾞｰﾀ3
0000		; B2	O	DB2		;
ﾌﾟﾘﾝﾀ ﾃﾞｰﾀ2
0000		; B1	O	DB1		;
ﾌﾟﾘﾝﾀ ﾃﾞｰﾀ1
0000		; B0	O	DB0		;
ﾌﾟﾘﾝﾀ ﾃﾞｰﾀ0
0000		;

0000		; C7	I	CLKS		;
CPUｸﾛｯｸ選択
0000		; C6	I			;
(未定義)
0000		; C5	I	2SIDE		;
FDD 両面(倍密度)
0000		; C4	I	BUSY		;
ﾌﾞﾘﾝﾀ ﾋﾞｼﾞｰ
0000		; C3	O	/STB		;
ﾌﾟﾘﾝﾀ ｽﾄﾛｰﾌﾞ
0000		; C2	I	/ACK		;
ﾌﾟﾘﾝﾀ ｱｸﾉｰﾚｯｼﾞ
0000		; C1	O			;
(未定義)
0000		; C0	O	P-INT		;
ﾌﾟﾘﾝﾀ/ACK割り込み要求
0000

0000		;	(( 拡張出力ﾎﾟｰﾄ信号配置 ))
0000

0000		; 5	O	/MR		;
FDC ﾏｽﾀ ﾘｾｯﾄ
0000		; 4	O	LOW-C		;
FDD 低電流(low current)
0000		; 3	O	BA19		;
拡張ﾊﾞﾝｸ ｱﾄﾞﾚｽ19
0000		; 2	O	BA18		;
拡張ﾊﾞﾝｸ ｱﾄﾞﾚｽ18
0000		; 1	O	BA17		;
拡張ﾊﾞﾝｸ ｱﾄﾞﾚｽ17
0000		; 0	O	BA16		;
拡張ﾊﾞﾝｸ ｱﾄﾞﾚｽ16
0000

0000		;	( FDC命令ｺｰﾄﾞ )
0000

0000		FHME	EQU	 00H		;
ﾍｯﾄﾞ原点位置移動(Home)
0010		FSEK	EQU	 10H		;
ﾍｯﾄﾞ目的ﾄﾗｯｸ位置移動(Seek)
0031		FSTP	EQU	 31H		;
ﾍｯﾄﾞ 1ﾄﾗｯｸ分移動(Step)
0084		FSRD	EQU	 84H		;
単一ｾｸﾀ読み込み(Single sector read)
0094		FMRD	EQU	 94H		;
複数ｾｸﾀ読み込み(Multiple sector read)
00A4		FSWR	EQU	0A4H		;
単一ｾｸﾀ書き込み(Single sector write)
00B4		FMWR	EQU	0B4H		;
複数ｾｸﾀ書き込み(Multiple sector write)
00D0		FINT	EQU	0D0H		;
強制割り込み(Force interrupt)
00F4		FTWR	EQU	0F4H		;
ﾄﾗｯｸ書き込み(Track write)
00F5		FFMT	EQU	0F5H		;
ﾌｫｰﾏｯﾄ(Format)
00FC		FDLY	EQU	0FCH		;
遅延(Delay)
00FD		FASP	EQU	0FDH		;
ﾊﾟﾗﾒｰﾀ指定(Asign parameter)
00FE		FASM	EQU	0FEH		;
種別指定(Asign mode)
00FF		FRES	EQU	0FFH		;
ﾘｾｯﾄ(Reset)
0000		;

00C0		FCMSK	EQU	0C0H		;
拡張動作,書き込み補償
0000

0000		;	* 最大ﾄﾞﾗｲﾌﾞ数定義 *
0000

0005		DRVMAX	EQU	4+1		;
最大ﾄﾞﾗｲﾌﾞ数(FD×4,RAMﾃﾞｨｽｸ×1)
0000

0000

0000		;	[ BIOS ]
0000

0000			ORG	BIOS		;
BIOS開始ｱﾄﾞﾚｽ
F200

F200		;	* BIOS機能分岐ﾃｰﾌﾞﾙ *
F200

F200 C395F3	JPTBL:	JP	BOOT		;
ｺｰﾙﾄﾞ ﾌﾞｰﾄ
F203 C3D0F3		JP	WBOOT		;
ｳｫｰﾑﾌﾞｰﾄ
F206 C32EF4		JP	CONST		;
ｺﾝｿｰﾙ入力状態取得
F209 C337F4		JP	CONIN		;
ｺﾝｿｰﾙ入力
F20C C340F4		JP	CONOUT		;
ｺﾝｿｰﾙ出力
F20F C34BF4		JP	LIST		;
ﾌﾟﾘﾝﾀ出力
F212 C361F4		JP	PUNCH		;
紙ﾃｰﾌﾟ ﾊﾟﾝﾁｬ出力
F215 C36CF4		JP	READER		;
紙ﾃｰﾌﾟ ﾘｰﾀﾞ入力
F218 C3A8F4		JP	HOME		;
ﾃﾞｨｽｸ原点位置移動
F21B C38FF4		JP	SELDSK		;
ﾃﾞｨｽｸ選択
F21E C3AAF4		JP	SETTRK		;
ﾄﾗｯｸ設定
F221 C3BFF4		JP	SETSEC		;
ｾｸﾀ設定
F224 C3D4F4		JP	SETDMA		;
DMA(転送)基準ｱﾄﾞﾚｽ設定
F227 C30BF5		JP	READ		;
ｾｸﾀ読み出し
F22A C327F5		JP	WRITE		;
ｾｸﾀ書き込み
F22D C307F5		JP	LISTST		;
ﾌﾟﾘﾝﾀ出力状態取得
F230 C3D9F4		JP	SECTRN		;
ﾄﾗｯｸ内ｾｸﾀ番号変換
F233

F233		;	* ﾄﾞﾗｲﾌﾞ配置定義 *
F233

F233 0004	FDUSEC:	DW	1024		;
ﾄﾞﾗｲﾌﾞ0: FD(2D)
F235 0004		DW	1024		;
ﾄﾞﾗｲﾌﾞ1: FD(2D)
F237 0004		DW	1024		;
ﾄﾞﾗｲﾌﾞ2: FD(2D)
F239 0004		DW	1024		;
ﾄﾞﾗｲﾌﾞ3: FD(2D)
F23B 8000		DW	128		;
ﾄﾞﾗｲﾌﾞ4: RAMﾃﾞｨｽｸ
F23D

F23D			ORG	BIOS+64		;
割り込みﾍﾞｸﾀ用境界補正
F240

F240		;	* 割り込みﾍﾞｸﾀ ﾃｰﾌﾞﾙ *
F240

F240 45F8	INTTBL:	DW	IRET		;
/INT1 (未使用)
F242 20F8		DW	I2NT		;
/INT2
F244 45F8		DW	IRET		;
ﾀｲﾏ0 (未使用)
F246 04F8		DW	T1INT		;
ﾀｲﾏ1(100ms)
F248 45F8		DW	IRET		;
DMA0 (未使用)
F24A 45F8		DW	IRET		;
DMA1 (未使用)
F24C 45F8		DW	IRET		;
同期ｼﾘｱﾙ (未使用)
F24E 45F8		DW	IRET		;
非同期ｼﾘｱﾙ0 (未使用)
F250 45F8		DW	IRET		;
非同期ｼﾘｱﾙ1 (未使用)
F252

F252		;	* ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ *
F252

F252 CFF2	DPH0:	DW	XLT0		;
ﾄﾞﾗｲﾌﾞ0: ｾｸﾀ番号変換ﾃｰﾌﾞﾙ先頭ｱﾄﾞﾚｽ
F254 0000		DW	0		;
ﾄﾞﾗｲﾌﾞ0: 操作対象ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)数-1(最終位置)
F256 0000		DW	0		;
ﾄﾞﾗｲﾌﾞ0: 論理ﾄﾗｯｸ番号
F258 0000		DW	0		;
ﾄﾞﾗｲﾌﾞ0: ﾄﾗｯｸ先頭論理一連ｾｸﾀ番号
F25A FEFA		DW	DIRBF		;
ﾄﾞﾗｲﾌﾞ0: ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ先頭ｱﾄﾞﾚｽ
F25C A2F2		DW	DPB0		;
ﾄﾞﾗｲﾌﾞ0: ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸ(DPB)先頭ｱﾄﾞﾚｽ
F25E 82F8		DW	CSV0		;
ﾄﾞﾗｲﾌﾞ0: ﾃﾞｨﾚｸﾄﾘ用ﾚｺｰﾄﾞ/ﾁｪｯｸｻﾑ ﾍﾞｸﾀ ﾃｰﾌﾞﾙ先頭ｱﾄﾞﾚｽ
F260 C2F8		DW	ALV0		;
ﾄﾞﾗｲﾌﾞ0: 配置区画ﾍﾞｸﾀ ﾃｰﾌﾞﾙ先頭ｱﾄﾞﾚｽ
F262

F262 CFF2	DPH1:	DW	XLT0		;
ﾄﾞﾗｲﾌﾞ1: ｾｸﾀ番号変換ﾃｰﾌﾞﾙ先頭ｱﾄﾞﾚｽ
F264 0000		DW	0		;
ﾄﾞﾗｲﾌﾞ1: 操作対象ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)数-1(最終位置)
F266 0000		DW	0		;
ﾄﾞﾗｲﾌﾞ1: 論理ﾄﾗｯｸ番号
F268 0000		DW	0		;
ﾄﾞﾗｲﾌﾞ1: ﾄﾗｯｸ先頭論理一連ｾｸﾀ番号
F26A FEFA		DW	DIRBF		;
ﾄﾞﾗｲﾌﾞ1: ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ先頭ｱﾄﾞﾚｽ
F26C A2F2		DW	DPB0		;
ﾄﾞﾗｲﾌﾞ1: ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸ(DPB)先頭ｱﾄﾞﾚｽ
F26E 0EF9		DW	CSV1		;
ﾄﾞﾗｲﾌﾞ1: ﾃﾞｨﾚｸﾄﾘ用ﾚｺｰﾄﾞ/ﾁｪｯｸｻﾑ ﾍﾞｸﾀ ﾃｰﾌﾞﾙ先頭ｱﾄﾞﾚｽ
F270 4EF9		DW	ALV1		;
ﾄﾞﾗｲﾌﾞ1: 配置区画ﾍﾞｸﾀ ﾃｰﾌﾞﾙ先頭ｱﾄﾞﾚｽ
F272

F272 CFF2	DPH2:	DW	XLT0		;
ﾄﾞﾗｲﾌﾞ2: ｾｸﾀ番号変換ﾃｰﾌﾞﾙ先頭ｱﾄﾞﾚｽ
F274 0000		DW	0		;
ﾄﾞﾗｲﾌﾞ2: 操作対象ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)数-1(最終位置)
F276 0000		DW	0		;
ﾄﾞﾗｲﾌﾞ2: 論理ﾄﾗｯｸ番号
F278 0000		DW	0		;
ﾄﾞﾗｲﾌﾞ2: ﾄﾗｯｸ先頭論理一連ｾｸﾀ番号
F27A FEFA		DW	DIRBF		;
ﾄﾞﾗｲﾌﾞ2: ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ先頭ｱﾄﾞﾚｽ
F27C A2F2		DW	DPB0		;
ﾄﾞﾗｲﾌﾞ2: ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸ(DPB)先頭ｱﾄﾞﾚｽ
F27E 9AF9		DW	CSV2		;
ﾄﾞﾗｲﾌﾞ2: ﾃﾞｨﾚｸﾄﾘ用ﾚｺｰﾄﾞ/ﾁｪｯｸｻﾑ ﾍﾞｸﾀ ﾃｰﾌﾞﾙ先頭ｱﾄﾞﾚｽ
F280 DAF9		DW	ALV2		;
ﾄﾞﾗｲﾌﾞ2: 配置区画ﾍﾞｸﾀ ﾃｰﾌﾞﾙ先頭ｱﾄﾞﾚｽ
F282

F282 CFF2	DPH3:	DW	XLT0		;
ﾄﾞﾗｲﾌﾞ3: ｾｸﾀ番号変換ﾃｰﾌﾞﾙ先頭ｱﾄﾞﾚｽ
F284 0000		DW	0		;
ﾄﾞﾗｲﾌﾞ3: 操作対象ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)数-1(最終位置)
F286 0000		DW	0		;
ﾄﾞﾗｲﾌﾞ3: 論理ﾄﾗｯｸ番号
F288 0000		DW	0		;
ﾄﾞﾗｲﾌﾞ3: ﾄﾗｯｸ先頭論理一連ｾｸﾀ番号
F28A FEFA		DW	DIRBF		;
ﾄﾞﾗｲﾌﾞ3: ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ先頭ｱﾄﾞﾚｽ
F28C A2F2		DW	DPB0		;
ﾄﾞﾗｲﾌﾞ3: ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸ(DPB)先頭ｱﾄﾞﾚｽ
F28E 26FA		DW	CSV3		;
ﾄﾞﾗｲﾌﾞ3: ﾃﾞｨﾚｸﾄﾘ用ﾚｺｰﾄﾞ/ﾁｪｯｸｻﾑ ﾍﾞｸﾀ ﾃｰﾌﾞﾙ先頭ｱﾄﾞﾚｽ
F290 66FA		DW	ALV3		;
ﾄﾞﾗｲﾌﾞ3: 配置区画ﾍﾞｸﾀ ﾃｰﾌﾞﾙ先頭ｱﾄﾞﾚｽ
F292

F292 CFF2	DPH4:	DW	XLT0		;
ﾄﾞﾗｲﾌﾞ4: ｾｸﾀ番号変換ﾃｰﾌﾞﾙ先頭ｱﾄﾞﾚｽ
F294 0000		DW	0		;
ﾄﾞﾗｲﾌﾞ4: 操作対象ﾃﾞｨﾚｸﾄﾘ(ｴﾝﾄﾘ)数-1(最終位置)
F296 0000		DW	0		;
ﾄﾞﾗｲﾌﾞ4: 論理ﾄﾗｯｸ番号
F298 0000		DW	0		;
ﾄﾞﾗｲﾌﾞ4: ﾄﾗｯｸ先頭論理一連ｾｸﾀ番号
F29A FEFA		DW	DIRBF		;
ﾄﾞﾗｲﾌﾞ4: ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ先頭ｱﾄﾞﾚｽ
F29C C0F2		DW	DPB2		;
ﾄﾞﾗｲﾌﾞ4: ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸ(DPB)先頭ｱﾄﾞﾚｽ
F29E B2FA		DW	CSV4		;
ﾄﾞﾗｲﾌﾞ4: ﾃﾞｨﾚｸﾄﾘ用ﾚｺｰﾄﾞ/ﾁｪｯｸｻﾑ ﾍﾞｸﾀ ﾃｰﾌﾞﾙ先頭ｱﾄﾞﾚｽ
F2A0 B2FA		DW	ALV4		;
ﾄﾞﾗｲﾌﾞ4: 配置区画ﾍﾞｸﾀ ﾃｰﾌﾞﾙ先頭ｱﾄﾞﾚｽ
F2A2

F2A2		;	* ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸ *
F2A2

F2A2		;	( 両面倍密度(2D)1024ﾊﾞｲﾄ/ｾｸﾀ,8ｾｸﾀ/ﾄﾗｯｸ )
F2A2

F2A2 8000	DPB0:	DW	128		;
SPT: ｾｸﾀ(CP/Mﾚｺｰﾄﾞ)数/1ﾄﾗｯｸ
F2A4 04			DB	4		;
BSH: 配置区画ｼﾌﾄ係数
F2A5 0F			DB	00001111B	;
BLM: 配置区画ﾏｽｸ
F2A6 00			DB	00000000B	;
EXM: 拡張ﾏｽｸ
F2A7 5702		DW	600-1		;
DSM: 配置区画単位ﾃﾞｨｽｸ総容量-1(最終配置区画番号)
F2A9 FF00		DW	256-1		;
DRM: ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ総数-1(最終ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ番号)
F2AB F0			DB	11110000B	;
AL0: 配置区画ﾃｰﾌﾞﾙ先頭ﾊﾞｲﾄ(ﾃﾞｨﾚｸﾄﾘ予約設定用)
F2AC 00			DB	00000000B	;
AL1: 配置区画ﾃｰﾌﾞﾙ第2ﾊﾞｲﾄ(ﾃﾞｨﾚｸﾄﾘ予約設定用)
F2AD 4000		DW	64		;
CKS: ﾃﾞｨﾚｸﾄﾘ用ﾚｺｰﾄﾞ/ﾁｪｯｸｻﾑ ﾍﾞｸﾀ(ﾊﾞｲﾄ)数
F2AF 0200		DW	2		;
OFF: ﾄﾗｯｸ0からの予約ﾄﾗｯｸ数
F2B1

F2B1		;	( 片面単密度(1S)128ﾊﾞｲﾄ/ｾｸﾀ,26ｾｸﾀ/ﾄﾗｯｸ )
F2B1

F2B1 1A00	DPB1:	DW	26		;
SPT: ｾｸﾀ(CP/Mﾚｺｰﾄﾞ)数/1ﾄﾗｯｸ
F2B3 03			DB	3		;
BSH: 配置区画ｼﾌﾄ係数
F2B4 07			DB	00000111B	;
BLM: 配置区画ﾏｽｸ
F2B5 00			DB	00000000B	;
EXM: 拡張ﾏｽｸ
F2B6 F200		DW	243-1		;
DSM: 配置区画単位ﾃﾞｨｽｸ総容量-1(最終配置区画番号)
F2B8 3F00		DW	64-1		;
DRM: ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ総数-1(最終ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ番号)
F2BA C0			DB	11000000B	;
AL0: 配置区画ﾃｰﾌﾞﾙ先頭ﾊﾞｲﾄ(ﾃﾞｨﾚｸﾄﾘ予約設定用)
F2BB 00			DB	00000000B	;
AL1: 配置区画ﾃｰﾌﾞﾙ第2ﾊﾞｲﾄ(ﾃﾞｨﾚｸﾄﾘ予約設定用)
F2BC 1000		DW	16		;
CKS: ﾃﾞｨﾚｸﾄﾘ用ﾚｺｰﾄﾞ/ﾁｪｯｸｻﾑ ﾍﾞｸﾀ(ﾊﾞｲﾄ)数
F2BE 0200		DW	2		;
OFF: ﾄﾗｯｸ0からの予約ﾄﾗｯｸ数
F2C0

F2C0		;	( RAMﾃﾞｨｽｸ(1Mﾊﾞｲﾄ,2D準拠) )
F2C0

F2C0 8000	DPB2:	DW	128		;
SPT: ｾｸﾀ(CP/Mﾚｺｰﾄﾞ)数/1ﾄﾗｯｸ
F2C2 04			DB	4		;
BSH: 配置区画ｼﾌﾄ係数
F2C3 0F			DB	00001111B	;
BLM: 配置区画ﾏｽｸ
F2C4 00			DB	00000000B	;
EXM: 拡張ﾏｽｸ
F2C5 FF01		DW	512-1		;
DSM: 配置区画単位ﾃﾞｨｽｸ総容量-1(最終配置区画番号)
F2C7 FF00		DW	256-1		;
DRM: ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ総数-1(最終ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ番号)
F2C9 F0			DB	11110000B	;
AL0: 配置区画ﾃｰﾌﾞﾙ先頭ﾊﾞｲﾄ(ﾃﾞｨﾚｸﾄﾘ予約設定用)
F2CA 00			DB	00000000B	;
AL1: 配置区画ﾃｰﾌﾞﾙ第2ﾊﾞｲﾄ(ﾃﾞｨﾚｸﾄﾘ予約設定用)
F2CB 0000		DW	0		;
CKS: ﾃﾞｨﾚｸﾄﾘ用ﾚｺｰﾄﾞ/ﾁｪｯｸｻﾑ ﾍﾞｸﾀ(ﾊﾞｲﾄ)数(交換不可なので0)
F2CD 0100		DW	1		;
OFF: ﾄﾗｯｸ0からの予約ﾄﾗｯｸ数
F2CF

F2CF		;	* ﾄﾗｯｸ内ｾｸﾀ変換ﾃｰﾌﾞﾙ *
F2CF

F2CF		;	( 2D(物理1ｾｸﾀ ｽｷｭｰ) )
F2CF

F2CF 00102030	XLT0:	DB	00H,10H,20H,30H	;
論理ｾｸﾀ番号 0, 8, 16, 24
F2D3 08182838		DB	08H,18H,28H,38H	;
論理ｾｸﾀ番号 32, 40, 48, 56
F2D7 40506070		DB	40H,50H,60H,70H	;
論理ｾｸﾀ番号 64, 72, 80, 88
F2DB 48586878		DB	48H,58H,68H,78H	;
論理ｾｸﾀ番号 96,104,112,120
F2DF

F2DF		;	( 1S(物理6ｾｸﾀ ｽｷｭｰ) )
F2DF

F2DF 01070D13	XLT1:	DB	 1, 7,13,19	;
論理ｾｸﾀ番号 0, 1, 2, 3
F2E3 19050B11		DB	25, 5,11,17	;
論理ｾｸﾀ番号 4, 5, 6, 7
F2E7 1703090F		DB	23, 3, 9,15	;
論理ｾｸﾀ番号 8, 9,10,11
F2EB 1502080E		DB	21, 2, 8,14	;
論理ｾｸﾀ番号 12,13,14,15
F2EF 141A060C		DB	20,26, 6,12	;
論理ｾｸﾀ番号 16,17,18,19
F2F3 1218040A		DB	18,24, 4,10	;
論理ｾｸﾀ番号 20,21,22,23
F2F7 1016		DB	16,22		;
論理ｾｸﾀ番号 24,25
F2F9

F2F9		;	( FDC命令実行 )
F2F9		;	入: A:FDC命令ｺｰﾄﾞ  出: A:FDC状態ｺｰﾄﾞ
F2F9

F2F9 4F		FDCS:	LD	C,A		;
FDC命令ｺｰﾄﾞ一時保存
F2FA DB40	FDCS1:	IN	A,(F1C)		;
FDC状態情報取得
F2FC E681		AND	10000001B	;
ﾄﾞﾗｲﾌﾞ準備不可,FDCﾋﾞｼﾞｰ検査
F2FE 20FA		JR	NZ,FDCS1	;
受け入れ可まで待機
F300		;

F300 3EFF		LD	A,-1		;
真値取得
F302 324DF8		LD	(FDCFLG),A	;
FDC動作中ﾌﾗｸﾞ設定
F305 79			LD	A,C		;
FDC命令ｺｰﾄﾞ復帰
F306 D340	FDCS2:	OUT	(F1C),A		;
FDC命令設定(指定動作開始)
F308

F308		;	( FDC処理完了待機 )
F308		;	出: A:FDC状態ｺｰﾄﾞ
F308

F308 DB40	FDCS3:	IN	A,(F1C)		;
FDC状態情報取得
F30A 0F			RRCA			;
処理中ﾌﾗｸﾞをｷｬﾘｰ ﾌﾗｸﾞへ移動
F30B 38FB		JR	C,FDCS3		;
処理終了まで待機
F30D		;

F30D 07			RLCA			;
FDC状態ｺｰﾄﾞに復帰
F30E C9			RET			;
呼び出し元へ復帰
F30F

F30F		;	( 選択ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ値取得 )
F30F		;	入: A:ﾄﾞﾗｲﾌﾞ番号  出: A,B:選択ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ値
F30F

F30F D5		DRVCNV:	PUSH	DE		;
DEﾚｼﾞｽﾀ一時保存
F310 E5			PUSH	HL		;
HLﾚｼﾞｽﾀ一時保存
F311 5F			LD	E,A		;
ﾄﾞﾗｲﾌﾞ番号下位設定
F312 1600		LD	D,0		;
上位0設定
F314 2147F8		LD	HL,DRVTBL	;
ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ変換ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ取得
F317 19			ADD	HL,DE		;
対応ﾄﾞﾗｲﾌﾞ番号変換ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ取得
F318 7E			LD	A,(HL)		;
対応ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ値取得
F319 47			LD	B,A		;
ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ値ｺﾋﾟｰ
F31A E1			POP	HL		;
HLﾚｼﾞｽﾀ復帰
F31B D1			POP	DE		;
DEﾚｼﾞｽﾀ復帰
F31C C9			RET			;
呼び出し元へ復帰
F31D

F31D		;	( FDD ﾄﾞﾗｲﾌﾞ,面,記録密度信号設定 )
F31D

F31D DB50	SELECT:	IN	A,(P1A)		;
PPIﾎﾟｰﾄA値取得
F31F E63F		AND	00111111B	;
ﾓｰﾀON,ﾍｯﾄﾞ ﾛｰﾄﾞ ﾋﾞｯﾄ解除
F321 57			LD	D,A		;
密度,面,ﾄﾞﾗｲﾌﾞ選択ﾋﾞｯﾄ値保存
F322 3A5EF8		LD	A,(HSTDSK)	;
ﾊﾞｯﾌｧ対応ﾃﾞｨｽｸ番号取得
F325 CD0FF3		CALL	DRVCNV		;
論理→物理ﾄﾞﾗｲﾌﾞ番号変換
F328 215FF8		LD	HL,HSTSID	;
ﾊﾞｯﾌｧ対応面値ﾎﾟｲﾝﾀ取得
F32B B6			OR	(HL)		;
面1/面0ﾋﾞｯﾄ設定
F32C 215DF8		LD	HL,HSTDEN	;
ﾊﾞｯﾌｧ対応記録密度値ﾎﾟｲﾝﾀ取得
F32F B6			OR	(HL)		;
倍密度(MFM)/単密度(FM)ﾋﾞｯﾄ設定
F330 5F			LD	E,A		;
新規の密度,面,ﾄﾞﾗｲﾌﾞ選択ﾋﾞｯﾄ値一時保存
F331 AA			XOR	D		;
直前値との変更有無検査
F332 C8			RET	Z		;
変更無しで呼び出し元へ復帰
F333		;

F333 57			LD	D,A		;
変更ﾋﾞｯﾄ値一時保存
F334 CD08F3		CALL	FDCS3		;
FDC処理完了待機
F337 7A			LD	A,D		;
変更ﾋﾞｯﾄ値復帰
F338 E620		AND	00100000B	;
記録密度変更か検査
F33A 280F		JR	Z,SELCT1	;
記録密度同一で分岐
F33C		;

F33C 7E			LD	A,(HL)		;
ﾊﾞｯﾌｧ対応記録密度値取得
F33D 2F			CPL			;
論理反転
F33E 0F			RRCA			;
(÷2)ﾋﾞｯﾄ5をﾋﾞｯﾄ3位置へ移動(÷4)
F33F 0F			RRCA			;
(÷4)
F340 E608		AND	00001000B	;
記録密度ﾋﾞｯﾄ以外解除
F342 F6C0		OR	FCMSK		;
拡張動作,書き込み補償ﾋﾞｯﾄ設定
F344 D343		OUT	(F1D),A		;
FDCに種別値設定
F346 3EFE		LD	A,FASM		;
FDC種別指定命令ｺｰﾄﾞ取得
F348 CDF9F2		CALL	FDCS		;
FDC種別設定(記録密度設定)
F34B DB50	SELCT1:	IN	A,(P1A)		;
PPIﾎﾟｰﾄA値取得
F34D E6C0		AND	11000000B	;
ﾓｰﾀON,ﾍｯﾄﾞ ﾛｰﾄﾞ ﾋﾞｯﾄ以外解除
F34F B3			OR	E		;
密度,面,ﾄﾞﾗｲﾌﾞ選択ﾋﾞｯﾄ新規値合成
F350 D350		OUT	(P1A),A		;
密度,面,ﾄﾞﾗｲﾌﾞ選択新規信号出力
F352 C9			RET			;
呼び出し元へ復帰
F353

F353		;	( FDDﾍｯﾄﾞ原点位置(ﾄﾗｯｸ0)移動 )
F353

F353 3E00	RTZ:	LD	A,FHME		;
FDCﾍｯﾄﾞ原点位置移動命令取得
F355 CDF9F2		CALL	FDCS		;
FDCﾍｯﾄﾞ原点位置(ﾄﾗｯｸ0)移動
F358 2A5EF8		LD	HL,(HSTDSK)	;
ﾊﾞｯﾌｧ対応ﾃﾞｨｽｸ番号取得
F35B AF			XOR	A		;
0値取得
F35C 67			LD	H,A		;
上位0設定
F35D 1150F8		LD	DE,TRACK	;
ﾄﾞﾗｲﾌﾞ別現ﾄﾗｯｸ番号ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ取得
F360 19			ADD	HL,DE		;
対応ﾄﾞﾗｲﾌﾞ現ﾄﾗｯｸ番号値ﾎﾟｲﾝﾀ取得
F361 77			LD	(HL),A		;
対応ﾄﾞﾗｲﾌﾞの現ﾄﾗｯｸ番号更新保存(=0)
F362 3E13		LD	A,18+1		;
18ms遅延値取得
F364 D343		OUT	(F1D),A		;
FDC18ms遅延指定
F366 3EFC		LD	A,FDLY		;
FDC遅延命令ｺｰﾄﾞ取得
F368 324DF8		LD	(FDCFLG),A	;
FDC動作中ﾌﾗｸﾞ設定
F36B D340		OUT	(F1C),A		;
FDC18ms間待機(ﾋﾞｼﾞｰ)開始
F36D C9			RET			;
呼び出し元へ復帰
F36E

F36E		;	( FDDﾍｯﾄﾞ目的ﾄﾗｯｸ位置移動(Seek) )
F36E

F36E 2A5EF8	SEEK:	LD	HL,(HSTDSK)	;
ﾊﾞｯﾌｧ対応ﾃﾞｨｽｸ番号取得
F371 2600		LD	H,0		;
上位0設定
F373 1150F8		LD	DE,TRACK	;
ﾄﾞﾗｲﾌﾞ別現ﾄﾗｯｸ番号ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ取得
F376 19			ADD	HL,DE		;
対応ﾄﾞﾗｲﾌﾞ現ﾄﾗｯｸ番号値ﾎﾟｲﾝﾀ取得
F377 7E			LD	A,(HL)		;
対応ﾄﾞﾗｲﾌﾞ現ﾄﾗｯｸ番号取得
F378 D341		OUT	(F1T),A		;
FDC現ﾄﾗｯｸ番号再設定(復帰)
F37A 3A60F8		LD	A,(HSTTRK)	;
ﾊﾞｯﾌｧ対応(指定)ﾄﾗｯｸ番号取得
F37D BE			CP	(HL)		;
指定ﾄﾗｯｸ番号と比較
F37E C8			RET	Z		;
一致で呼び出し元へ復帰
F37F		;

F37F 77			LD	(HL),A		;
対応ﾄﾞﾗｲﾌﾞの現ﾄﾗｯｸ番号更新保存
F380 CD08F3		CALL	FDCS3		;
FDC処理完了待機
F383 7E			LD	A,(HL)		;
指定ﾄﾗｯｸ番号取得
F384 D343		OUT	(F1D),A		;
FDC移動先ﾄﾗｯｸ番号指定
F386 3E10		LD	A,FSEK		;
FDCﾍｯﾄﾞ目的ﾄﾗｯｸ位置移動命令ｺｰﾄﾞ取得
F388 C3F9F2		JP	FDCS		;
FDCﾍｯﾄﾞ目的ﾄﾗｯｸ移動後呼び出し元へ復帰へ
F38B

F38B		;	( ｺﾝｿｰﾙ文字列出力 )
F38B		;	入: HL:文字列ﾎﾟｲﾝﾀ
F38B

F38B 7E		MSGOUT:	LD	A,(HL)		;
文字列対応ﾊﾞｲﾄ取得
F38C B7			OR	A		;
終了子検査
F38D C8			RET	Z		;
終了子で呼び出し元へ復帰
F38E		;

F38E 4F			LD	C,A		;
文字ﾊﾞｲﾄ指定
F38F CD40F4		CALL	CONOUT		;
ｺﾝｿｰﾙ文字ﾊﾞｲﾄ出力
F392 23			INC	HL		;
文字列ﾎﾟｲﾝﾀ進行(+1)
F393 18F6		JR	MSGOUT		;
終了子まで継続へ
F395

F395		;	* ｺｰﾙﾄﾞ ﾌﾞｰﾄ *
F395		;	入: 論理→物理ﾄﾞﾗｲﾌﾞ変換ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ(独自仕様)  出: C:0(Aﾄﾞﾗｲﾌﾞ選択)
F395

F395 3182F8	BOOT:	LD	SP,STACK	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化
F398 1147F8		LD	DE,DRVTBL	;
ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ変換ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ取得
F39B 010500		LD	BC,4+1		;
転送ﾊﾞｲﾄ数取得
F39E EDB0		LDIR			;
ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ変換ﾃｰﾌﾞﾙと拡張出力ﾎﾟｰﾄ保存値初期化(ﾓﾆﾀからｺﾋﾟｰ)
F3A0 3EC0		LD	A,0C0H		;
(共通1:C000H:ﾊﾞﾝｸ)指定値取得
F3A2 ED393A		OUT0	(BAR),A		;
ROM領域無し(全RAM領域)設定
F3A5 3E40		LD	A,INTTBL	;
割り込みﾍﾞｸﾀ ﾃｰﾌﾞﾙ下位ｱﾄﾞﾚｽ取得
F3A7 ED3933		OUT0	(ILR),A		;
割り込みﾍﾞｸﾀ基準ｱﾄﾞﾚｽ下位初期化
F3AA 3EF2		LD	A,INTTBL/256	;
割り込みﾍﾞｸﾀ ﾃｰﾌﾞﾙ上位ｱﾄﾞﾚｽ取得
F3AC ED47		LD	I,A		;
割り込みﾍﾞｸﾀ基準ｱﾄﾞﾚｽ上位初期化
F3AE AF			XOR	A		;
0値取得
F3AF 324FF8		LD	(CDSKN),A	;
BIOS用現ﾄﾞﾗｲﾌﾞ番号初期化(=A)
F3B2 320400		LD	(CDISK),A	;
現ﾄﾞﾗｲﾌﾞ番号初期化(=A)
F3B5 320300		LD	(IOBYTE),A	;
I/Oﾊﾞｲﾄ初期化
F3B8 0626		LD	B,WRK2-WRK1	;
変数領域ﾊﾞｲﾄ数ｶｳﾝﾀ初期化
F3BA 214CF8		LD	HL,WRK1		;
変数領域基準ﾎﾟｲﾝﾀ取得
F3BD 77		BOOT1:	LD	(HL),A		;
対応ﾊﾞｲﾄ初期化(0)
F3BE 23			INC	HL		;
変数領域ﾎﾟｲﾝﾀ進行(+1)
F3BF 10FC		DJNZ	BOOT1		;
変数領域全初期化まで継続へ
F3C1		;

F3C1 2F			CPL			;
真(-1)値取得
F3C2 324CF8		LD	(LSTFLG),A	;
ﾌﾟﾘﾝﾀ出力可ﾌﾗｸﾞ初期化(-1:出力可)
F3C5 324DF8		LD	(FDCFLG),A	;
FDC動作中ﾌﾗｸﾞ初期化(-1:作業中)
F3C8 2111F4		LD	HL,MSGON	;
CP/M開始文字列基準ﾎﾟｲﾝﾀ取得
F3CB CD8BF3		CALL	MSGOUT		;
CP/M開始表示
F3CE 1818		JR	GOCPM		;
CP/M(CCP)移行処理へ
F3D0

F3D0		;	* ｳｫｰﾑﾌﾞｰﾄ *
F3D0		;	出: C:選択ﾄﾞﾗｲﾌﾞ番号
F3D0

F3D0 3182F8	WBOOT:	LD	SP,STACK	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化
F3D3 3EC8		LD	A,0C8H		;
(共通1:C000H:ﾊﾞﾝｸ:8000H:共通0)指定値取得
F3D5 ED393A		OUT0	(BAR),A		;
共通0領域をROM領域に変更
F3D8 210010		LD	HL,1000H	;
ROM内CCP先頭ｱﾄﾞﾚｽ取得
F3DB 1100DC		LD	DE,CCP		;
CCP先頭ｱﾄﾞﾚｽ取得
F3DE 010016		LD	BC,1024*5+512	;
CCP+BDOS+BIOS領域転送ﾊﾞｲﾄ数取得
F3E1 EDB0		LDIR			;
ROM内CCP+BDOS+BIOSをRAMへｺﾋﾟｰ
F3E3 3EC0		LD	A,0C0H		;
(共通1:C000H:ﾊﾞﾝｸ)指定値取得
F3E5 ED393A		OUT0	(BAR),A		;
ROM領域無し(全RAM領域)に復帰
F3E8

F3E8		;	( CP/M(CCP)へ移行 )
F3E8

F3E8 3EC3	GOCPM:	LD	A,0C3H		;
JP命令機械語ｺｰﾄﾞ値取得
F3EA 320000		LD	(WBENT),A	;
ｳｫｰﾑ ﾌﾞｰﾄ移行命令先頭にJP命令設定
F3ED 320500		LD	(BDENT),A	;
BODS移行命令先頭にJP命令設定
F3F0 2103F2		LD	HL,JPTBL+3	;
ｳｫｰﾑ ﾌﾞｰﾄ分岐命令先頭ｱﾄﾞﾚｽ取得
F3F3 220100		LD	(WBENT+1),HL	;
ｳｫｰﾑ ﾌﾞｰﾄ移行命令ｱﾄﾞﾚｽ部初期化
F3F6 2106E4		LD	HL,BDOS		;
BDOS先頭ｱﾄﾞﾚｽ取得
F3F9 220600		LD	(BDENT+1),HL	;
BODS移行命令ｱﾄﾞﾚｽ部初期化
F3FC 018000		LD	BC,TBF		;
標準転送ﾊﾞｯﾌｧ先頭ｱﾄﾞﾚｽ取得
F3FF CDD4F4		CALL	SETDMA		;
DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ初期化
F402 AF			XOR	A		;
0値取得
F403 3265F8		LD	(HSTACT),A	;
ﾊﾞｯﾌｧ有効ﾌﾗｸﾞ初期化(無効)
F406 3267F8		LD	(UNACNT),A	;
未配置区画ﾚｺｰﾄﾞ数ｶｳﾝﾀ初期化
F409 3A4FF8		LD	A,(CDSKN)	;
現ﾄﾞﾗｲﾌﾞ番号取得
F40C 4F			LD	C,A		;
現ﾄﾞﾗｲﾌﾞ番号指定
F40D FB			EI			;
全割り込み許可
F40E C300DC		JP	CCP		;
CCPへ移行
F411

F411		;	( CP/M開始文字列 )
F411

F411 0D0A	MSGON:	DB	CR,LF

F413 2A2A2A20		DB	'*** 62K CP/M Ver 2.2 ***'

F417 36324B20

F41B 43502F4D

F41F 20566572

F423 20322E32

F427 202A2A2A

F42B 0D0A00		DB	CR,LF,0

F42E

F42E		;	* ｺﾝｿｰﾙ入力状態取得 *
F42E		;	出: A:入力有(-1)/無(0)ｺｰﾄﾞ
F42E

F42E ED3805	CONST:	IN0	A,(A1S)		;
非同期ｼﾘｱﾙ1 ｽﾃｰﾀｽ ﾚｼﾞｽﾀ値取得
F431 E680		AND	10000000B	;
受信ﾃﾞｰﾀ有無検査
F433 C8			RET	Z		;
受信ﾃﾞｰﾀ無しで呼び出し元へ復帰
F434		;

F434 3EFF		LD	A,-1		;
受信ﾃﾞｰﾀ有りｺｰﾄﾞ取得
F436 C9			RET			;
呼び出し元へ復帰
F437

F437		;	* ｺﾝｿｰﾙ入力 *
F437		;	出: A:入力ﾊﾞｲﾄ(受信ﾃﾞｰﾀ)
F437

F437 CD2EF4	CONIN:	CALL	CONST		;
ｺﾝｿｰﾙ入力状態取得
F43A 28FB		JR	Z,CONIN		;
入力有りまで待機
F43C		;

F43C ED3809		IN0	A,(A1R)		;
受信ﾃﾞｰﾀ取得
F43F C9			RET			;
呼び出し元へ復帰
F440

F440		;	* ｺﾝｿｰﾙ出力 *
F440		;	入: C:出力ﾊﾞｲﾄ(送信ﾃﾞｰﾀ)
F440

F440 ED3805	CONOUT:	IN0	A,(A1S)		;
非同期ｼﾘｱﾙ1 ｽﾃｰﾀｽ ﾚｼﾞｽﾀ値取得
F443 E602		AND	00000010B	;
送信可か検査
F445 28F9		JR	Z,CONOUT	;
送信可まで待機
F447		;

F447 ED0907		OUT0	(A1T),C		;
送信ﾃﾞｰﾀ設定(送信開始)
F44A C9			RET			;
呼び出し元へ復帰
F44B

F44B		;	* ﾌﾟﾘﾝﾀ出力 *
F44B		;	入: C:出力ﾊﾞｲﾄ(印字ﾃﾞｰﾀ)
F44B

F44B 3A4CF8	LIST:	LD	A,(LSTFLG)	;
ﾌﾟﾘﾝﾀ出力可ﾌﾗｸﾞ値取得
F44E B7			OR	A		;
ﾌﾟﾘﾝﾀ出力可(-1)/不可(0)検査
F44F 28FA		JR	Z,LIST		;
出力可まで待機
F451		;

F451 79			LD	A,C		;
出力ﾃﾞｰﾀ取得
F452 D351		OUT	(P1B),A		;
出力ﾃﾞｰﾀ設定
F454 3E06		LD	A,06H		;
/STB=L制御値取得
F456 D353		OUT	(P1X),A		;
/STB=L設定
F458 AF			XOR	A		;
偽(0)値取得
F459 324CF8		LD	(LSTFLG),A	;
ﾌﾟﾘﾝﾀ出力可ﾌﾗｸﾞ解除(0:不可)
F45C 3E07		LD	A,07H		;
/STB=H制御値取得
F45E D353		OUT	(P1X),A		;
/STB=H設定
F460 C9			RET			;
呼び出し元へ復帰
F461

F461		;	* 紙ﾃｰﾌﾟ ﾊﾟﾝﾁｬ出力 *
F461		;	入: C:出力ﾊﾞｲﾄ(送信ﾃﾞｰﾀ)
F461

F461 ED3804	PUNCH:	IN0	A,(A0S)		;
非同期ｼﾘｱﾙ0 ｽﾃｰﾀｽ ﾚｼﾞｽﾀ値取得
F464 E602		AND	00000010B	;
送信可か検査
F466 28F9		JR	Z,PUNCH		;
送信可まで待機
F468		;

F468 ED0906		OUT0	(A0T),C		;
送信ﾃﾞｰﾀ設定(送信開始)
F46B C9			RET			;
呼び出し元へ復帰
F46C

F46C		;	* 紙ﾃｰﾌﾟ ﾘｰﾀﾞ入力 *
F46C		;	出: A:入力ﾊﾞｲﾄ(受信ﾃﾞｰﾀ)
F46C

F46C ED3804	READER:	IN0	A,(A0S)		;
非同期ｼﾘｱﾙ0 ｽﾃｰﾀｽ ﾚｼﾞｽﾀ値取得
F46F 07			RLCA			;
受信ﾃﾞｰﾀ有無検査
F470 30FA		JR	NC,READER	;
受信ﾃﾞｰﾀ有りまで待機
F472		;

F472 ED3808		IN0	A,(A0R)		;
受信ﾃﾞｰﾀ取得
F475 C9			RET			;
呼び出し元へ復帰
F476

F476		;	( 記録密度,ﾊﾞｲﾄ数/1ｾｸﾀ値更新 )
F476		;	入: A:ﾄﾞﾗｲﾌﾞ番号
F476

F476 87		SETDEN:	ADD	A,A		;
ﾜｰﾄﾞ単位に変換(×2)
F477 5F			LD	E,A		;
対応ﾄﾞﾗｲﾌﾞ ｵﾌｾｯﾄ設定
F478 1600		LD	D,0		;
上位0設定
F47A 2133F2		LD	HL,FDUSEC	;
ﾄﾞﾗｲﾌﾞ別ﾊﾞｲﾄ数/1ｾｸﾀﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ取得
F47D 19			ADD	HL,DE		;
対応ﾄﾞﾗｲﾌﾞ ﾊﾞｲﾄ数/1ｾｸﾀ値ﾎﾟｲﾝﾀ取得
F47E 7E			LD	A,(HL)		;
ﾊﾞｲﾄ数/1ｾｸﾀ値下位(仮)取得
F47F 23			INC	HL		;
対応ﾄﾞﾗｲﾌﾞ ﾊﾞｲﾄ数/1ｾｸﾀ値ﾎﾟｲﾝﾀ進行(+1)
F480 66			LD	H,(HL)		;
ﾊﾞｲﾄ数/1ｾｸﾀ値上位取得
F481 6F			LD	L,A		;
ﾊﾞｲﾄ数/1ｾｸﾀ値下位ｺﾋﾟｰ
F482 225BF8		LD	(SEKCNT),HL	;
指定ﾊﾞｲﾄ数/1ｾｸﾀ設定保存
F485 B7			OR	A		;
128ﾊﾞｲﾄ/1ｾｸﾀか検査
F486 3E20		LD	A,00100000B	;
倍密度(MFM)値取得
F488 2801		JR	Z,STDEN1	;
128ﾊﾞｲﾄ/1ｾｸﾀ以外で分岐
F48A		;

F48A AF			XOR	A		;
128ﾊﾞｲﾄ/1ｾｸﾀで単密度(FM)値取得
F48B 3256F8	STDEN1:	LD	(SEKDEN),A	;
指定記録密度値設定保存
F48E C9			RET			;
呼び出し元へ復帰
F48F

F48F		;	* ﾃﾞｨｽｸ選択 *
F48F		;	入: C:ﾄﾞﾗｲﾌﾞ番号  出: HL:ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ ﾎﾟｲﾝﾀ
F48F

F48F 79		SELDSK:	LD	A,C		;
指定ﾄﾞﾗｲﾌﾞ番号取得
F490 210000		LD	HL,0		;
無効ﾄﾞﾗｲﾌﾞ復帰ｺｰﾄﾞ(仮)設定
F493 FE05		CP	DRVMAX		;
ﾄﾞﾗｲﾌﾞ番号範囲検査
F495 D0			RET	NC		;
最大ﾄﾞﾗｲﾌﾞ越えで呼び出し元へ復帰
F496		;

F496 3257F8		LD	(SEKDSK),A	;
BDOS指定ﾄﾞﾗｲﾌﾞ番号設定保存
F499 324FF8		LD	(CDSKN),A	;
現ﾄﾞﾗｲﾌﾞ番号更新保存
F49C CD76F4		CALL	SETDEN		;
記録密度,ﾊﾞｲﾄ数/1ｾｸﾀ値更新
F49F EB			EX	DE,HL		;
ﾄﾞﾗｲﾌﾞ番号×2値をHLへ移動
F4A0 29			ADD	HL,HL		;
(×4)対応ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ位置ｵﾌｾｯﾄ取得(元から×16)
F4A1 29			ADD	HL,HL		;
(×8)
F4A2 29			ADD	HL,HL		;
(×16)
F4A3 1152F2		LD	DE,DPH0		;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ取得
F4A6 19			ADD	HL,DE		;
対応ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ基準ﾎﾟｲﾝﾀ取得
F4A7 C9			RET			;
呼び出し元へ復帰
F4A8

F4A8		;	* ﾃﾞｨｽｸ原点位置移動 *
F4A8

F4A8 0E00	HOME:	LD	C,0		;
ﾄﾗｯｸ0指定
F4AA

F4AA		;	* ﾄﾗｯｸ設定 *
F4AA		;	入: BC:ﾄﾗｯｸ番号
F4AA

F4AA 79		SETTRK:	LD	A,C		;
ﾄﾗｯｸ番号取得
F4AB 3259F8		LD	(SEKTRK),A	;
BDOS指定ﾄﾗｯｸ番号設定保存
F4AE B7			OR	A		;
ﾄﾗｯｸ0検査
F4AF 3A57F8		LD	A,(SEKDSK)	;
BDOS指定ﾄﾞﾗｲﾌﾞ番号取得
F4B2 20C2		JR	NZ,SETDEN	;
ﾄﾗｯｸ0以外で記録密度,ﾊﾞｲﾄ数/1ｾｸﾀ値更新
F4B4		;

F4B4 AF			XOR	A		;
単密度(FM)値取得
F4B5 3256F8		LD	(SEKDEN),A	;
指定記録密度値設定保存
F4B8 218000		LD	HL,128		;
128ﾊﾞｲﾄ/1ｾｸﾀ値取得
F4BB 225BF8		LD	(SEKCNT),HL	;
ﾊﾞｲﾄ数/物理ｾｸﾀ値設定
F4BE C9			RET			;
呼び出し元へ復帰
F4BF

F4BF		;	* ｾｸﾀ設定 *
F4BF		;	入: BC:ｾｸﾀ番号
F4BF

F4BF 79		SETSEC:	LD	A,C		;
論理ｾｸﾀ番号取得
F4C0 FE41		CP	8*8+1		;
面検査
F4C2 3E00		LD	A,00000000B	;
面0値取得
F4C4 3806		JR	C,SSECT1	;
ｾｸﾀ64以下で分岐
F4C6		;

F4C6 79			LD	A,C		;
論理ｾｸﾀ番号取得
F4C7 D640		SUB	8*8		;
65～を1～に変換
F4C9 4F			LD	C,A		;
変換後論理ｾｸﾀ番号一時保存
F4CA 3E10		LD	A,00010000B	;
面1値取得
F4CC 3258F8	SSECT1:	LD	(SEKSID),A	;
指定面値設定保存
F4CF 79			LD	A,C		;
ｾｸﾀ番号取得
F4D0 325AF8		LD	(SEKSEC),A	;
BDOS指定ｾｸﾀ番号ｾｸﾀ番号設定保存
F4D3 C9			RET			;
呼び出し元へ復帰
F4D4

F4D4		;	* DMA(転送)基準ｱﾄﾞﾚｽ設定 *
F4D4		;	入: BC:DMA(転送)基準ｱﾄﾞﾚｽ
F4D4

F4D4 ED4370F8	SETDMA:	LD	(DMAADR),BC	;
DMA(転送)基準ｱﾄﾞﾚｽ保存
F4D8 C9			RET			;
呼び出し元へ復帰
F4D9

F4D9		;	* ﾄﾗｯｸ内ｾｸﾀ番号変換 *
F4D9		;	入: BC:0基準ｾｸﾀ番号 DE:変換ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ  出: HL:変換後1基準ｾｸﾀ番号
F4D9		;	出: HL:変換後1基準ｾｸﾀ番号
F4D9

F4D9 3A57F8	SECTRN:	LD	A,(SEKDSK)	;
BDOS指定ﾄﾞﾗｲﾌﾞ番号取得
F4DC FE04		CP	DRVMAX-1	;
RAMﾄﾞﾗｲﾌﾞか検査
F4DE 2822		JR	Z,SECTR2	;
RAMﾄﾞﾗｲﾌﾞで分岐
F4E0		;

F4E0 3A56F8		LD	A,(SEKDEN)	;
指定記録密度値取得
F4E3 B7			OR	A		;
単/倍密度検査
F4E4 2814		JR	Z,SECTR1	;
単密度で分岐
F4E6

F4E6		;	( FD 2D )
F4E6

F4E6 79			LD	A,C		;
ｾｸﾀ番号取得
F4E7 E607		AND	00000111B	;
8ｾｸﾀ単位内ｾｸﾀ番号取得(128/1024)
F4E9 CB39		SRL	C		;
(÷2)8ｾｸﾀ単位番号変換(÷8)
F4EB CB39		SRL	C		;
(÷4)
F4ED CB39		SRL	C		;
(÷8)
F4EF 0600		LD	B,0		;
上位0設定
F4F1 EB			EX	DE,HL		;
変換ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀをHLへ移動
F4F2 09			ADD	HL,BC		;
対応変換ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ取得
F4F3 6E			LD	L,(HL)		;
対応ｾｸﾀ値取得
F4F4 2600		LD	H,0		;
上位0設定
F4F6 B5			OR	L		;
0基準ｾｸﾀ番号取得(上位と下位3ﾋﾞｯﾄ合成)
F4F7 3C			INC	A		;
1基準ｾｸﾀ番号取得
F4F8 6F			LD	L,A		;
基準ｾｸﾀ番号設定
F4F9 C9			RET			;
呼び出し元へ復帰
F4FA

F4FA		;	( FD 1S )
F4FA

F4FA 0600	SECTR1:	LD	B,0		;
上位0設定
F4FC EB			EX	DE,HL		;
変換ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀをHLへ移動
F4FD 09			ADD	HL,BC		;
対応変換ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ取得
F4FE 6E			LD	L,(HL)		;
対応ｾｸﾀ番号取得
F4FF 2600		LD	H,0		;
上位0設定
F501 C9			RET			;
呼び出し元へ復帰
F502

F502		;	( RAMﾃﾞｨｽｸ )
F502

F502 69		SECTR2:	LD	L,C		;
ｾｸﾀ番号取得
F503 2C			INC	L		;
1基準に変更
F504 2600		LD	H,0		;
上位0設定
F506 C9			RET			;
呼び出し元へ復帰
F507

F507		;	* ﾌﾟﾘﾝﾀ出力状態取得 *
F507		;	出: A:出力可(-1)/不可(0)ｺｰﾄﾞ
F507

F507 3A4CF8	LISTST:	LD	A,(LSTFLG)	;
ﾌﾟﾘﾝﾀ出力可ﾌﾗｸﾞ(0=不可,-1=可)値取得
F50A C9			RET			;
呼び出し元へ復帰
F50B

F50B		;	* ｾｸﾀ読み出し *
F50B		;	出: A:成功(0)/失敗(1)ﾌﾗｸﾞ
F50B

F50B 3A57F8	READ:	LD	A,(SEKDSK)	;
BODS指定ﾄﾞﾗｲﾌﾞ番号取得
F50E FE04		CP	DRVMAX-1	;
RAMﾄﾞﾗｲﾌﾞか検査
F510 CAB3F6		JP	Z,RDB		;
RAMﾄﾞﾗｲﾌﾞで分岐
F513		;

F513 AF			XOR	A		;
0値取得
F514 3267F8		LD	(UNACNT),A	;
未配置区画ﾚｺｰﾄﾞ数ｶｳﾝﾀ初期化(無効)
F517 3E01		LD	A,1		;
真(1)値取得
F519 326EF8		LD	(READOP),A	;
読み(1)/書き(0)処理ﾌﾗｸﾞ読み設定
F51C 326DF8		LD	(RSFLAG),A	;
必要時物理ｾｸﾀ読み込み要求ﾌﾗｸﾞ設定
F51F 3E02		LD	A,WRUAL		;
未配置区画書き込み種別番号取得
F521 326FF8		LD	(WRTYPE),A	;
書き込み種別番号みなし設定
F524 C3CDF5		JP	RWOPER		;
読み込み処理へ
F527

F527		;	* ｾｸﾀ書き込み *
F527		;	出: A:成功(0)/失敗(1)ﾌﾗｸﾞ
F527

F527 3A57F8	WRITE:	LD	A,(SEKDSK)	;
BODS指定ﾄﾞﾗｲﾌﾞ番号取得
F52A FE04		CP	DRVMAX-1	;
RAMﾄﾞﾗｲﾌﾞか検査
F52C CA8DF6		JP	Z,WRB		;
RAMﾄﾞﾗｲﾌﾞで分岐
F52F		;

F52F AF			XOR	A		;
偽(0)値取得
F530 326EF8		LD	(READOP),A	;
読み(1)/書き(0)処理ﾌﾗｸﾞ書き設定
F533 79			LD	A,C		;
書き込み種別番号取得
F534 326FF8		LD	(WRTYPE),A	;
書き込み種別番号保存
F537 FE02		CP	WRUAL		;
未配置区画書き込みか検査
F539 2025		JR	NZ,CHKUNA	;
既配置区画orﾃﾞｨﾚｸﾄﾘ書き込みで分岐
F53B		;

F53B 3A56F8		LD	A,(SEKDEN)	;
指定記録密度値取得
F53E B7			OR	A		;
単/倍密度検査
F53F 3E10		LD	A,16		;
倍密度時ﾚｺｰﾄﾞ数/1配置区画値取得
F541 2002		JR	NZ,WRITE1	;
倍密度で分岐
F543		;

F543 3E08		LD	A,8		;
単密度時ﾚｺｰﾄﾞ数/1配置区画値取得
F545 3267F8	WRITE1:	LD	(UNACNT),A	;
未配置区画ﾚｺｰﾄﾞ数ｶｳﾝﾀ初期化
F548 3A57F8		LD	A,(SEKDSK)	;
BODS指定ﾄﾞﾗｲﾌﾞ番号取得
F54B 3268F8		LD	(UNADSK),A	;
未配置区画ﾃﾞｨｽｸ番号設定(=SEKDSK)
F54E 3A59F8		LD	A,(SEKTRK)	;
BODS指定ﾄﾗｯｸ番号取得
F551 326AF8		LD	(UNATRK),A	;
未配置区画ﾄﾗｯｸ番号設定(=SEKTRK)
F554 3A58F8		LD	A,(SEKSID)	;
指定面値取得
F557 3269F8		LD	(UNASID),A	;
未配置区画面番号設定(=SEKSID)
F55A 3A5AF8		LD	A,(SEKSEC)	;
BDOS指定ｾｸﾀ番号取得
F55D 326BF8		LD	(UNASEC),A	;
未配置区画ｾｸﾀ番号設定(=SEKSEC)
F560		;

F560 3A67F8	CHKUNA:	LD	A,(UNACNT)	;
未配置区画ﾚｺｰﾄﾞ数ｶｳﾝﾀ値取得
F563 B7			OR	A		;
残ﾚｺｰﾄﾞ有無検査
F564 2857		JR	Z,ALLOC		;
残無しで分岐
F566		;

F566 3D			DEC	A		;
未配置区画ﾚｺｰﾄﾞ数ｶｳﾝﾀ値減数(-1)
F567 3267F8		LD	(UNACNT),A	;
未配置区画ﾚｺｰﾄﾞ数ｶｳﾝﾀ値更新保存
F56A 3A57F8		LD	A,(SEKDSK)	;
BDOS指定ﾃﾞｨｽｸ番号取得
F56D 2168F8		LD	HL,UNADSK	;
未配置区画ﾃﾞｨｽｸ番号値ﾎﾟｲﾝﾀ取得
F570 BE			CP	(HL)		;
指定値と未配置区画のﾃﾞｨｽｸ番号比較
F571 204A		JR	NZ,ALLOC	;
不一致で分岐
F573		;

F573 3A59F8		LD	A,(SEKTRK)	;
BDOS指定ﾄﾗｯｸ番号取得
F576 216AF8		LD	HL,UNATRK	;
未配置区画ﾄﾗｯｸ番号値ﾎﾟｲﾝﾀ取得
F579 BE			CP	(HL)		;
指定値と未配置区画のﾄﾗｯｸ番号比較
F57A 2041		JR	NZ,ALLOC	;
不一致で分岐
F57C		;

F57C 3A58F8		LD	A,(SEKSID)	;
指定面値取得
F57F 2169F8		LD	HL,UNASID	;
未配置区画面番号値ﾎﾟｲﾝﾀ取得
F582 BE			CP	(HL)		;
指定値と未配置区画の面番号比較
F583 2038		JR	NZ,ALLOC	;
不一致で分岐
F585		;

F585 3A5AF8		LD	A,(SEKSEC)	;
BDOS指定ｾｸﾀ番号取得
F588 216BF8		LD	HL,UNASEC	;
未配置区画ｾｸﾀ番号値ﾎﾟｲﾝﾀ取得
F58B BE			CP	(HL)		;
指定値と未配置区画のｾｸﾀ番号比較
F58C 202F		JR	NZ,ALLOC	;
不一致で分岐
F58E		;

F58E 34			INC	(HL)		;
未配置区画ｾｸﾀ番号進行(+1)
F58F 3A56F8		LD	A,(SEKDEN)	;
指定記録密度値取得
F592 B7			OR	A		;
単/倍密度検査
F593 3E41		LD	A,64+1		;
倍密度時最終ｾｸﾀ番号+1値取得
F595 2002		JR	NZ,CKUNA1	;
倍密度で分岐
F597		;

F597 3E1B		LD	A,26+1		;
単密度時最終ｾｸﾀ番号+1値取得
F599 4F		CKUNA1:	LD	C,A		;
最終ｾｸﾀ番号+1値一時保存
F59A 7E			LD	A,(HL)		;
更新後未配置区画ｾｸﾀ番号取得
F59B B9			CP	C		;
ﾚｺｰﾄﾞ単位でﾄﾗｯｸ内か検査
F59C 3819		JR	C,NOOVF		;
ﾄﾗｯｸ内で分岐
F59E		;

F59E 3601		LD	(HL),1		;
未配置区画ｾｸﾀ番号初期化(=1)
F5A0 3A56F8		LD	A,(SEKDEN)	;
指定記録密度値取得
F5A3 B7			OR	A		;
単/倍密度検査
F5A4 280A		JR	Z,CKUNA2	;
単密度で分岐
F5A6		;

F5A6 3A69F8		LD	A,(UNASID)	;
未配置区画面番号取得
F5A9 EE10		XOR	00010000B	;
面反転
F5AB 3269F8		LD	(UNASID),A	;
未配置区画面番号更新保存
F5AE 2007		JR	NZ,NOOVF	;
面0→1で分岐
F5B0		;

F5B0 3A6AF8	CKUNA2:	LD	A,(UNATRK)	;
未配置区画ﾄﾗｯｸ番号取得
F5B3 3C			INC	A		;
未配置区画ﾄﾗｯｸ番号進行(+1)
F5B4 326AF8		LD	(UNATRK),A	;
未配置区画ﾄﾗｯｸ番号更新保存
F5B7 AF		NOOVF:	XOR	A		;
偽(0)値取得
F5B8 326DF8		LD	(RSFLAG),A	;
必要時物理ｾｸﾀ読み込み要求ﾌﾗｸﾞ解除
F5BB 1810		JR	RWOPER		;
書き込み処理へ
F5BD		;

F5BD AF		ALLOC:	XOR	A		;
0値取得
F5BE 3267F8		LD	(UNACNT),A	;
未配置区画ﾚｺｰﾄﾞ数ｶｳﾝﾀ初期化(無効)
F5C1 3A56F8		LD	A,(SEKDEN)	;
指定記録密度値取得
F5C4 B7			OR	A		;
単/倍密度検査
F5C5 3E01		LD	A,1		;
真(1)値取得
F5C7 2001		JR	NZ,ALLOC1	;
倍密度で分岐
F5C9		;

F5C9 AF			XOR	A		;
偽(0)値取得
F5CA 326DF8	ALLOC1:	LD	(RSFLAG),A	;
必要時物理ｾｸﾀ読み込み要求ﾌﾗｸﾞ設定
F5CD AF		RWOPER:	XOR	A		;
偽(0)値取得
F5CE 326CF8		LD	(ERFLAG),A	;
異常ﾌﾗｸﾞ初期化
F5D1 3A5AF8		LD	A,(SEKSEC)	;
BDOS指定ｾｸﾀ番号取得
F5D4 4F			LD	C,A		;
BDOS指定ｾｸﾀ番号一時保存
F5D5 3A56F8		LD	A,(SEKDEN)	;
指定記録密度値取得
F5D8 B7			OR	A		;
単/倍密度検査
F5D9 79			LD	A,C		;
BDOS指定ｾｸﾀ番号復帰
F5DA 2807		JR	Z,RWOP1		;
単密度で分岐
F5DC		;

F5DC 3D			DEC	A		;
0基準ｾｸﾀ番号に変換
F5DD 0F			RRCA			;
(÷2)物理ｾｸﾀ番号-1値取得(÷8)
F5DE 0F			RRCA			;
(÷4)
F5DF 0F			RRCA			;
(÷8)
F5E0 E607		AND	00000111B	;
無効ﾋﾞｯﾄ解除
F5E2 3C			INC	A		;
1基準ｾｸﾀ番号に変換
F5E3 3264F8	RWOP1:	LD	(SEKHST),A	;
物理ｾｸﾀ番号保存
F5E6 2165F8		LD	HL,HSTACT	;
ﾊﾞｯﾌｧ有効ﾌﾗｸﾞ値ﾎﾟｲﾝﾀ取得
F5E9 7E			LD	A,(HL)		;
ﾊﾞｯﾌｧ有効ﾌﾗｸﾞ値取得
F5EA 3601		LD	(HL),1		;
ﾊﾞｯﾌｧ有効ﾌﾗｸﾞ設定
F5EC B7			OR	A		;
ﾊﾞｯﾌｧ有効/無効検査
F5ED 282B		JR	Z,FILHST	;
ﾊﾞｯﾌｧ無効でﾊﾞｯﾌｧ読み込みへ分岐
F5EF		;

F5EF 3A57F8		LD	A,(SEKDSK)	;
BDOS指定ﾃﾞｨｽｸ番号取得
F5F2 215EF8		LD	HL,HSTDSK	;
ﾊﾞｯﾌｧ対応ﾃﾞｨｽｸ番号値ﾎﾟｲﾝﾀ取得
F5F5 BE			CP	(HL)		;
指定値とﾊﾞｯﾌｧ値のﾃﾞｨｽｸ番号比較
F5F6 201B		JR	NZ,NMATCH	;
不一致で分岐
F5F8		;

F5F8 3A59F8		LD	A,(SEKTRK)	;
BDOS指定ﾄﾗｯｸ番号取得
F5FB 2160F8		LD	HL,HSTTRK	;
ﾊﾞｯﾌｧ対応ﾄﾗｯｸ番号値ﾎﾟｲﾝﾀ取得
F5FE BE			CP	(HL)		;
指定値とﾊﾞｯﾌｧ値のﾄﾗｯｸ番号比較
F5FF 2012		JR	NZ,NMATCH	;
不一致で分岐
F601		;

F601 3A58F8		LD	A,(SEKSID)	;
指定面値取得
F604 215FF8		LD	HL,HSTSID	;
ﾊﾞｯﾌｧ対応面値ﾎﾟｲﾝﾀ取得
F607 BE			CP	(HL)		;
指定値とﾊﾞｯﾌｧ値の面番号比較
F608 2009		JR	NZ,NMATCH	;
不一致で分岐
F60A		;

F60A 3A64F8		LD	A,(SEKHST)	;
指定物理ｾｸﾀ番号取得
F60D 2161F8		LD	HL,HSTSEC	;
ﾊﾞｯﾌｧ対応物理ｾｸﾀ番号値ﾎﾟｲﾝﾀ取得
F610 BE			CP	(HL)		;
指定物理ｾｸﾀ番号とﾊﾞｯﾌｧ対応ｾｸﾀ番号比較
F611 2836		JR	Z,MATCH		;
ﾄﾞﾗｲﾌﾞ,ﾄﾗｯｸ,面,ｾｸﾀ一致で分岐
F613		;

F613 3A66F8	NMATCH:	LD	A,(HSTWRT)	;
ﾊﾞｯﾌｧ書き込み保留中ﾌﾗｸﾞ取得
F616 B7			OR	A		;
ﾊﾞｯﾌｧ保留書き込み有無検査
F617 C407F7		CALL	NZ,WRHST	;
書き込み保留でﾊﾞｯﾌｧ書き出し
F61A		;

F61A 3A57F8	FILHST:	LD	A,(SEKDSK)	;
BDOS指定ﾃﾞｨｽｸ番号取得
F61D 325EF8		LD	(HSTDSK),A	;
ﾊﾞｯﾌｧ対応ﾃﾞｨｽｸ番号更新保存
F620 3A59F8		LD	A,(SEKTRK)	;
BDOS指定ﾄﾗｯｸ番号取得
F623 3260F8		LD	(HSTTRK),A	;
ﾊﾞｯﾌｧ対応ﾄﾗｯｸ番号更新保存
F626 3A58F8		LD	A,(SEKSID)	;
指定面値取得
F629 325FF8		LD	(HSTSID),A	;
ﾊﾞｯﾌｧ対応面値更新保存
F62C 3A56F8		LD	A,(SEKDEN)	;
指定記録密度値取得
F62F 325DF8		LD	(HSTDEN),A	;
ﾊﾞｯﾌｧ対応記録密度値更新保存
F632 2A5BF8		LD	HL,(SEKCNT)	;
指定ﾊﾞｲﾄ数/1ｾｸﾀ値取得
F635 2262F8		LD	(HSTCNT),HL	;
ﾊﾞｯﾌｧ対応ﾊﾞｲﾄ数/1ｾｸﾀ値更新保存
F638 3A64F8		LD	A,(SEKHST)	;
指定物理ｾｸﾀ番号取得
F63B 3261F8		LD	(HSTSEC),A	;
ﾊﾞｯﾌｧ対応ｾｸﾀ番号更新保存
F63E 3A6DF8		LD	A,(RSFLAG)	;
必要時物理ｾｸﾀ読み込み要求ﾌﾗｸﾞ値取得
F641 B7			OR	A		;
物理ｾｸﾀ読み込み有無検査
F642 C42AF7		CALL	NZ,RDHST	;
読み込み有りで指定対応物理ｾｸﾀ読み込み
F645 AF			XOR	A		;
偽(0)値取得
F646 3266F8		LD	(HSTWRT),A	;
ﾊﾞｯﾌｧ書き込み保留中ﾌﾗｸﾞ解除
F649		;

F649 3A56F8	MATCH:	LD	A,(SEKDEN)	;
指定記録密度値取得
F64C B7			OR	A		;
単/倍密度検査
F64D 3E00		LD	A,0		;
ﾊﾞｯﾌｧ内先頭ﾚｺｰﾄﾞ番号取得
F64F 2806		JR	Z,MATCH1	;
単密度で分岐
F651		;

F651 3A5AF8		LD	A,(SEKSEC)	;
BDOS指定ｾｸﾀ番号取得
F654 3D			DEC	A		;
0基準ｾｸﾀ番号に変換
F655 E607		AND	00000111B	;
無効ﾋﾞｯﾄ解除(ﾊﾞｯﾌｧ内ﾚｺｰﾄﾞ番号取得)
F657 67		MATCH1:	LD	H,A		;
ﾊﾞｯﾌｧ内ﾚｺｰﾄﾞ番号を上位ﾊﾞｲﾄに設定
F658 2E00		LD	L,0		;
下位0設定
F65A CB3C		SRL	H		;
ﾚｺｰﾄﾞ(128ﾊﾞｲﾄ)単位ｵﾌｾｯﾄ取得
F65C CB1D		RR	L		;
(÷2)
F65E 117EFB		LD	DE,HSTBUF	;
物理ｾｸﾀ ﾃﾞｰﾀ ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
F661 19			ADD	HL,DE		;
対応ﾚｺｰﾄﾞに対するﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ取得(仮転送元)
F662 ED5B70F8		LD	DE,(DMAADR)	;
DMA(転送)基準ｱﾄﾞﾚｽ取得(仮転送先)
F666 3A6EF8		LD	A,(READOP)	;
読み(1)/書き(0)処理ﾌﾗｸﾞ取得
F669 B7			OR	A		;
読みor書き検査
F66A 2006		JR	NZ,RWMOVE	;
読み込みで分岐
F66C		;

F66C 3E01		LD	A,1		;
真(1)値取得
F66E 3266F8		LD	(HSTWRT),A	;
ﾊﾞｯﾌｧ書き込み保留中ﾌﾗｸﾞ設定
F671 EB			EX	DE,HL		;
DE:ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ(転送先),HL:DMAｱﾄﾞﾚｽ(転送元)
F672		;

F672 018000	RWMOVE:	LD	BC,128		;
ﾊﾞｲﾄ数/1ﾚｺｰﾄﾞ値取得
F675 EDB0		LDIR			;
128ﾊﾞｲﾄ転送
F677 3A6FF8		LD	A,(WRTYPE)	;
書き込み種別番号取得
F67A FE01		CP	WRDIR		;
ﾃﾞｨﾚｸﾄﾘ書き込みか検査
F67C 3A6CF8		LD	A,(ERFLAG)	;
現在までの異常ﾌﾗｸﾞ値取得
F67F C0			RET	NZ		;
ﾃﾞｨﾚｸﾄﾘ書き込み以外で呼び出し元へ復帰
F680		;

F680 B7			OR	A		;
異常有無検査
F681 C0			RET	NZ		;
異常有りで呼び出し元へ復帰
F682		;

F682 AF			XOR	A		;
偽(0)値取得
F683 3266F8		LD	(HSTWRT),A	;
ﾊﾞｯﾌｧ書き込み保留中ﾌﾗｸﾞ解除
F686 CD07F7		CALL	WRHST		;
指定対応物理ｾｸﾀ書き込み
F689 3A6CF8		LD	A,(ERFLAG)	;
異常ﾌﾗｸﾞ値取得
F68C C9			RET			;
呼び出し元へ復帰
F68D

F68D		;	( RAMﾃﾞｨｽｸ ｾｸﾀ書き込み )
F68D

F68D CDCAF6	WRB:	CALL	RWBNK		;
ﾊﾞﾝｸ,ﾒﾓﾘ ｱﾄﾞﾚｽ取得
F690 ED1920		OUT0	(D0SL),E	;
DMA0転送元ｱﾄﾞﾚｽ下位設定
F693 ED1121		OUT0	(D0SH),D	;
DMA0転送元ｱﾄﾞﾚｽ上位設定
F696 ED0122		OUT0	(D0SB),B	;
DMA0転送元ﾊﾞﾝｸ設定(ｼｽﾃﾑRAM)
F699 ED2923		OUT0	(D0DL),L	;
DMA0転送先ｱﾄﾞﾚｽ下位設定
F69C ED2124		OUT0	(D0DH),H	;
DMA0転送先ｱﾄﾞﾚｽ上位設定
F69F ED0925		OUT0	(D0DB),C	;
DMA0転送先ﾊﾞﾝｸ下位設定(拡張RAM)
F6A2		;

F6A2 3E02	RWB:	LD	A,00000010B	;
DMA0制御値取得
F6A4 ED3931		OUT0	(DXM),A		;
DMA0転送先+1,転送元+1,ﾊﾞｰｽﾄ転送設定
F6A7 ED3830		IN0	A,(DXS)		;
DMAｽﾃｰﾀｽ値取得
F6AA E6EB		AND	11101011B	;
DMA0許可ﾋﾞｯﾄ更新可ﾋﾞｯﾄ設定(=0),割り込み許可ﾋﾞｯﾄ解除
F6AC F640		OR	01000000B	;
DMA0動作許可ﾋﾞｯﾄ設定
F6AE ED3930		OUT0	(DXS),A		;
DMA0転送開始
F6B1 AF			XOR	A		;
成功(0)ｺｰﾄﾞ取得
F6B2 C9			RET			;
呼び出し元へ復帰
F6B3

F6B3		;	( RAMﾃﾞｨｽｸ ｾｸﾀ読み込み )
F6B3

F6B3 CDCAF6	RDB:	CALL	RWBNK		;
ﾊﾞﾝｸ,ﾒﾓﾘ ｱﾄﾞﾚｽ取得
F6B6 ED2920		OUT0	(D0SL),L	;
DMA0転送元ｱﾄﾞﾚｽ下位設定
F6B9 ED2121		OUT0	(D0SH),H	;
DMA0転送元ｱﾄﾞﾚｽ上位設定
F6BC ED0922		OUT0	(D0SB),C	;
DMA0転送元ﾊﾞﾝｸ設定(拡張RAM)
F6BF ED1923		OUT0	(D0DL),E	;
DMA0転送先ｱﾄﾞﾚｽ下位設定
F6C2 ED1124		OUT0	(D0DH),D	;
DMA0転送先ｱﾄﾞﾚｽ上位設定
F6C5 ED0125		OUT0	(D0DB),B	;
DMA0転送先ﾊﾞﾝｸ下位設定(ｼｽﾃﾑRAM)
F6C8 18D8		JR	RWB		;
後処理へ
F6CA

F6CA		;	( RAMﾃﾞｨｽｸ ﾊﾞﾝｸ,ﾒﾓﾘ ｱﾄﾞﾚｽ取得 )
F6CA		;	出: B:ｼｽﾃﾑRAMﾊﾞﾝｸ番号,C:拡張RAMﾊﾞﾝｸ番号
F6CA		;	出: DE:DMA(転送)基準ｱﾄﾞﾚｽ,HL:拡張RAM基準ｱﾄﾞﾚｽ
F6CA

F6CA 2A5BF8	RWBNK:	LD	HL,(SEKCNT)	;
指定ﾊﾞｲﾄ数/1ｾｸﾀ(転送ﾊﾞｲﾄ数)取得
F6CD ED2926		OUT0	(D0CL),L	;
DMA0転送ﾊﾞｲﾄ数下位設定
F6D0 ED2127		OUT0	(D0CH),H	;
DMA0転送ﾊﾞｲﾄ数上位設定
F6D3 2E00		LD	L,0		;
拡張ﾒﾓﾘ ｱﾄﾞﾚｽ下位ﾊﾞｲﾄ初期化
F6D5 3A5AF8		LD	A,(SEKSEC)	;
BDOS指定ｾｸﾀ番号取得
F6D8 3D			DEC	A		;
0基準ｾｸﾀ番号に変更
F6D9 0F			RRCA			;
ｾｸﾀ番号最下位ﾋﾞｯﾄをｷｬﾘｰ ﾌﾗｸﾞへ移動
F6DA CB1D		RR	L		;
拡張ﾒﾓﾘ ｱﾄﾞﾚｽ下位ﾊﾞｲﾄ ﾋﾞｯﾄ7へ移動
F6DC 07			RLCA			;
0基準ｾｸﾀ番号ﾋﾞｯﾄ6～1を元位置へ復帰
F6DD 07			RLCA			;
ﾋﾞｯﾄ6～1をﾋﾞｯﾄ7～2位置へ移動
F6DE 67			LD	H,A		;
拡張ﾒﾓﾘ ｱﾄﾞﾚｽ上位ﾊﾞｲﾄ仮保存
F6DF 3A58F8		LD	A,(SEKSID)	;
指定面値取得
F6E2 07			RLCA			;
(×2)ﾋﾞｯﾄ4をﾋﾞｯﾄ7位置へ移動(×8)
F6E3 07			RLCA			;
(×4)
F6E4 07			RLCA			;
(×8)
F6E5 B4			OR	H		;
面ﾋﾞｯﾄ分(ﾋﾞｯﾄ7)合成
F6E6 67			LD	H,A		;
面,ｾｸﾀ番号合成値保存
F6E7 3A59F8		LD	A,(SEKTRK)	;
BDOS指定ﾄﾗｯｸ番号取得
F6EA 3D			DEC	A		;
0基準ﾄﾗｯｸ番号取得
F6EB 0F			RRCA			;
(ﾋﾞｯﾄ0→CF)ﾋﾞｯﾄ1,0をHﾚｼﾞｽﾀのﾋﾞｯﾄ7,6位置へ移動
F6EC CB1C		RR	H		;
(CF→ﾋﾞｯﾄ7)
F6EE 0F			RRCA			;
(ﾋﾞｯﾄ0→CF)
F6EF CB1C		RR	H		;
(CF→ﾋﾞｯﾄ7)ﾋﾞｯﾄ6:面,ﾋﾞｯﾄ5～0:ｾｸﾀ番号
F6F1 E60F		AND	00001111B	;
拡張ｱﾄﾞﾚｽ ﾋﾞｯﾄ(元ﾄﾗｯｸ番号ﾋﾞｯﾄ5～2)以外解除
F6F3 4F			LD	C,A		;
拡張ｱﾄﾞﾚｽ ﾋﾞｯﾄ値一時退避
F6F4 3A4BF8		LD	A,(PPTSV)	;
拡張出力ﾎﾟｰﾄ値取得
F6F7 E630		AND	00110000B	;
拡張ｱﾄﾞﾚｽ ﾋﾞｯﾄ解除
F6F9 B1			OR	C		;
拡張ｱﾄﾞﾚｽ ﾋﾞｯﾄ合成
F6FA 324BF8		LD	(PPTSV),A	;
拡張出力ﾎﾟｰﾄ値更新保存
F6FD D360		OUT	(PPT),A		;
拡張ｱﾄﾞﾚｽ設定(出力)
F6FF ED5B70F8		LD	DE,(DMAADR)	;
DMA(転送)基準ｱﾄﾞﾚｽ取得
F703 010204		LD	BC,04H*256+02H	;
ｼｽﾃﾑRAM:拡張RAMﾊﾞﾝｸ番号取得
F706 C9			RET			;
呼び出し元へ復帰
F707

F707		;	( FD物理ｾｸﾀ書き込み )
F707

F707 CD1DF3	WRHST:	CALL	SELECT		;
ﾄﾞﾗｲﾌﾞ,面,記録密度信号設定
F70A 3E0A		LD	A,10		;
再試行数取得
F70C 3255F8		LD	(RTRYCNT),A	;
再試行ｶｳﾝﾀ初期化
F70F 0100A4	WH1:	LD	BC,FSWR*256+00H	;
単一ｾｸﾀ書き込み命令ｺｰﾄﾞ,I/O→ﾒﾓﾘ(+1)指定値取得
F712 CD4CF7		CALL	RWPS		;
1ｾｸﾀ書き込み処理
F715 E6FE		AND	11111110B	;
FDCｽﾃｰﾀｽ検査
F717 C8			RET	Z		;
正常終了で呼び出し元へ復帰
F718		;

F718 2155F8		LD	HL,RTRYCNT	;
再試行ｶｳﾝﾀ値ﾎﾟｲﾝﾀ取得
F71B 35			DEC	(HL)		;
再試行ｶｳﾝﾀ減数(-1)
F71C 2807		JR	Z,WH2		;
再試行終了で分岐
F71E		;

F71E E610		AND	00010000B	;
ｾｸﾀ位置未発見か検査
F720 C453F3		CALL	NZ,RTZ		;
未発見でFDDﾍｯﾄﾞ原点位置(ﾄﾗｯｸ0)移動
F723 18EA		JR	WH1		;
再試行分継続へ
F725		;

F725 2657	WH2:	LD	H,'W'		;
書き込み動作識別文字指定
F727 C3A5F7		JP	FERR		;
ﾃﾞｨｽｸ読み書き異常情報表示後呼び出し元へ復帰へ
F72A

F72A		;	( FD物理ｾｸﾀ読み込み )
F72A

F72A CD1DF3	RDHST:	CALL	SELECT		;
ﾄﾞﾗｲﾌﾞ,面,記録密度信号設定
F72D 3E0A		LD	A,10		;
再試行数取得
F72F 3255F8		LD	(RTRYCNT),A	;
再試行ｶｳﾝﾀ初期化
F732 010284	RH1:	LD	BC,FSRD*256+02H	;
単一ｾｸﾀ読み込み命令ｺｰﾄﾞ,ﾒﾓﾘ(+1)→I/O指定値取得
F735 CD4CF7		CALL	RWPS		;
1ｾｸﾀ読み込み処理
F738 E69E		AND	10011110B	;
FDCｽﾃｰﾀｽ検査
F73A C8			RET	Z		;
正常終了で呼び出し元へ復帰
F73B		;

F73B 2155F8		LD	HL,RTRYCNT	;
再試行ｶｳﾝﾀ値ﾎﾟｲﾝﾀ取得
F73E 35			DEC	(HL)		;
再試行ｶｳﾝﾀ減数(-1)
F73F 2807		JR	Z,RH2		;
再試行終了で分岐
F741		;

F741 E610		AND	00010000B	;
ｾｸﾀ位置未発見か検査
F743 C453F3		CALL	NZ,RTZ		;
未発見でFDDﾍｯﾄﾞ原点位置(ﾄﾗｯｸ0)移動
F746 18EA		JR	RH1		;
再試行分継続へ
F748		;

F748 2652	RH2:	LD	H,'R'		;
読み込み動作識別文字指定
F74A 1859		JR	FERR		;
ﾃﾞｨｽｸ読み書き異常情報表示後呼び出し元へ復帰へ
F74C

F74C		;	( FD物理1ｾｸﾀ読み書き )
F74C		;	入: B:FDC命令ｺｰﾄﾞ C:DMA1制御ｺｰﾄﾞ  出:FDCｽﾃｰﾀｽ値
F74C

F74C ED3832	RWPS:	IN0	A,(DWR)		;
DMA/ｳｪｲﾄ制御ﾚｼﾞｽﾀ値取得
F74F E6FC		AND	11111100B	;
DMA1制御ﾋﾞｯﾄ解除
F751 B1			OR	C		;
DMA1制御ﾋﾞｯﾄ設定
F752 ED3932		OUT0	(DWR),A		;
DMA1読みor書き用初期化
F755 CD6EF3		CALL	SEEK		;
FDDﾍｯﾄﾞ目的ﾄﾗｯｸ位置移動
F758 DB50		IN	A,(P1A)		;
PPIﾎﾟｰﾄA値取得
F75A F640		OR	01000000B	;
ﾍｯﾄﾞ ﾛｰﾄﾞ ﾋﾞｯﾄ設定
F75C D350		OUT	(P1A),A		;
ﾍｯﾄﾞ ﾛｰﾄﾞ信号有効出力設定
F75E		;

F75E 3A60F8		LD	A,(HSTTRK)	;
ﾊﾞｯﾌｧ対応物理ﾄﾗｯｸ番号取得
F761 FE2B		CP	43		;
ﾄﾗｯｸ43以上か検査
F763 0E00		LD	C,00000000B	;
低電流ﾋﾞｯﾄ解除値取得
F765 3802		JR	C,RWPS1		;
ﾄﾗｯｸ43未満で分岐
F767		;

F767 0E10		LD	C,00010000B	;
低電流ﾋﾞｯﾄ設定値取得
F769 214BF8	RWPS1:	LD	HL,PPTSV	;
拡張出力ﾎﾟｰﾄ値ﾎﾟｲﾝﾀ取得
F76C 7E			LD	A,(HL)		;
拡張出力ﾎﾟｰﾄ値取得
F76D E62F		AND	00101111B	;
低電流(LOW-C)ﾋﾞｯﾄ解除
F76F B1			OR	C		;
低電流ﾋﾞｯﾄ更新
F770 77			LD	(HL),A		;
拡張出力ﾎﾟｰﾄ値更新保存
F771 D360		OUT	(PPT),A		;
低電流(LOW-C)信号出力更新設定
F773		;

F773 3A61F8		LD	A,(HSTSEC)	;
ﾊﾞｯﾌｧ対応物理ｾｸﾀ番号取得
F776 D342		OUT	(F1S),A		;
FDCｾｸﾀ番号設定
F778		;

F778 217EFB		LD	HL,HSTBUF	;
物理ｾｸﾀ ﾃﾞｰﾀ ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
F77B ED2928		OUT0	(D1ML),L	;
DMA1ﾒﾓﾘ ｱﾄﾞﾚｽ下位設定
F77E ED2129		OUT0	(D1MH),H	;
DMA1ﾒﾓﾘ ｱﾄﾞﾚｽ上位設定
F781 3E04		LD	A,04H		;
ｼｽﾃﾑRAMﾊﾞﾝｸ値取得
F783 ED392A		OUT0	(D1MB),A	;
DMA1ﾒﾓﾘ ﾊﾞﾝｸ設定
F786 2A62F8		LD	HL,(HSTCNT)	;
ﾊﾞｯﾌｧ対応ﾊﾞｲﾄ数/1ｾｸﾀ
F789 ED292E		OUT0	(D1CL),L	;
DMA1転送ﾊﾞｲﾄ数下位設定
F78C ED212F		OUT0	(D1CH),H	;
DMA1転送ﾊﾞｲﾄ数上位設定
F78F ED3830		IN0	A,(DXS)		;
DMAｽﾃｰﾀｽ値取得
F792 E63F		AND	11010111	;
DMA1許可ﾋﾞｯﾄ更新可ﾋﾞｯﾄ設定(=0),割り込み許可ﾋﾞｯﾄ解除
F794 F680		OR	10000000B	;
DMA1動作許可ﾋﾞｯﾄ設定
F796 ED3930		OUT0	(DXS),A		;
DMA1転送開始
F799 78			LD	A,B		;
FDC命令ｺｰﾄﾞ取得
F79A CDF9F2		CALL	FDCS		;
FDC単一ｾｸﾀ読みor書き実行
F79D 4F			LD	C,A		;
FDCｽﾃｰﾀｽ値退避
F79E 3E14		LD	A,2*10		;
2秒値取得
F7A0 324EF8		LD	(T1M0),A	;
ﾍｯﾄﾞ ﾛｰﾄﾞ持続2秒ﾀｲﾏ起動
F7A3 79			LD	A,C		;
FDCｽﾃｰﾀｽ値復帰
F7A4 C9			RET			;
呼び出し元へ復帰
F7A5

F7A5		;	( FD読み書き異常処理(情報表示) )
F7A5		;	入: A:FDCｽﾃｰﾀｽ値 H:R/W識別文字
F7A5

F7A5 57		FERR:	LD	D,A		;
FDCｽﾃｰﾀｽ値退避
F7A6 0E25		LD	C,'%'		;
異常識別文字ｺｰﾄﾞ取得
F7A8 CD40F4		CALL	CONOUT		;
異常識別文字ｺﾝｿｰﾙ表示
F7AB 4C			LD	C,H		;
R/W識別文字取得
F7AC CD40F4		CALL	CONOUT		;
R/W識別文字ｺﾝｿｰﾙ表示
F7AF 0E20		LD	C,' '		;
空白ｺｰﾄﾞ取得
F7B1 CD40F4		CALL	CONOUT		;
ｺﾝｿｰﾙ空白表示
F7B4 7A			LD	A,D		;
FDCｽﾃｰﾀｽ値復帰
F7B5 CDE8F7		CALL	COAS		;
FDCｽﾃｰﾀｽ値ｺﾝｿｰﾙ16進2桁表示
F7B8 DB50		IN	A,(P1A)		;
PPIﾎﾟｰﾄA値(FD関係値)
F7BA CDE8F7		CALL	COAS		;
密度,面,ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ値ｺﾝｿｰﾙ16進2桁表示
F7BD DB41		IN	A,(F1T)		;
FDCﾄﾗｯｸ値取得
F7BF CDE8F7		CALL	COAS		;
ﾄﾗｯｸ番号ｺﾝｿｰﾙ16進2桁表示
F7C2 DB42		IN	A,(F1S)		;
FDCｾｸﾀ値取得
F7C4 CDE8F7		CALL	COAS		;
ｾｸﾀ番号ｺﾝｿｰﾙ16進2桁表示
F7C7 DB43		IN	A,(F1D)		;
FDCﾃﾞｰﾀ値取得
F7C9 CDE8F7		CALL	COAS		;
ﾃﾞｰﾀ値ｺﾝｿｰﾙ16進2桁表示
F7CC CDDEF7		CALL	CRLF		;
ｺﾝｿｰﾙ復帰改行
F7CF 3E01		LD	A,1		;
真(1)値取得
F7D1 326CF8		LD	(ERFLAG),A	;
異常ﾌﾗｸﾞ設定
F7D4 C9			RET			;
呼び出し元へ復帰
F7D5

F7D5		;	( 下位ﾆﾌﾞﾙ(ﾊﾞｲﾅﾘ)→ASCII16進数値文字変換 )
F7D5		;	入: A:ﾆﾌﾞﾙ値(下位)  出: A:ASCII16進数値文字ｺｰﾄﾞ
F7D5

F7D5 E60F	HCNV:	AND	00001111B	;
上位ﾆﾌﾞﾙ解除
F7D7 C690		ADD	A,90H		;
下位ﾆﾌﾞﾙ値(仮)取得
F7D9 27			DAA			;
9以下=9nH,10以上=0(10-n)H
F7DA CE40		ADC	A,40H		;
10以上値補正
F7DC 27			DAA			;
9以下=3nH,10以上=4(10-n+1)H
F7DD C9			RET			;
呼び出し元へ復帰
F7DE

F7DE		;	( ｺﾝｿｰﾙ復帰改行 )
F7DE

F7DE 0E0D	CRLF:	LD	C,CR		;
復帰ｺｰﾄﾞ取得
F7E0 CD40F4		CALL	CONOUT		;
ｺﾝｿｰﾙ ｶｰｿﾙ復帰
F7E3 0E0A		LD	C,LF		;
改行ｺｰﾄﾞ取得
F7E5 C340F4		JP	CONOUT		;
ｺﾝｿｰﾙ ｶｰｿﾙ改行
F7E8

F7E8		;	( Aﾚｼﾞｽﾀ値16進2桁+空白表示 )
F7E8		;	入: A:目的値
F7E8

F7E8 CDF0F7	COAS:	CALL	COA		;
Aﾚｼﾞｽﾀ値16進2桁表示
F7EB 0E20		LD	C,' '		;
空白ｺｰﾄﾞ取得
F7ED C340F4		JP	CONOUT		;
ｺﾝｿｰﾙ空白表示後呼び出し元へ復帰へ
F7F0

F7F0		;	( Aﾚｼﾞｽﾀ値16進2桁表示 )
F7F0		;	入: A:目的値
F7F0

F7F0 F5		COA:	PUSH	AF		;
Aﾚｼﾞｽﾀ値一時保存
F7F1 0F			RRCA			;
(÷2)上位ﾆﾌﾞﾙを下位ﾆﾌﾞﾙ位置へ移動(÷16)
F7F2 0F			RRCA			;
(÷4)
F7F3 0F			RRCA			;
(÷8)
F7F4 0F			RRCA			;
(÷16)
F7F5 CDD5F7		CALL	HCNV		;
上位ﾆﾌﾞﾙ値対応ASCII16進数値文字取得
F7F8 4F			LD	C,A		;
上位ﾆﾌﾞﾙ16進数値文字指定
F7F9 CD40F4		CALL	CONOUT		;
上位ﾆﾌﾞﾙ16進数値ｺﾝｿｰﾙ表示
F7FC F1			POP	AF		;
Aﾚｼﾞｽﾀ値復帰
F7FD CDD5F7		CALL	HCNV		;
下位ﾆﾌﾞﾙ値対応ASCII16進数値文字取得
F800 4F			LD	C,A		;
下位ﾆﾌﾞﾙ16進数値文字指定
F801 C340F4		JP	CONOUT		;
下位ﾆﾌﾞﾙ16進数値ｺﾝｿｰﾙ表示後呼び出し元へ復帰へ
F804

F804		;	* ﾀｲﾏ1割り込み処理 *
F804

F804 F5		T1INT:	PUSH	AF		;
Aﾚｼﾞｽﾀ:ﾌﾗｸﾞ一時保存
F805 E5			PUSH	HL		;
HLﾚｼﾞｽﾀ一時保存
F806 ED3810		IN0	A,(TXC)		;
(割り込み要求ﾌﾗｸﾞ解除処理)
F809 ED3814		IN0	A,(T1DL)	;
(割り込み要求ﾌﾗｸﾞ解除処理)
F80C 214EF8		LD	HL,T1M0		;
ﾍｯﾄﾞ ﾛｰﾄﾞ持続ﾀｲﾏ値ﾎﾟｲﾝﾀ取得
F80F 7E			LD	A,(HL)		;
ﾍｯﾄﾞ ﾛｰﾄﾞ持続ﾀｲﾏ値取得
F810 B7			OR	A		;
動作/停止検査
F811 2809		JR	Z,T1INT1	;
停止で分岐
F813		;

F813 35			DEC	(HL)		;
ﾍｯﾄﾞ ﾛｰﾄﾞ持続ﾀｲﾏ減数(-1)
F814 2006		JR	NZ,T1INT1	;
計時中で分岐
F816		;

F816 DB50		IN	A,(P1A)		;
計時完了でPPIﾎﾟｰﾄA値取得
F818 E6BF		AND	10111111B	;
ﾍｯﾄﾞ ﾛｰﾄﾞ信号ﾋﾞｯﾄ解除
F81A D350		OUT	(P1A),A		;
ﾍｯﾄﾞ ﾛｰﾄﾞ信号=L(無効)
F81C E1		T1INT1:	POP	HL		;
HLﾚｼﾞｽﾀ復帰
F81D F1			POP	AF		;
Aﾚｼﾞｽﾀ:ﾌﾗｸﾞ復帰
F81E FB			EI			;
全割り込み許可
F81F C9			RET			;
割り込みから復帰
F820

F820		;	* /INT2割り込み処理 *
F820

F820 F5		I2NT:	PUSH	AF		;
Aﾚｼﾞｽﾀ:ﾌﾗｸﾞ一時保存
F821 E5			PUSH	HL		;
HLﾚｼﾞｽﾀ一時保存
F822

F822		;	( ﾌﾟﾘﾝﾀ /ACK検査 )
F822

F822 DB52	PRN:	IN	A,(P1C)		;
PPIﾎﾟｰﾄC値取得
F824 E604		AND	00000100B	;
/ACK確認検査
F826 2805		JR	Z,FDC		;
未確認で次へ
F828		;

F828 3EFF		LD	A,-1		;
確認で真(-1)値取得
F82A 324CF8		LD	(LSTFLG),A	;
ﾌﾟﾘﾝﾀ出力可ﾌﾗｸﾞ設定(-1:可)
F82D

F82D		;	( FDC処理完了検査 )
F82D

F82D 214DF8	FDC:	LD	HL,FDCFLG	;
FDC動作中ﾌﾗｸﾞ値ﾎﾟｲﾝﾀ取得
F830 DB40		IN	A,(F1C)		;
FDC割り込みﾌﾗｸﾞ解除
F832 7E			LD	A,(HL)		;
FDC作業中ﾌﾗｸﾞ値取得
F833 3600		LD	(HL),0		;
FDC作業中ﾌﾗｸﾞ解除
F835 B7			OR	A		;
異常割り込み検査
F836 2009		JR	NZ,I2NT1	;
正常(完了)割り込みで分岐
F838

F838		;	( ｿﾌﾄｳｪｱ ﾘｾｯﾄ )
F838

F838 3EC1	RES:	LD	A,0C1H		;
(共通1:C000H:ﾊﾞﾝｸ:1000H:共通0)指定値取得
F83A ED393A		OUT0	(BAR),A		;
共通0=ROM、ROMﾓﾆﾀ用ﾒﾓﾘ設定
F83D F3			DI			;
全割り込み禁止
F83E C30000		JP	0		;
ROMﾓﾆﾀへ移行
F841		;

F841 E1		I2NT1:	POP	HL		;
HLﾚｼﾞｽﾀ復帰
F842 F1			POP	AF		;
Aﾚｼﾞｽﾀ:ﾌﾗｸﾞ復帰
F843 FB			EI			;
全割り込み許可
F844 C9			RET			;
割り込みから復帰
F845

F845		;	* その他割り込み処理 *
F845

F845 FB		IRET:	EI			;
全割り込み許可
F846 C9			RET			;
割り込みから復帰
F847

F847		;	[ 変数 ]
F847

F847		DRVTBL	DS	4		;
ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ変換ﾃｰﾌﾞﾙ
F84B		PPTSV	DS	1		;
拡張出力ﾎﾟｰﾄ値(ｺﾋﾟｰ)
F84C

F84C		WRK1	EQU	$

F84C		LSTFLG	DS	1		;
ﾌﾟﾘﾝﾀ出力可ﾌﾗｸﾞ(0=不可,-1=可)
F84D		FDCFLG	DS	1		;
FDC動作中ﾌﾗｸﾞ(0=作業無し,0以外=作業中)
F84E		T1M0	DS	1		;
ﾍｯﾄﾞ ﾛｰﾄﾞ持続2秒ﾀｲﾏ(100ms)
F84F		;

F84F		CDSKN	DS	1		;

F850		TRACK	DS	4+1		;
ﾄﾞﾗｲﾌﾞ別現ﾄﾗｯｸ番号
F855		RTRYCNT	DS	1		;
再試行ｶｳﾝﾀ
F856		;

F856		SEKDEN	DS	1		;
指定記録密度値(単密度(FM)=00000000,倍密度(MFM)=00100000)
F857		SEKDSK	DS	1		;
BDOS指定ﾃﾞｨｽｸ番号
F858		SEKSID	DS	1		;
指定面値(0=00000000,1=00010000)
F859		SEKTRK	DS	1		;
BDOS指定ﾄﾗｯｸ番号
F85A		SEKSEC	DS	1		;
BDOS指定ｾｸﾀ番号
F85B		SEKCNT	DS	2		;
指定ﾊﾞｲﾄ数/1ｾｸﾀ(転送ﾊﾞｲﾄ数)
F85D		;

F85D		HSTDEN	DS	1		;
ﾊﾞｯﾌｧ対応記録密度値(FM=00000000,MFM=00100000)
F85E		HSTDSK	DS	1		;
ﾊﾞｯﾌｧ対応ﾃﾞｨｽｸ番号
F85F		HSTSID	DS	1		;
ﾊﾞｯﾌｧ対応面値(0=00000000,1=00010000)
F860		HSTTRK	DS	1		;
ﾊﾞｯﾌｧ対応物理ﾄﾗｯｸ番号
F861		HSTSEC	DS	1		;
ﾊﾞｯﾌｧ対応物理ｾｸﾀ番号
F862		HSTCNT	DS	2		;
ﾊﾞｯﾌｧ対応ﾊﾞｲﾄ数/物理1ｾｸﾀ
F864		;

F864		SEKHST	DS	1		;
指定物理ｾｸﾀ番号
F865		HSTACT	DS	1		;
ﾊﾞｯﾌｧ有効ﾌﾗｸﾞ(0=無効,1=有効)
F866		HSTWRT	DS	1		;
ﾊﾞｯﾌｧ書き込み保留中ﾌﾗｸﾞ(0=保留無し,1=保留有り)
F867		;

F867		UNACNT	DS	1		;
未配置区画ﾚｺｰﾄﾞ数ｶｳﾝﾀ
F868		UNADSK	DS	1		;
未配置区画ﾃﾞｨｽｸ番号
F869		UNASID	DS	1		;
未配置区画面値(0=00000000,1=00010000)
F86A		UNATRK	DS	1		;
未配置区画ﾄﾗｯｸ番号
F86B		UNASEC	DS	1		;
未配置区画ｾｸﾀ番号
F86C		;

F86C		ERFLAG	DS	1		;
異常ﾌﾗｸﾞ(0=正常,1=異常)
F86D		RSFLAG	DS	1		;
必要時物理ｾｸﾀ読み込み要求ﾌﾗｸﾞ
F86E		READOP	DS	1		;
読み(1)/書き(0)処理ﾌﾗｸﾞ
F86F		WRTYPE	DS	1		;
書き込み種別番号
F870		DMAADR	DS	2		;
DMA(転送)基準ｱﾄﾞﾚｽ
F872		WRK2	EQU	$

F872

F872			DS	16		;
ｽﾀｯｸ領域
F882		STACK	EQU	$		;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期ｱﾄﾞﾚｽ
F882

F882		CSV0	DS	64		;
ﾄﾞﾗｲﾌﾞ0: ﾃﾞｨﾚｸﾄﾘ用ﾚｺｰﾄﾞ/ﾁｪｯｸｻﾑ ﾍﾞｸﾀ
F8C2		ALV0	DS	76		;
ﾄﾞﾗｲﾌﾞ0: 配置区画ﾍﾞｸﾀ
F90E		CSV1	DS	64		;
ﾄﾞﾗｲﾌﾞ1: ﾃﾞｨﾚｸﾄﾘ用ﾚｺｰﾄﾞ/ﾁｪｯｸｻﾑ ﾍﾞｸﾀ
F94E		ALV1	DS	76		;
ﾄﾞﾗｲﾌﾞ1: 配置区画ﾍﾞｸﾀ
F99A		CSV2	DS	64		;
ﾄﾞﾗｲﾌﾞ2: ﾃﾞｨﾚｸﾄﾘ用ﾚｺｰﾄﾞ/ﾁｪｯｸｻﾑ ﾍﾞｸﾀ
F9DA		ALV2	DS	76		;
ﾄﾞﾗｲﾌﾞ2: 配置区画ﾍﾞｸﾀ
FA26		CSV3	DS	64		;
ﾄﾞﾗｲﾌﾞ3: ﾃﾞｨﾚｸﾄﾘ用ﾚｺｰﾄﾞ/ﾁｪｯｸｻﾑ ﾍﾞｸﾀ
FA66		ALV3	DS	76		;
ﾄﾞﾗｲﾌﾞ3: 配置区画ﾍﾞｸﾀ
FAB2		CSV4	EQU	$		;
ﾄﾞﾗｲﾌﾞ4: ﾃﾞｨﾚｸﾄﾘ用ﾚｺｰﾄﾞ/ﾁｪｯｸｻﾑ ﾍﾞｸﾀ(RAMﾃﾞｨｽｸ:無し)
FAB2		ALV4	DS	76		;
ﾄﾞﾗｲﾌﾞ4: 配置区画ﾍﾞｸﾀ
FAFE		;

FAFE		DIRBF	DS	128		;
ﾃﾞｨﾚｸﾄﾘ用ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ
FB7E		HSTBUF	DS	1024		;
物理ｾｸﾀ ﾃﾞｰﾀ ﾊﾞｯﾌｧ
FF7E

FF7E			END


1.3 CCP ｿｰｽ

0000		;**************************

0000		;*			  *

0000		;*  CP/M-80 Ver 2.2  CCP  *

0000		;*			  *

0000		;**************************

0000

0000			TITLE	CCP

0000

0000		;	* CP/Mﾒﾓﾘ配置定義 *
0000

003E		MSIZE	EQU	62		;
CP/Mﾒﾓﾘ容量
0000

A800		BIAS	EQU	(MSIZE-20)*1024	;

DC00		CCP	EQU	BIAS+3400H	;
CCP(Console Command Processor)先頭ｱﾄﾞﾚｽ
E406		BDOS	EQU	CCP+0806H	;
BDOS(Basic Disk Operating System)先頭ｱﾄﾞﾚｽ
F200		BIOS	EQU	CCP+1600H	;
BIOS(Basic Input/Output System)先頭ｱﾄﾞﾚｽ
0000

0000		;	* 制御ｺｰﾄﾞ定義 *
0000

0003		C_C	EQU	03H		;
        行先頭時ﾘﾌﾞｰﾄ
0005		C_E	EQU	05H		;
        物理行ｶｰｿﾙ復帰改行
0008		BS	EQU	08H		;
Backspace	ｶｰｿﾙ1文字後退
0009		TAB	EQU	09H		;
Tab		ﾀﾌﾞ
000A		LF	EQU	0AH		;
        行終了(ｶｰｿﾙ改行)
000D		CR	EQU	0DH		;
Enter		行終了(ｶｰｿﾙ復帰)
0010		C_P	EQU	10H		;
        印字ON/OFF
0012		C_R	EQU	12H		;
        新規行で再表示
0013		C_S	EQU	13H		;
        表示一時停止/解除
0015		C_U	EQU	15H		;
        現在行削除
0018		CAN	EQU	18H		;
CAN		行取り消し
001A		C_Z	EQU	1AH		;
        ﾌｧｲﾙ終端(EOF)
007F		DEL	EQU	7FH		;
Delete		文字削除
0000

0000		;	* CP/Mｼｽﾃﾑ ﾊﾟﾗﾒｰﾀ領域定義 *
0000

0000		BOOT	EQU	0000H		;
ﾌﾞｰﾄ開始分岐先頭ﾄﾞﾚｽ
0003		IOBYTE	EQU	0003H		;
I/Oﾊﾞｲﾄ値ｱﾄﾞﾚｽ
0004		CDISK	EQU	0004H		;
現使用者番号:現選択ﾄﾞﾗｲﾌﾞ番号値ｱﾄﾞﾚｽ
0005		BDENT	EQU	0005H		;
BDOS開始分岐先頭ﾄﾞﾚｽ
005C		FCB	EQU	005CH		;
ﾌｧｲﾙ制御領域(File Control Block)先頭ｱﾄﾞﾚｽ
006C		FCB1	EQU	006CH		;
第2FCB先頭ｱﾄﾞﾚｽ
0080		TBF	EQU	0080H		;
標準転送ﾊﾞｯﾌｧ先頭ｱﾄﾞﾚｽ
0100		TPA	EQU	0100H		;
一時ﾌﾟﾛｸﾞﾗﾑ領域(Transient Program Area)先頭ｱﾄﾞﾚｽ
0000

0000		;	* 機械語命令ｺｰﾄﾞ定義 *
0000

76F3		DIHLT	EQU	76F3H		;
DI,HALT命令ｺｰﾄﾞ(完全CPU停止)
0000

0000		;	[ CCP ]

0000

0000			ORG	CCP		;
CCP開始ｱﾄﾞﾚｽ
DC00

DC00 C35CDF	CCPENT:	JP	MAIN1		;
通常CCP開始へ
DC03 C358DF	CCPETI:	JP	MAIN		;
初回CCP開始へ
06

DC06		;	* 命令行ﾊﾞｯﾌｧ *
DC06

DC06 7F		CBFMAX:	DB	128-1		;
命令行ﾊﾞｯﾌｧ最大容量(ﾊﾞｲﾄ数)
DC07 00		CBFCNT:	DB	0		;
命令行ﾊﾞｯﾌｧ内入力文字ﾊﾞｲﾄ数
DC08 00000000	CBF:	DB	0,0,0,0,0,0,0,0	;
命令行内容
DC0C 00000000

DC10 00000000		DB	0,0,0,0,0,0,0,0	;
(注:この容量は
DC14 00000000

DC18 00000000		DB	0,0,0,0,0,0,0,0	;
最終入力ﾊﾞｲﾄの次に終了子を付加するため
DC1C 00000000

DC20 00000000		DB	0,0,0,0,0,0,0,0	;
CBFMAX値+1ﾊﾞｲﾄの容量が必要)
DC24 00000000

DC28 00000000		DB	0,0,0,0,0,0,0,0	;

DC2C 00000000

DC30 00000000		DB	0,0,0,0,0,0,0,0	;

DC34 00000000

DC38 00000000		DB	0,0,0,0,0,0,0,0	;

DC3C 00000000

DC40 00000000		DB	0,0,0,0,0,0,0,0	;

DC44 00000000

DC48 00000000		DB	0,0,0,0,0,0,0,0	;

DC4C 00000000

DC50 00000000		DB	0,0,0,0,0,0,0,0	;

DC54 00000000

DC58 00000000		DB	0,0,0,0,0,0,0,0	;

DC5C 00000000

DC60 00000000		DB	0,0,0,0,0,0,0,0	;

DC64 00000000

DC68 00000000		DB	0,0,0,0,0,0,0,0	;

DC6C 00000000

DC70 00000000		DB	0,0,0,0,0,0,0,0	;

DC74 00000000

DC78 00000000		DB	0,0,0,0,0,0,0,0	;

DC7C 00000000

DC80 00000000		DB	0,0,0,0,0,0,0,0	;

DC84 00000000

DC88 0000	CBFAD1:	DW	0		;
命令行解析先頭ﾎﾟｲﾝﾀ(次回先頭)
DC8A 0000	CBFAD2:	DW	0		;

DC8C

DC8C		;	( 1ﾊﾞｲﾄ ｺﾝｿｰﾙ出力 )
DC8C

DC8C 5F		COCHR:	LD	E,A		;
対応文字ｺｰﾄﾞ ﾊﾞｲﾄ指定
DC8D 0E02		LD	C,2		;
ｺﾝｿｰﾙ出力BDOS機能指定
DC8F C30500		JP	BDENT		;
対応文字ｺﾝｿｰﾙ出力(BDOS)後呼び出し元へ復帰へ
DC92

DC92		;	( BCﾚｼﾞｽﾀ保存1ﾊﾞｲﾄ ｺﾝｿｰﾙ出力 )
DC92

DC92 C5		COCHRS:	PUSH	BC		;
(ﾌｧｲﾙ名ｵﾌｾｯﾄ):対応ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ先頭ｵﾌｾｯﾄ一時保存
DC93 CD8CDC		CALL	COCHR		;
1ﾊﾞｲﾄ ｺﾝｿｰﾙ出力
DC96 C1			POP	BC		;
(ﾌｧｲﾙ名ｵﾌｾｯﾄ):対応ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ先頭ｵﾌｾｯﾄ復帰
DC97 C9			RET			;
呼び出し元へ復帰
DC98

DC98		;	( ｺﾝｿｰﾙ復帰改行 )
DC98

DC98 3E0D	CRLF:	LD	A,CR		;
復帰ｺｰﾄﾞ取得
DC9A CD92DC		CALL	COCHRS		;
復帰ｺｰﾄﾞ ｺﾝｿｰﾙ出力
DC9D 3E0A		LD	A,LF		;
改行ｺｰﾄﾞ取得
DC9F C392DC		JP	COCHRS		;
改行ｺｰﾄﾞ ｺﾝｿｰﾙ出力後呼び出し元へ復帰へ
DCA2

DCA2		;	( ｺﾝｿｰﾙ空白1文字表示 )
DCA2

DCA2 3E20	COSP:	LD	A,' '		;
空白ｺｰﾄﾞ取得
DCA4 C392DC		JP	COCHRS		;
ｺﾝｿｰﾙ空白表示後呼び出し元へ復帰へ
DCA7

DCA7		;	( 新規行でｺﾝｿｰﾙ文字列表示 )
DCA7		;	入: BC:文字列基準ﾎﾟｲﾝﾀ
DCA7

DCA7 C5		NLMGOT:	PUSH	BC		;
対応文字列基準ﾎﾟｲﾝﾀ一時保存
DCA8 CD98DC		CALL	CRLF		;
ｺﾝｿｰﾙ復帰改行
DCAB E1			POP	HL		;
対応文字列基準ﾎﾟｲﾝﾀ復帰
DCAC

DCAC		;	( ｺﾝｿｰﾙ文字列表示 )
DCAC		;	入: HL:文字列基準ﾎﾟｲﾝﾀ
DCAC

DCAC 7E		MSGOUT:	LD	A,(HL)		;
対応1ﾊﾞｲﾄ取得
DCAD B7			OR	A		;
文字列終了子か検査
DCAE C8			RET	Z		;
終了子で呼び出し元へ復帰
DCAF		;

DCAF 23			INC	HL		;
文字列ﾎﾟｲﾝﾀ進行(+1)
DCB0 E5			PUSH	HL		;
文字列ﾎﾟｲﾝﾀ一時保存
DCB1 CD8CDC		CALL	COCHR		;
対応文字ｺﾝｿｰﾙ表示
DCB4 E1			POP	HL		;
文字列ﾎﾟｲﾝﾀ復帰
DCB5 C3ACDC		JP	MSGOUT		;
終了子まで表示出力継続
DCB8

DCB8		;	( 全ﾃﾞｨｽｸ ﾘｾｯﾄ )
DCB8

DCB8 0E0D	RESDSK:	LD	C,13		;
全ﾃﾞｨｽｸ ﾘｾｯﾄBDOS機能指定
DCBA C30500		JP	BDENT		;
全ﾃﾞｨｽｸ ﾘｾｯﾄ(BDOS)後呼び出し元へ復帰へ
DCBD

DCBD		;	( ﾃﾞｨｽｸ選択 )
DCBD		;	入: A:ﾃﾞｨｽｸ番号
DCBD

DCBD 5F		SELDSK:	LD	E,A		;
選択ﾃﾞｨｽｸ番号指定
DCBE 0E0E		LD	C,14		;
ﾃﾞｨｽｸ選択BDOS機能指定
DCC0 C30500		JP	BDENT		;
対応ﾃﾞｨｽｸ選択(BDOS)後呼び出し元へ復帰へ
DCC3

DCC3		;	( BDOS機能実行後復帰ｺｰﾄﾞ(0/-1)検査 )
DCC3		;	入: C:BDOS機能番号 DE:FCBﾎﾟｲﾝﾀ  出: ZF:成功(0)/失敗(1)ﾌﾗｸﾞ
DCC3

DCC3 CD0500	BDST:	CALL	BDENT		;
対応BDOS機能実行
DCC6 32EEE3		LD	(BDRTPR),A	;
復帰ｺｰﾄﾞ保存
DCC9 3C			INC	A		;
処理成功(0)/失敗(-1)検査
DCCA C9			RET			;
成否ﾌﾗｸﾞ(ZF)と共に呼び出し元へ復帰
DCCB

DCCB		;	( ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ) )
DCCB

DCCB 0E0F	OPEN:	LD	C,15		;
ﾌｧｲﾙ開始BDOS機能指定
DCCD C3C3DC		JP	BDST		;
ﾌｧｲﾙ開始後呼び出し元へ復帰へ
DCD0

DCD0		;	( 命令用FCBでﾌｧｲﾙ開始(ｵｰﾌﾟﾝ) )
DCD0

DCD0 AF		OPENF:	XOR	A		;
0値取得
DCD1 32EDE3		LD	(CFCBCR),A	;
命令用FCBﾚｺｰﾄﾞ位置(CR)初期化(先頭)
DCD4 11CDE3		LD	DE,CFCB		;
命令用FCB基準ﾎﾟｲﾝﾀ取得
DCD7 C3CBDC		JP	OPEN		;
命令用FCBのﾌｧｲﾙ開始処理後呼び出し元へ復帰へ
DCDA

DCDA		;	( ﾌｧｲﾙ閉鎖(ｸﾛｰｽﾞ) )
DCDA

DCDA 0E10	CLS:	LD	C,16		;
ﾌｧｲﾙ閉鎖BDOS機能指定
DCDC C3C3DC		JP	BDST		;
ﾌｧｲﾙ閉鎖後呼び出し元へ復帰へ
DCDF

DCDF		;	( 初回ﾌｧｲﾙ検索 )
DCDF

DCDF 0E11	FSRCH:	LD	C,17		;
初回ﾌｧｲﾙ検索BDOS機能指定
DCE1 C3C3DC		JP	BDST		;
初回ﾌｧｲﾙ検索後呼び出し元へ復帰へ
DCE4

DCE4		;	( 次回ﾌｧｲﾙ検索 )
DCE4

DCE4 0E12	NSRCH:	LD	C,18		;
次回ﾌｧｲﾙ検索BDOS機能指定
DCE6 C3C3DC		JP	BDST		;
次回ﾌｧｲﾙ検索後呼び出し元へ復帰へ
DCE9

DCE9		;	( 命令用FCBで初回ﾌｧｲﾙ検索 )
DCE9

DCE9 11CDE3	FSRCHF:	LD	DE,CFCB		;
命令用FCB基準ﾎﾟｲﾝﾀ取得
DCEC C3DFDC		JP	FSRCH		;
命令用FCBのﾌｧｲﾙ初回検索後呼び出し元へ復帰へ
DCEF

DCEF		;	( ﾌｧｲﾙ削除 )
DCEF

DCEF 0E13	DELETE:	LD	C,19		;
ﾌｧｲﾙ削除BDOS機能指定
DCF1 C30500		JP	BDENT		;
ﾌｧｲﾙ削除後呼び出し元へ復帰へ
DCF4

DCF4		;	( BDOS機能実行後復帰ｺｰﾄﾞ(0/0以外)検査 )
DCF4		;	入: C:BDOS機能番号 DE:FCBﾎﾟｲﾝﾀ  出: ZF:成功(0)/失敗(-1)ﾌﾗｸﾞ
DCF4

DCF4 CD0500	BDST1:	CALL	BDENT		;
対応BDOS機能実行
DCF7 B7			OR	A		;
処理成功(0)/失敗(0以外)検査
DCF8 C9			RET			;
成否ﾌﾗｸﾞ(ZF)と共に呼び出し元へ復帰
DCF9

DCF9		;	( 順次ﾌｧｲﾙ読み込み )
DCF9

DCF9 0E14	SREAD:	LD	C,20		;
順次ﾌｧｲﾙ読み込みBDOS機能指定
DCFB C3F4DC		JP	BDST1		;
順次ﾌｧｲﾙ読み込み後呼び出し元へ復帰へ
DCFE

DCFE		;	( 命令用FCBで順次ﾌｧｲﾙ読み込み )
DCFE

DCFE 11CDE3	SREADF:	LD	DE,CFCB		;
命令用FCB基準ﾎﾟｲﾝﾀ取得
DD01 C3F9DC		JP	SREAD		;
命令用FCB順次ﾌｧｲﾙ読み込み後呼び出し元へ復帰へ
DD04

DD04		;	( 順次ﾌｧｲﾙ書き込み )
DD04

DD04 0E15	SWRITE:	LD	C,21		;
順次ﾌｧｲﾙ書き込みBDOS機能指定
DD06 C3F4DC		JP	BDST1		;
順次ﾌｧｲﾙ書き込み後呼び出し元へ復帰へ
DD09

DD09		;	( ﾌｧｲﾙ作成 )
DD09

DD09 0E16	MAKE:	LD	C,22		;
ﾌｧｲﾙ作成BDOS機能指定
DD0B C3C3DC		JP	BDST		;
ﾌｧｲﾙ作成後呼び出し元へ復帰へ
DD0E

DD0E		;	( ﾌｧｲﾙ名変更 )
DD0E

DD0E 0E17	RENAME:	LD	C,23		;
ﾌｧｲﾙ名変更BDOS機能指定
DD10 C30500		JP	BDENT		;
ﾌｧｲﾙ名変更後呼び出し元へ復帰へ
DD13

DD13		;	( 使用者番号取得 )
DD13

DD13 1EFF	GUSERN:	LD	E,0FFH		;
使用者番号取得機能指定
DD15

DD15		;	( 使用者番号設定 )
DD15

DD15 0E20	SUSERN:	LD	C,32		;
使用者番号取得/設定BDOS機能指定
DD17 C30500		JP	BDENT		;
使用者番号取得/設定後呼び出し元へ復帰へ
DD1A

DD1A		;	( 使用者番号:選択ﾃﾞｨｽｸ番号値設定 )
DD1A

DD1A CD13DD	SETUD:	CALL	GUSERN		;
使用者番号取得
DD1D 87			ADD	A,A		;
(×2)使用者番号ﾋﾞｯﾄ(3～0)をﾋﾞｯﾄ7～4へ移動(×16)
DD1E 87			ADD	A,A		;
(×4)
DD1F 87			ADD	A,A		;
(×8)
DD20 87			ADD	A,A		;
(×16)
DD21 21EFE3		LD	HL,LOGDSK	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号値ﾎﾟｲﾝﾀ取得
DD24 B6			OR	(HL)		;
使用者番号:選択ﾃﾞｨｽｸ番号合成値取得
DD25 320400		LD	(CDISK),A	;
使用者番号:選択ﾃﾞｨｽｸ番号値更新保存

DD28 C9			RET			;
呼び出し元へ復帰
DD29

DD29		;	( 選択ﾃﾞｨｽｸ番号値設定 )
DD29

DD29 3AEFE3	SETDN:	LD	A,(LOGDSK)	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号取得
DD2C 320400		LD	(CDISK),A	;
選択ﾃﾞｨｽｸ番号値更新保存
DD2F C9			RET			;
呼び出し元へ復帰
DD30

DD30		;	( 小文字→大文字変換 )
DD30

DD30 FE61	CVS2L:	CP	'a'		;
小文字下範囲検査
DD32 D8			RET	C		;
下範囲外で呼び出し元へ復帰
DD33		;

DD33 FE7B		CP	'z'+1		;
小文字上範囲検査
DD35 D0			RET	NC		;
上範囲外で呼び出し元へ復帰
DD36		;

DD36 E65F		AND	01011111B	;
大文字へ変換
DD38 C9			RET			;
呼び出し元へ復帰
DD39

DD39		;	( 命令行取得 )
DD39

DD39 3AABE3	GCMDL:	LD	A,(SUBFLG)	;
自動処理(SUBMIT)ﾌﾗｸﾞ
DD3C B7			OR	A		;
自動処理(SUBMIT)中か検査
DD3D CA96DD		JP	Z,GCMDL1	;
通常処理で分岐
DD40

DD40		;	(( 自動処理(SUBMIT) ))
DD40

DD40 3AEFE3	SUBM:	LD	A,(LOGDSK)	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号取得
DD43 B7			OR	A		;
Aﾄﾞﾗｲﾌﾞか検査
DD44 3E00		LD	A,0		;
Aﾄﾞﾗｲﾌﾞ値指定
DD46 C4BDDC		CALL	NZ,SELDSK	;
Aﾄﾞﾗｲﾌﾞ以外でAﾄﾞﾗｲﾌﾞ選択
DD49 11ACE3		LD	DE,SFCB		;
自動処理(SUBMIT)用FCB基準ﾎﾟｲﾝﾀ取得
DD4C CDCBDC		CALL	OPEN		;
自動処理用ﾌｧｲﾙ開始処理
DD4F CA96DD		JP	Z,GCMDL1	;
対応ﾌｧｲﾙ無しで分岐
DD52		;

DD52 3ABBE3		LD	A,(SFCBRC)	;
ﾚｺｰﾄﾞ数値取得
DD55 3D			DEC	A		;
最終ﾚｺｰﾄﾞ番号取得
DD56 32CCE3		LD	(SFCBCR),A	;
最終ﾚｺｰﾄﾞ位置指定
DD59 11ACE3		LD	DE,SFCB		;
自動処理(SUBMIT)用FCB基準ﾎﾟｲﾝﾀ取得
DD5C CDF9DC		CALL	SREAD		;
最終ﾚｺｰﾄﾞ読み込み
DD5F C296DD		JP	NZ,GCMDL1	;
対応ﾚｺｰﾄﾞ無しで分岐
DD62		;

DD62 1107DC		LD	DE,CBFCNT	;
命令行ﾊﾞｲﾄ数位置ﾎﾟｲﾝﾀ取得(転送先)
DD65 218000		LD	HL,TBF		;
標準転送ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ値取得(転送元)
DD68 0680		LD	B,128		;
転送ﾊﾞｲﾄ数指定
DD6A CD42E0		CALL	MVIR		;
命令行ﾊﾞｯﾌｧへｺﾋﾟｰ
DD6D 21BAE3		LD	HL,SFCBS2	;
自動処理(SUBMIT)用FCBのS2値ﾎﾟｲﾝﾀ取得
DD70 3600		LD	(HL),0		;
S2値初期化
DD72 23			INC	HL		;
自動処理(SUBMIT)用FCBのﾚｺｰﾄﾞ数(RC)値ﾎﾟｲﾝﾀ取得
DD73 35			DEC	(HL)		;
使用ﾚｺｰﾄﾞ数減数(-1)
DD74 11ACE3		LD	DE,SFCB		;
自動処理(SUBMIT)用FCB基準ﾎﾟｲﾝﾀ取得
DD77 CDDADC		CALL	CLS		;
自動処理(SUBMIT)用ﾌｧｲﾙ閉鎖
DD7A CA96DD		JP	Z,GCMDL1	;
対応ﾌｧｲﾙ無しで分岐
DD7D		;

DD7D 3AEFE3		LD	A,(LOGDSK)	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号取得
DD80 B7			OR	A		;
Aﾄﾞﾗｲﾌﾞか検査
DD81 C4BDDC		CALL	NZ,SELDSK	;
Aﾄﾞﾗｲﾌﾞ以外で対応ﾄﾞﾗｲﾌﾞ選択(復帰)
DD84 2108DC		LD	HL,CBF		;
命令行内容基準ﾎﾟｲﾝﾀ取得
DD87 CDACDC		CALL	MSGOUT		;
取得命令行の内容表示
DD8A CDC2DD		CALL	BREAK		;
打ち切り検査
DD8D CAA7DD		JP	Z,GCMDL2	;
継続(ｺﾝｿｰﾙ入力無し)で分岐
DD90		;

DD90 CDDDDD		CALL	SUBCLR		;
自動処理(SUBMIT)解除
DD93 C382DF		JP	MAIN2		;
通常(命令行入力開始)処理へ
DD96

DD96		;	(( 通常時ｺﾝｿｰﾙ行入力処理 ))
DD96

DD96 CDDDDD	GCMDL1:	CALL	SUBCLR		;
自動処理(SUBMIT)解除
DD99 CD1ADD		CALL	SETUD		;
使用者番号:選択ﾃﾞｨｽｸ番号値設定
DD9C 0E0A		LD	C,10		;
ｺﾝｿｰﾙ文字列入力BDOS機能指定
DD9E 1106DC		LD	DE,CBFMAX	;
BDOS用命令行ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
DDA1 CD0500		CALL	BDENT		;
ｺﾝｿｰﾙ文字列入力
DDA4 CD29DD		CALL	SETDN		;
選択ﾃﾞｨｽｸ番号値設定
DDA7

DDA7		;	(( 共通処理 ))
DDA7

DDA7 2107DC	GCMDL2:	LD	HL,CBFCNT	;
命令行ﾊﾞｲﾄ数位置ﾎﾟｲﾝﾀ取得
DDAA 46			LD	B,(HL)		;
命令行ﾊﾞｲﾄ数取得
DDAB 23		GCMDL3:	INC	HL		;
命令行ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ進行(+1)
DDAC 78			LD	A,B		;
命令行ﾊﾞｲﾄ数ｶｳﾝﾀ値取得
DDAD B7			OR	A		;
完了検査
DDAE CABADD		JP	Z,GCMDL4	;
ﾊﾞｲﾄ数分完了で分岐
DDB1		;

DDB1 7E			LD	A,(HL)		;
対応ﾊﾞｲﾄ取得
DDB2 CD30DD		CALL	CVS2L		;
小文字→大文字変換
DDB5 77			LD	(HL),A		;
変換後ﾊﾞｲﾄ書き戻し
DDB6 05			DEC	B		;
命令行ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
DDB7 C3ABDD		JP	GCMDL3		;
継続へ
DDBA		;

DDBA 77		GCMDL4:	LD	(HL),A		;
行終端に終了子(0)設定
DDBB 2108DC		LD	HL,CBF		;
命令行内容基準ﾎﾟｲﾝﾀ取得
DDBE 2288DC		LD	(CBFAD1),HL	;
命令行基準ﾎﾟｲﾝﾀ保存
DDC1 C9			RET			;
呼び出し元へ復帰
DDC2

DDC2		;	( 打ち切り検査 )
DDC2		;	出: ZF:ｺﾝｿｰﾙ入力有(0)/無(1)ﾌﾗｸﾞ
DDC2

DDC2 0E0B	BREAK:	LD	C,11		;
ｺﾝｿｰﾙ入力状態取得BDOS機能指定
DDC4 CD0500		CALL	BDENT		;
ｺﾝｿｰﾙ入力状態取得(BDOS)
DDC7 B7			OR	A		;
ｺﾝｿｰﾙ入力有無検査
DDC8 C8			RET	Z		;
無しで呼び出し元へ復帰
DDC9		;

DDC9 0E01		LD	C,1		;
ｺﾝｿｰﾙ入力BODS機能指定
DDCB CD0500		CALL	BDENT		;
ｺﾝｿｰﾙ ﾊﾞｲﾄ入力(BDOS)
DDCE B7			OR	A		;
入力有りﾌﾗｸﾞ(NZ)設定
DDCF C9			RET			;
呼び出し元へ復帰
DDD0

DDD0		;	( 選択ﾃﾞｨｽｸ番号取得 )
DDD0

DDD0 0E19	GSLDRN:	LD	C,25		;
ﾃﾞｨｽｸ番号取得BDOS機能指定
DDD2 C30500		JP	BDENT		;
ﾃﾞｨｽｸ番号取得(BDOS)後呼び出し元へ復帰へ
DDD5

DDD5		;	( 標準DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ設定 )
DDD5

DDD5 118000	STNDMA:	LD	DE,TBF		;
標準転送ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ値取得
DDD8

DDD8		;	( DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ設定 )
DDD8

DDD8 0E1A	SETDMA:	LD	C,26		;
DMAｱﾄﾞﾚｽ設定BDOS機能指定
DDDA C30500		JP	BDENT		;
DMAｱﾄﾞﾚｽ設定(BDOS)後呼び出し元へ復帰へ
DDDD

DDDD		;	( 自動処理(SUBMIT)解除 )
DDDD

DDDD 21ABE3	SUBCLR:	LD	HL,SUBFLG	;
自動処理(SUBMIT)ﾌﾗｸﾞ値ﾎﾟｲﾝﾀ取得
DDE0 7E			LD	A,(HL)		;
自動処理(SUBMIT)ﾌﾗｸﾞ値取得
DDE1 B7			OR	A		;
自動処理/通常処理検査
DDE2 C8			RET	Z		;
既に通常処理で呼び出し元へ復帰
DDE3		;

DDE3 3600		LD	(HL),0		;
自動処理(SUBMIT)ﾌﾗｸﾞ解除(通常処理設定)
DDE5 AF			XOR	A		;
Aﾄﾞﾗｲﾌﾞ指定
DDE6 CDBDDC		CALL	SELDSK		;
Aﾄﾞﾗｲﾌﾞ選択
DDE9 11ACE3		LD	DE,SFCB		;
自動処理(SUBMIT)用FCB基準ﾎﾟｲﾝﾀ取得
DDEC CDEFDC		CALL	DELETE		;
自動処理(SUBMIT)用ﾌｧｲﾙ削除
DDEF 3AEFE3		LD	A,(LOGDSK)	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号取得
DDF2 C3BDDC		JP	SELDSK		;
対応ﾄﾞﾗｲﾌﾞ選択(復帰)後呼び出し元へ復帰へ
DDF5

DDF5		;	( 製品ｼﾘｱﾙ番号検査 )
DDF5

DDF5 1128DF	SERCK:	LD	DE,SERLNO	;
CCP内製品ｼﾘｱﾙ番号基準ﾎﾟｲﾝﾀ取得
DDF8 2100E4		LD	HL,BDOS-6	;
BDOS内製品ｼﾘｱﾙ番号基準ﾎﾟｲﾝﾀ取得
DDFB 0606		LD	B,6		;
検査ﾊﾞｲﾄ数ｶｳﾝﾀ初期化
DDFD 1A		SERCK1:	LD	A,(DE)		;
対応CCP内製品ｼﾘｱﾙ番号ﾊﾞｲﾄ取得
DDFE BE			CP	(HL)		;
BDOS内対応ﾊﾞｲﾄと比較
DDFF C2CFDF		JP	NZ,STOP		;
不一致で停止へ分岐
DE02		;

DE02 13			INC	DE		;
CCP内製品ｼﾘｱﾙ番号ﾎﾟｲﾝﾀ進行(+1)
DE03 23			INC	HL		;
BDOS内製品ｼﾘｱﾙ番号ﾎﾟｲﾝﾀ進行(+1)
DE04 05			DEC	B		;
検査ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
DE05 C2FDDD		JP	NZ,SERCK1	;
検査ﾊﾞｲﾄ数分継続へ
DE08		;

DE08 C9			RET			;
呼び出し元へ復帰
DE09

DE09		;	( 命令行異常警告表示 )
DE09

DE09 CD98DC	CMERR:	CALL	CRLF		;
ｺﾝｿｰﾙ復帰改行
DE0C 2A8ADC		LD	HL,(CBFAD2)	;
命令行有効文字先頭ﾎﾟｲﾝﾀ取得
DE0F 7E		CMERR1:	LD	A,(HL)		;
対応文字ﾊﾞｲﾄ取得
DE10 FE20		CP	' '		;
分離子か検査
DE12 CA22DE		JP	Z,CMERR2	;
分離子で分岐
DE15		;

DE15 B7			OR	A		;
終了子か検査
DE16 CA22DE		JP	Z,CMERR2	;
終了子で分岐
DE19		;

DE19 E5			PUSH	HL		;
命令行ﾎﾟｲﾝﾀ一時保存
DE1A CD8CDC		CALL	COCHR		;
対応文字ｺﾝｿｰﾙ表示
DE1D E1			POP	HL		;
命令行ﾎﾟｲﾝﾀ復帰
DE1E 23			INC	HL		;
命令行ﾎﾟｲﾝﾀ進行(+1)
DE1F C30FDE		JP	CMERR1		;
分離子か終了子まで継続へ
DE22		;

DE22 3E3F	CMERR2:	LD	A,'?'		;
疑問符文字ｺｰﾄﾞ取得
DE24 CD8CDC		CALL	COCHR		;
疑問符ｺﾝｿｰﾙ表示
DE27 CD98DC		CALL	CRLF		;
ｺﾝｿｰﾙ復帰改行
DE2A CDDDDD		CALL	SUBCLR		;
自動処理(SUBMIT)解除
DE2D C382DF		JP	MAIN2		;
通常(命令行入力開始)処理へ
DE30

DE30		;	( 有効/無効文字検査 )
DE30		;	入: DE:命令行文字列ﾎﾟｲﾝﾀ  出: ZF:有効(0)/無効(1)ﾌﾗｸﾞ
DE30

DE30 1A		CHRCHK:	LD	A,(DE)		;
対応文字ﾊﾞｲﾄ取得
DE31 B7			OR	A		;
終了子検査
DE32 C8			RET	Z		;
終了子で呼び出し元へ復帰
DE33 FE20		CP	' '		;
分離子(空白)検査
DE35 DA09DE		JP	C,CMERR		;
制御ｺｰﾄﾞで命令行異常表示後再入力処理へ
DE38		;

DE38 C8			RET	Z		;
空白で呼び出し元へ復帰
DE39 FE3D		CP	'='		;
接続子(=)検査
DE3B C8			RET	Z		;
'='で呼び出し元へ復帰
DE3C FE5F		CP	'_'		;
接続子(_)検査
DE3E C8			RET	Z		;
'_'で呼び出し元へ復帰
DE3F FE2E		CP	'.'		;
接続子(.)検査
DE41 C8			RET	Z		;
'.'で呼び出し元へ復帰
DE42 FE3A		CP	':'		;
接続子(:)検査
DE44 C8			RET	Z		;
':'で呼び出し元へ復帰
DE45 FE3B		CP	';'		;
接続子(;)検査
DE47 C8			RET	Z		;
';'で呼び出し元へ復帰
DE48 FE3C		CP	'<'		;
接続子(<)検査
DE4A C8			RET	Z		;
'<'で呼び出し元へ復帰
DE4B FE3E		CP	'>'		;
接続子(>)検査
DE4D C8			RET	Z		;
'>'で呼び出し元へ復帰
DE4E		;

DE4E C9			RET			;
その他で呼び出し元へ復帰
DE4F

DE4F		;	( 命令行有効文字先頭ﾎﾟｲﾝﾀ取得 )
DE4F		;	入: DE:命令行文字列ﾎﾟｲﾝﾀ  出: DE:命令行有効文字先頭ﾎﾟｲﾝﾀ
DE4F

DE4F 1A		SKPSP:	LD	A,(DE)		;
対応文字ﾊﾞｲﾄ取得
DE50 B7			OR	A		;
終了子か検査
DE51 C8			RET	Z		;
終了子で呼び出し元へ復帰
DE52		;

DE52 FE20		CP	' '		;
空白(ｽﾍﾟｰｽ)検査
DE54 C0			RET	NZ		;
空白以外で呼び出し元へ復帰
DE55		;

DE55 13			INC	DE		;
命令行文字列ﾎﾟｲﾝﾀ進行(+1)
DE56 C34FDE		JP	SKPSP		;
有効文字か終了子まで継続へ
DE59

DE59		;	( HL=HL+A )
DE59

DE59 85		ADDHLA:	ADD	A,L		;
下位ﾊﾞｲﾄ値加算
DE5A 6F			LD	L,A		;
加算後下位ﾊﾞｲﾄ値保存(位置復帰)
DE5B D0			RET	NC		;
下位ﾊﾞｲﾄからのｷｬﾘｰ無しで呼び出し元へ復帰
DE5C		;

DE5C 23			INC	HL		;
ｷｬﾘｰ有りで上位ﾊﾞｲﾄに1加算
DE5D C9			RET			;
呼び出し元へ復帰
DE5E

DE5E		;	( 命令行からFCBﾌｧｲﾙ名形式変換/設定 )
DE5E		;	出: ZF:全一致(?)有(0)/無(1)ﾌﾗｸﾞ A:全一致(?)数
DE5E

DE5E 3E00	FN2FB:	LD	A,0		;
命令用FCB先頭(DR)位置指定
DE60		;

DE60 21CDE3	FN2FB1:	LD	HL,CFCB		;
命令用FCB基準ﾎﾟｲﾝﾀ取得
DE63 CD59DE		CALL	ADDHLA		;
命令用FCB対応先頭位置ﾎﾟｲﾝﾀ取得
DE66 E5			PUSH	HL		;
命令用FCB対応先頭位置ﾎﾟｲﾝﾀ一時保存
DE67 E5			PUSH	HL		;
命令用FCB対応先頭位置ﾎﾟｲﾝﾀ一時保存
DE68 AF			XOR	A		;
現ﾄﾞﾗｲﾌﾞ指定値取得
DE69 32F0E3		LD	(SLDRNO),A	;
命令行での1基準指定ﾄﾞﾗｲﾌﾞ番号初期化
DE6C 2A88DC		LD	HL,(CBFAD1)	;
命令行解析先頭ﾎﾟｲﾝﾀ取得
DE6F EB			EX	DE,HL		;
命令行解析先頭ﾎﾟｲﾝﾀをDEへ移動
DE70 CD4FDE		CALL	SKPSP		;
命令行有効文字先頭ﾎﾟｲﾝﾀ取得
DE73 EB			EX	DE,HL		;
命令行解析先頭ﾎﾟｲﾝﾀをHLへ復帰
DE74 228ADC		LD	(CBFAD2),HL	;
命令行有効文字先頭ﾎﾟｲﾝﾀ保存
DE77 EB			EX	DE,HL		;
命令行有効文字先頭ﾎﾟｲﾝﾀをDEへ移動
DE78 E1			POP	HL		;
命令用FCB対応先頭位置ﾎﾟｲﾝﾀ復帰
DE79

DE79		;	(( ﾄﾞﾗｲﾌﾞ番号処理 ))
DE79

DE79 1A		TSDR:	LD	A,(DE)		;
命令行対応ﾊﾞｲﾄ取得
DE7A B7			OR	A		;
終了子検査
DE7B CA89DE		JP	Z,TSDR1		;
終了子で分岐
DE7E		;

DE7E D640		SUB	'@'		;
1基準ﾄﾞﾗｲﾌﾞ番号取得
DE80 47			LD	B,A		;
指定ﾄﾞﾗｲﾌﾞ番号一時保存
DE81 13			INC	DE		;
命令行ﾎﾟｲﾝﾀ進行(+1)
DE82 1A			LD	A,(DE)		;
命令行次ﾊﾞｲﾄ取得
DE83 FE3A		CP	':'		;
ﾄﾞﾗｲﾌﾞ分離子検査
DE85 CA90DE		JP	Z,TSDR2		;
ﾄﾞﾗｲﾌﾞ分離子で分岐
DE88		;

DE88 1B			DEC	DE		;
命令行ﾎﾟｲﾝﾀ後退(-1:復帰)
DE89 3AEFE3	TSDR1:	LD	A,(LOGDSK)	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号取得
DE8C 77			LD	(HL),A		;
命令用FCBに現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ指定
DE8D C396DE		JP	TSFN		;
次(ﾌｧｲﾙ名)処理へ
DE90		;

DE90 78		TSDR2:	LD	A,B		;
1基準指定ﾄﾞﾗｲﾌﾞ番号取得
DE91 32F0E3		LD	(SLDRNO),A	;
命令行での1基準指定ﾄﾞﾗｲﾌﾞ番号取得
DE94 70			LD	(HL),B		;
命令用FCBに1基準ﾄﾞﾗｲﾌﾞ番号指定
DE95 13			INC	DE		;
命令行ﾎﾟｲﾝﾀ進行(+1)
DE96

DE96		;	(( ﾌｧｲﾙ名処理 ))
DE96

DE96 0608	TSFN:	LD	B,8		;
処理ﾊﾞｲﾄ数ｶｳﾝﾀ初期化
DE98 CD30DE	TSFN1:	CALL	CHRCHK		;
有効/無効文字検査
DE9B CAB9DE		JP	Z,TSFN5		;
無効文字で分岐
DE9E		;

DE9E 23			INC	HL		;
命令用FCBﾎﾟｲﾝﾀ進行(+1)
DE9F FE2A		CP	'*'		;
ﾜｲﾙﾄﾞ ｶｰﾄﾞか検査
DEA1 C2A9DE		JP	NZ,TSFN2	;
ﾜｲﾙﾄﾞ ｶｰﾄﾞ以外で分岐
DEA4		;

DEA4 363F		LD	(HL),'?'	;
命令用FCBに疑問符文字(全一致)設定
DEA6 C3ABDE		JP	TSFN3		;
次へ
DEA9		;

DEA9 77		TSFN2:	LD	(HL),A		;
命令用FCBに対応文字ﾊﾞｲﾄ設定
DEAA 13			INC	DE		;
命令行ﾎﾟｲﾝﾀ進行(+1)
DEAB 05		TSFN3:	DEC	B		;
処理ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
DEAC C298DE		JP	NZ,TSFN1	;
処理ﾊﾞｲﾄ数まで継続へ
DEAF		;

DEAF CD30DE	TSFN4:	CALL	CHRCHK		;
有効/無効文字検査
DEB2 CAC0DE		JP	Z,TSTY		;
無効文字で次(ﾌｧｲﾙ ﾀｲﾌﾟ)へ分岐
DEB5		;

DEB5 13			INC	DE		;
命令行ﾎﾟｲﾝﾀ進行(+1)
DEB6 C3AFDE		JP	TSFN4		;
制御文字までﾎﾟｲﾝﾀ進行継続へ
DEB9		;

DEB9 23		TSFN5:	INC	HL		;
命令用FCBﾎﾟｲﾝﾀ進行(+1)
DEBA 3620		LD	(HL),' '	;
命令用FCBに空白(ｽﾍﾟｰｽ)設定
DEBC 05			DEC	B		;
処理ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
DEBD C2B9DE		JP	NZ,TSFN5	;
残処理ﾊﾞｲﾄ空白埋め完了まで継続へ
DEC0

DEC0		;	(( ﾌｧｲﾙ ﾀｲﾌﾟ処理 ))
DEC0

DEC0 0603	TSTY:	LD	B,3		;
処理ﾊﾞｲﾄ数ｶｳﾝﾀ初期化
DEC2 FE2E		CP	'.'		;
分離子検査
DEC4 C2E9DE		JP	NZ,TSTY5	;
分離子以外で分岐
DEC7		;

DEC7 13			INC	DE		;
命令行ﾎﾟｲﾝﾀ進行(+1)
DEC8 CD30DE	TSTY1:	CALL	CHRCHK		;
有効/無効文字検査
DECB CAE9DE		JP	Z,TSTY5		;
無効文字で分岐
DECE		;

DECE 23			INC	HL		;
命令用FCBﾎﾟｲﾝﾀ進行(+1)
DECF FE2A		CP	'*'		;
ﾜｲﾙﾄﾞ ｶｰﾄﾞか検査
DED1 C2D9DE		JP	NZ,TSTY2	;
ﾜｲﾙﾄﾞ ｶｰﾄﾞ以外で分岐
DED4		;

DED4 363F		LD	(HL),'?'	;
命令用FCBに疑問符文字(全一致)設定
DED6 C3DBDE		JP	TSTY3		;
次へ
DED9		;

DED9 77		TSTY2:	LD	(HL),A		;
命令用FCBに対応文字ﾊﾞｲﾄ設定
DEDA 13			INC	DE		;
命令行ﾎﾟｲﾝﾀ進行(+1)
DEDB 05		TSTY3:	DEC	B		;
処理ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
DEDC C2C8DE		JP	NZ,TSTY1	;
処理ﾊﾞｲﾄ数まで継続へ
DEDF		;

DEDF CD30DE	TSTY4:	CALL	CHRCHK		;
有効/無効文字検査
DEE2 CAF0DE		JP	Z,FN2FB2	;
無効文字で分岐
DEE5		;

DEE5 13			INC	DE		;
命令行ﾎﾟｲﾝﾀ進行(+1)
DEE6 C3DFDE		JP	TSTY4		;
制御文字までﾎﾟｲﾝﾀ進行継続へ
DEE9		;

DEE9 23		TSTY5:	INC	HL		;
命令用FCBﾎﾟｲﾝﾀ進行(+1)
DEEA 3620		LD	(HL),' '	;
命令用FCBに空白(ｽﾍﾟｰｽ)設定
DEEC 05			DEC	B		;
処理ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
DEED C2E9DE		JP	NZ,TSTY5	;
残処理ﾊﾞｲﾄ空白埋め完了まで継続へ
DEF0

DEF0		;	(( 後処理 ))
DEF0

DEF0 0603	FN2FB2:	LD	B,3		;
処理ﾊﾞｲﾄ数ｶｳﾝﾀ初期化
DEF2 23		FN2FB3:	INC	HL		;
命令用FCBﾎﾟｲﾝﾀ進行(+1:EXまたはCR位置)
DEF3 3600		LD	(HL),0		;
対応ﾊﾞｲﾄ初期化
DEF5 05			DEC	B		;
処理ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
DEF6 C2F2DE		JP	NZ,FN2FB3	;
処理ﾊﾞｲﾄ数分継続へ
DEF9		;

DEF9 EB			EX	DE,HL		;
命令行ﾎﾟｲﾝﾀをHLへ移動
DEFA 2288DC		LD	(CBFAD1),HL	;
次開始命令行ﾎﾟｲﾝﾀ保存
DEFD E1			POP	HL		;
命令用FCB対応先頭位置ﾎﾟｲﾝﾀ復帰
DEFE 010B00		LD	BC,0*256+8+3	;
全一致文字(?)数ｶｳﾝﾀ初期化:検査ﾊﾞｲﾄ数ｶｳﾝﾀ初期化
DF01 23		FN2FB4:	INC	HL		;
命令用FCBﾎﾟｲﾝﾀ進行(+1)
DF02 7E			LD	A,(HL)		;
対応ﾊﾞｲﾄ取得
DF03 FE3F		CP	'?'		;
全一致文字(?)検査
DF05 C209DF		JP	NZ,FN2FB5	;
全一致文字(?)以外で分岐
DF08		;

DF08 04			INC	B		;
全一致文字(?)数ｶｳﾝﾀ進行(+1)
DF09 0D		FN2FB5:	DEC	C		;
検査ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
DF0A C201DF		JP	NZ,FN2FB4	;
検査ﾊﾞｲﾄ数分継続へ
DF0D		;

DF0D 78			LD	A,B		;
全一致文字(?)数取得
DF0E B7			OR	A		;
全一致文字(?)有無検査
DF0F C9			RET			;
全一致文字(?)有無ﾌﾗｸﾞ(ZF)と共に呼び出し元へ復帰
DF10

DF10		;	( 内部命令(ｺﾏﾝﾄﾞ)名ﾃｰﾌﾞﾙ )
DF10

DF10 44495220	COMTBL:	DB	'DIR '		;
ﾃﾞｨﾚｸﾄﾘ表示命令
DF14 45524120		DB	'ERA '		;
ﾌｧｲﾙ削除命令
DF18 54595045		DB	'TYPE'		;
ﾌｧｲﾙ内容表示命令
DF1C 53415645		DB	'SAVE'		;
ﾌﾟﾛｸﾞﾗﾑをﾌｧｲﾙ保存命令
DF20 52454E20		DB	'REN '		;
ﾌｧｲﾙ名変更命令
DF24 55534552		DB	'USER'		;
使用者番号設定命令
DF28

DF28 001600	SERLNO:	DB	00H, 00H, 00H	;
製品ｼﾘｱﾙ番号(6ﾊﾞｲﾄ)
DF2B 000BD4		DB	00H, 00H, 00H	;

DF2E

DF2E		;	( 内部命令(ｺﾏﾝﾄﾞ)検査 )
DF2E		;	出: A:内部命令(ｺﾏﾝﾄﾞ)番号
DF2E

DF2E 2110DF	CMDCK:	LD	HL,COMTBL	;
内部命令(ｺﾏﾝﾄﾞ)名ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ取得
DF31 0E00		LD	C,0		;
命令数ｶｳﾝﾀ初期化
DF33 79		CMDCK1:	LD	A,C		;
命令数ｶｳﾝﾀ値取得
DF34 FE06		CP	6		;
全命令数完了か検査
DF36 D0			RET	NC		;
検査完了で呼び出し元へ復帰
DF37		;

DF37 11CEE3		LD	DE,CFCBNM	;
命令用FCB内ﾌｧｲﾙ名先頭ﾎﾟｲﾝﾀ取得
DF3A 0604		LD	B,4		;
比較ﾊﾞｲﾄ数ｶｳﾝﾀ初期化
DF3C 1A		CMDCK2:	LD	A,(DE)		;
命令用FCB内対応ﾊﾞｲﾄ取得
DF3D BE			CP	(HL)		;
対応内部命令(ｺﾏﾝﾄﾞ)名文字と比較
DF3E C24FDF		JP	NZ,CMDCK3	;
不一致で分岐
DF41		;

DF41 13			INC	DE		;
命令用FCB内ﾌｧｲﾙ名ﾎﾟｲﾝﾀ進行(+1)
DF42 23			INC	HL		;
内部命令(ｺﾏﾝﾄﾞ)名ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ進行(+1)
DF43 05			DEC	B		;
比較ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
DF44 C23CDF		JP	NZ,CMDCK2	;
全ﾊﾞｲﾄ比較まで継続へ
DF47		;

DF47 1A			LD	A,(DE)		;
命令用FCB内次文字ﾊﾞｲﾄ取得
DF48 FE20		CP	' '		;
空白(文字無し)か検査
DF4A C254DF		JP	NZ,CMDCK4	;
継続文字有りで分岐
DF4D		;

DF4D 79			LD	A,C		;
内部命令(ｺﾏﾝﾄﾞ)番号(命令数ｶｳﾝﾀ)取得
DF4E C9			RET			;
呼び出し元へ復帰
DF4F		;

DF4F 23		CMDCK3:	INC	HL		;
内部命令(ｺﾏﾝﾄﾞ)名ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ進行(+1)
DF50 05			DEC	B		;
比較ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
DF51 C24FDF		JP	NZ,CMDCK3	;
残比較ﾊﾞｲﾄ数分ﾎﾟｲﾝﾀ補正継続へ
DF54		;

DF54 0C		CMDCK4:	INC	C		;
命令数ｶｳﾝﾀ進行(+1)
DF55 C333DF		JP	CMDCK1		;
全検査完了か一致まで継続へ
DF58

DF58		;	* 主処理 *
DF58

DF58 AF		MAIN:	XOR	A		;
0値取得
DF59 3207DC		LD	(CBFCNT),A	;
命令行ﾊﾞｯﾌｧ内入力文字ﾊﾞｲﾄ数初期化
DF5C 31ABE3	MAIN1:	LD	SP,STACK	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化
DF5F C5			PUSH	BC		;
使用者番号:選択ﾃﾞｨｽｸ番号一時保存
DF60 79			LD	A,C		;
使用者番号:選択ﾃﾞｨｽｸ番号値取得
DF61 1F			RRA			;
(÷2)使用者番号(ﾋﾞｯﾄ7～4)をﾋﾞｯﾄ3～0位置へ移動
DF62 1F			RRA			;
(÷4)
DF63 1F			RRA			;
(÷8)
DF64 1F			RRA			;
(÷16)
DF65 E60F		AND	00001111B	;
無効ﾋﾞｯﾄ解除
DF67 5F			LD	E,A		;
使用者番号指定
DF68 CD15DD		CALL	SUSERN		;
使用者番号設定
DF6B CDB8DC		CALL	RESDSK		;
全ﾃﾞｨｽｸ ﾘｾｯﾄ
DF6E 32ABE3		LD	(SUBFLG),A	;
自動処理(SUBMIT)ﾌﾗｸﾞ解除(=0)
DF71 C1			POP	BC		;
使用者番号:選択ﾃﾞｨｽｸ番号復帰
DF72 79			LD	A,C		;
使用者番号:選択ﾃﾞｨｽｸ番号値取得
DF73 E60F		AND	00001111B	;
選択ﾃﾞｨｽｸ番号ﾋﾞｯﾄ以外解除
DF75 32EFE3		LD	(LOGDSK),A	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号更新保存
DF78 CDBDDC		CALL	SELDSK		;
指定ﾄﾞﾗｲﾌﾞ(ﾃﾞｨｽｸ)選択
DF7B 3A07DC		LD	A,(CBFCNT)	;
命令行ﾊﾞｯﾌｧ内入力文字ﾊﾞｲﾄ数取得
DF7E B7			OR	A		;
入力文字有無検査
DF7F C298DF		JP	NZ,MAIN3	;
入力文字有りで分岐
DF82

DF82		;	(( 入力指示と命令行入力 ))
DF82

DF82 31ABE3	MAIN2:	LD	SP,STACK	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化
DF85 CD98DC		CALL	CRLF		;
ｺﾝｿｰﾙ復帰改行
DF88 CDD0DD		CALL	GSLDRN		;
現選択ﾃﾞｨｽｸ番号取得
DF8B C641		ADD	A,'A'		;
ﾄﾞﾗｲﾌﾞ番号文字取得
DF8D CD8CDC		CALL	COCHR		;
ﾄﾞﾗｲﾌﾞ番号ｺﾝｿｰﾙ表示
DF90 3E3E		LD	A,'>'		;
指示子文字取得
DF92 CD8CDC		CALL	COCHR		;
指示子ｺﾝｿｰﾙ表示
DF95 CD39DD		CALL	GCMDL		;
命令行取得
DF98

DF98		;	(( 命令行解析と実行 ))
DF98

DF98 118000	MAIN3:	LD	DE,TBF		;
標準転送ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ値取得
DF9B CDD8DD		CALL	SETDMA		;
DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽを標準位置に初期化
DF9E CDD0DD		CALL	GSLDRN		;
現選択ﾃﾞｨｽｸ番号取得
DFA1 32EFE3		LD	(LOGDSK),A	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号設定/保存
DFA4 CD5EDE		CALL	FN2FB		;
命令行からFCBﾌｧｲﾙ名形式変換/設定
DFA7 C409DE		CALL	NZ,CMERR	;
'*,?'含みで命令行異常表示後再入力処理へ[注:JP相当]
DFAA		;

DFAA 3AF0E3		LD	A,(SLDRNO)	;
命令行での1基準指定ﾄﾞﾗｲﾌﾞ番号取得
DFAD B7			OR	A		;
現ﾄﾞﾗｲﾌﾞ指定か検査
DFAE C2A5E2		JP	NZ,COM		;
明示ﾄﾞﾗｲﾌﾞ指定で分岐
DFB1		;

DFB1 CD2EDF		CALL	CMDCK		;
内部命令(ｺﾏﾝﾄﾞ)検査
DFB4 21C1DF		LD	HL,JPTBL	;
命令処理分岐ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ取得
DFB7 5F			LD	E,A		;
内部命令(ｺﾏﾝﾄﾞ)番号取得
DFB8 1600		LD	D,0		;
上位0設定
DFBA 19			ADD	HL,DE		;
ﾊﾞｲﾄ単位対応命令処理分岐ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ取得
DFBB 19			ADD	HL,DE		;
ﾜｰﾄﾞ単位対応命令処理分岐ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ取得
DFBC 7E			LD	A,(HL)		;
対応命令処理先頭ｱﾄﾞﾚｽ下位取得
DFBD 23			INC	HL		;
ﾜｰﾄﾞ単位対応命令処理分岐ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ進行(+1)
DFBE 66			LD	H,(HL)		;
対応命令処理先頭ｱﾄﾞﾚｽ上位取得
DFBF 6F			LD	L,A		;
対応命令処理先頭ｱﾄﾞﾚｽ下位設定
DFC0 E9			JP	(HL)		;
対応命令処理へ
DFC1

DFC1		;	( 命令処理分岐ﾃｰﾌﾞﾙ )
DFC1

DFC1 77E0	JPTBL:	DW	DIR		;
ﾃﾞｨﾚｸﾄﾘ表示命令
DFC3 1FE1		DW	ERA		;
ﾌｧｲﾙ削除命令
DFC5 5DE1		DW	TYPE		;
ﾌｧｲﾙ内容表示命令
DFC7 ADE1		DW	SAVE		;
ﾌﾟﾛｸﾞﾗﾑをﾌｧｲﾙ保存命令
DFC9 10E2		DW	REN		;
ﾌｧｲﾙ名変更命令
DFCB 8EE2		DW	USER		;
使用者番号設定命令
DFCD A5E2		DW	COM		;
外部命令(ﾌｧｲﾙのﾌﾟﾛｸﾞﾗﾑ実行)/ﾄﾞﾗｲﾌﾞ選択
DFCF

DFCF		;	( CPU停止 )
DFCF

DFCF 21F376	STOP:	LD	HL,DIHLT	;
割り込み禁止(DI),停止(HALT)命令ｺｰﾄﾞ取得
DFD2 2200DC		LD	(CCPENT),HL	;
割り込み禁止(DI),停止(HALT)命令ｺｰﾄﾞ設定
DFD5 2100DC		LD	HL,CCPENT	;
割り込み禁止(DI)命令位置ﾎﾟｲﾝﾀ取得
DFD8 E9			JP	(HL)		;
割り込み禁止で停止実行へ
DFD9

DFD9		;	( ﾌｧｲﾙ読み込み異常表示 )
DFD9

DFD9 01DFDF	REDSP:	LD	BC,REMSG	;
ﾌｧｲﾙ読み込み異常文字列基準ﾎﾟｲﾝﾀ取得
DFDC C3A7DC		JP	NLMGOT		;
新規行でﾌｧｲﾙ読み込み異常ｺﾝｿｰﾙ表示
DFDF		;

DFDF 52454144	REMSG:	DB	'READ ERROR',0	;
ﾌｧｲﾙ読み込み異常
DFE3 20455252

DFE7 4F5200

DFEA

DFEA		;	( ﾌｧｲﾙ不存在警告表示 )
DFEA

DFEA 01F0DF	NFDSP:	LD	BC,NFMSG	;
ﾌｧｲﾙ不存在警告文字列基準ﾎﾟｲﾝﾀ取得
DFED C3A7DC		JP	NLMGOT		;
新規行でﾌｧｲﾙ不存在警告ｺﾝｿｰﾙ表示
DFF0		;

DFF0 4E4F2046	NFMSG:	DB	'NO FILE',0	;
ﾌｧｲﾙ不存在警告
DFF4 494C4500

DFF8

DFF8		;	( 命令用FCBﾌｧｲﾙ名(命令行)から10進数値取得 )
DFF8		;	出: A:指定10進値
DFF8

DFF8 CD5EDE	GTNUM:	CALL	FN2FB		;
命令行からFCBﾌｧｲﾙ名形式変換/設定
DFFB 3AF0E3		LD	A,(SLDRNO)	;
命令行での1基準指定ﾄﾞﾗｲﾌﾞ番号取得
DFFE B7			OR	A		;
ﾄﾞﾗｲﾌﾞ指定有無検査
DFFF C209DE		JP	NZ,CMERR	;
ﾄﾞﾗｲﾌﾞ指定有りで命令行異常表示後再入力処理へ
E002		;

E002 21CEE3		LD	HL,CFCBNM	;
命令用FCB内ﾌｧｲﾙ名先頭ﾎﾟｲﾝﾀ取得
E005 010B00		LD	BC,0*256+11	;
合計値初期化:処理ﾊﾞｲﾄ数ｶｳﾝﾀ初期化
E008 7E		GTNUM1:	LD	A,(HL)		;
命令用FCB内ﾌｧｲﾙ名対応ﾊﾞｲﾄ取得
E009 FE20		CP	' '		;
有効文字終了か検査
E00B CA33E0		JP	Z,GTNUM2	;
有効文字終了で分岐
E00E		;

E00E 23			INC	HL		;
命令用FCB内ﾌｧｲﾙ名ﾎﾟｲﾝﾀ進行(+1)
E00F D630		SUB	'0'		;
数字文字2進値変換
E011 FE0A		CP	10		;
数字文字か検査
E013 D209DE		JP	NC,CMERR	;
数字文字以外で命令行異常表示後再入力処理へ
E016		;

E016 57			LD	D,A		;
今回値保存
E017 78			LD	A,B		;
直前までの合計値取得
E018 E6E0		AND	11100000B	;
空きﾋﾞｯﾄ検査(次のRLCA溢れ事前検査)
E01A C209DE		JP	NZ,CMERR	;
10倍による256以上で命令行異常表示後再入力処理へ
E01D		;

E01D 78			LD	A,B		;
直前までの合計値取得
E01E 07			RLCA			;
(×2)直前値8倍
E01F 07			RLCA			;
(×4)
E020 07			RLCA			;
(×8)
E021 80			ADD	A,B		;
(×9)直前値の9倍(×8+1)
E022 DA09DE		JP	C,CMERR		;
256以上で命令行異常表示後再入力処理へ
E025		;

E025 80			ADD	A,B		;
(×10)直前値の10倍(×9+1)
E026 DA09DE		JP	C,CMERR		;
256以上で命令行異常表示後再入力処理へ
E029		;

E029 82			ADD	A,D		;
合計値(直前値の10倍+今回値)取得
E02A DA09DE		JP	C,CMERR		;
256以上で命令行異常表示後再入力処理へ
E02D		;

E02D 47			LD	B,A		;
合計値保存
E02E 0D			DEC	C		;
処理ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
E02F C208E0		JP	NZ,GTNUM1	;
処理ﾊﾞｲﾄ数か有効文字終了まで継続へ
E032		;

E032 C9			RET			;
呼び出し元へ復帰
E033		;

E033 7E		GTNUM2:	LD	A,(HL)		;
命令用FCB内ﾌｧｲﾙ名対応ﾊﾞｲﾄ取得
E034 FE20		CP	' '		;
空白文字か検査
E036 C209DE		JP	NZ,CMERR	;
空白以外で命令行異常表示後再入力処理へ
E039		;

E039 23			INC	HL		;
命令用FCB内ﾌｧｲﾙ名ﾎﾟｲﾝﾀ進行(+1)
E03A 0D			DEC	C		;
処理ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
E03B C233E0		JP	NZ,GTNUM2	;
残処理ﾊﾞｲﾄ数分継続へ
E03E		;

E03E 78			LD	A,B		;
合計値取得
E03F C9			RET			;
呼び出し元へ復帰
E040

E040		;	( 3ﾊﾞｲﾄ領域転送 )
E040		;	入: DE:転送先ﾎﾟｲﾝﾀ HL:転送元ﾎﾟｲﾝﾀ
E040

E040 0603	MVI3R:	LD	B,3		;
転送ﾊﾞｲﾄ数指定(=3)
E042

E042		;	( 領域転送 )
E042		;	入: B:転送ﾊﾞｲﾄ数 DE:転送先ﾎﾟｲﾝﾀ HL:転送元ﾎﾟｲﾝﾀ
E042

E042 7E		MVIR:	LD	A,(HL)		;
転送元から1ﾊﾞｲﾄ取得
E043 12			LD	(DE),A		;
転送先へ1ﾊﾞｲﾄ設定
E044 23			INC	HL		;
転送元ﾎﾟｲﾝﾀ進行(+1)
E045 13			INC	DE		;
転送先ﾎﾟｲﾝﾀ進行(+1)
E046 05			DEC	B		;
転送ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
E047 C242E0		JP	NZ,MVIR		;
転送ﾊﾞｲﾄ数まで継続へ
E04A		;

E04A C9			RET			;
呼び出し元へ復帰
E04B

E04B		;	( ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘの指定値取得 )
E04B		;	入: A:ｴﾝﾄﾘ内指定までのｵﾌｾｯﾄ C:ﾚｺｰﾄﾞ内ｴﾝﾄﾘ先頭ｵﾌｾｯﾄ
E04B

E04B 218000	GDIRPR:	LD	HL,TBF		;
標準転送ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ値取得
E04E 81			ADD	A,C		;
合計ｵﾌｾｯﾄ取得
E04F CD59DE		CALL	ADDHLA		;
対応ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘの指定値ﾎﾟｲﾝﾀ取得
E052 7E			LD	A,(HL)		;
指定値取得
E053 C9			RET			;
呼び出し元へ復帰
E054

E054		;	( 命令開始時指定ﾄﾞﾗｲﾌﾞ選択 )
E054

E054 AF		SLDRVS:	XOR	A		;
現ﾄﾞﾗｲﾌﾞ指定値取得
E055 32CDE3		LD	(CFCBDR),A	;
命令用FCBﾄﾞﾗｲﾌﾞ指定値設定(現ﾄﾞﾗｲﾌﾞ)
E058 3AF0E3		LD	A,(SLDRNO)	;
命令行での1基準指定ﾄﾞﾗｲﾌﾞ番号取得
E05B B7			OR	A		;
ﾄﾞﾗｲﾌﾞ指定有無検査
E05C C8			RET	Z		;
現ﾄﾞﾗｲﾌﾞ指定で呼び出し元へ復帰
E05D		;

E05D 3D			DEC	A		;
0基準ﾄﾞﾗｲﾌﾞ番号取得
E05E 21EFE3		LD	HL,LOGDSK	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号値ﾎﾟｲﾝﾀ取得
E061 BE			CP	(HL)		;
指定ﾄﾞﾗｲﾌﾞ=現ﾄﾞﾗｲﾌﾞか検査
E062 C8			RET	Z		;
一致で呼び出し元へ復帰
E063		;

E063 C3BDDC		JP	SELDSK		;
不一致で指定ﾃﾞｨｽｸ選択後呼び出し元へ復帰へ
E066

E066		;	( 命令終了時元ﾄﾞﾗｲﾌﾞ選択 )
E066

E066 3AF0E3	SLDRVE:	LD	A,(SLDRNO)	;
命令行での1基準指定ﾄﾞﾗｲﾌﾞ番号取得
E069 B7			OR	A		;
ﾄﾞﾗｲﾌﾞ指定有無検査
E06A C8			RET	Z		;
現ﾄﾞﾗｲﾌﾞ指定で呼び出し元へ復帰
E06B		;

E06B 3D			DEC	A		;
0基準ﾄﾞﾗｲﾌﾞ番号取得
E06C 21EFE3		LD	HL,LOGDSK	;
命令開始時現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号値ﾎﾟｲﾝﾀ取得
E06F BE			CP	(HL)		;
指定ﾄﾞﾗｲﾌﾞ=命令開始時ﾄﾞﾗｲﾌﾞか検査
E070 C8			RET	Z		;
一致で呼び出し元へ復帰
E071		;

E071 3AEFE3		LD	A,(LOGDSK)	;
命令開始時現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号取得
E074 C3BDDC		JP	SELDSK		;
不一致で命令開始時ﾃﾞｨｽｸ選択後呼び出し元へ復帰へ
E077

E077		;	* DIR: ﾃﾞｨﾚｸﾄﾘ表示 *
E077

E077 CD5EDE	DIR:	CALL	FN2FB		;
命令行からFCBﾌｧｲﾙ名形式変換/設定
E07A CD54E0		CALL	SLDRVS		;
命令開始時指定ﾄﾞﾗｲﾌﾞ選択
E07D 21CEE3		LD	HL,CFCBNM	;
命令用FCB内ﾌｧｲﾙ名先頭ﾎﾟｲﾝﾀ取得
E080 7E			LD	A,(HL)		;
命令用FCB内ﾌｧｲﾙ名先頭ﾊﾞｲﾄ取得
E081 FE20		CP	' '		;
命令行でのﾌｧｲﾙ名指定有無検査
E083 C28FE0		JP	NZ,DIR2		;
ﾌｧｲﾙ名指定有りで分岐
E086

E086		;	(( FCB初期化(*.*) ))
E086

E086 060B		LD	B,8+3		;
処理ﾊﾞｲﾄ数ｶｳﾝﾀ初期化
E088 363F	DIR1:	LD	(HL),'?'	;
命令用FCB内ﾌｧｲﾙ名対応ﾊﾞｲﾄに疑問符(全一致)設定
E08A 23			INC	HL		;
命令用FCB内ﾌｧｲﾙ名ﾎﾟｲﾝﾀ進行(+1)
E08B 05			DEC	B		;
処理ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
E08C C288E0		JP	NZ,DIR1		;
処理ﾊﾞｲﾄ数分継続へ
E08F

E08F		;	(( 初期処理 ))
E08F

E08F 1E00	DIR2:	LD	E,0		;
表示ﾌｧｲﾙ数ｶｳﾝﾀ初期化
E091 D5			PUSH	DE		;
表示ﾌｧｲﾙ数ｶｳﾝﾀ一時保存
E092 CDE9DC		CALL	FSRCHF		;
対応ﾌｧｲﾙ初回検索
E095 CCEADF		CALL	Z,NFDSP		;
対応ﾌｧｲﾙ名無しでﾌｧｲﾙ不存在警告表示(Zで復帰)
E098

E098		;	(( ﾌｧｲﾙ表示継続処理 ))
E098

E098 CA1BE1	DIR3:	JP	Z,DIR11		;
対応ﾌｧｲﾙ名無しで分岐
E09B		;

E09B 3AEEE3		LD	A,(BDRTPR)	;
検索BDOS機能復帰ｺｰﾄﾞ取得
E09E 0F			RRCA			;
ﾋﾞｯﾄ1,0をﾋﾞｯﾄ6,5位置へ移動
E09F 0F			RRCA			;
(ﾋﾞｯﾄ1,0=ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ番号(0～3)
E0A0 0F			RRCA			;
(ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ番号×32)
E0A1 E660		AND	60H		;
無効ﾋﾞｯﾄ解除(32ﾊﾞｲﾄ単位ｵﾌｾｯﾄ取得)
E0A3 4F			LD	C,A		;
対応ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ先頭ｵﾌｾｯﾄ設定
E0A4 3E0A		LD	A,10		;
ﾌｧｲﾙ ﾀｲﾌﾟ第2ﾊﾞｲﾄ(T2)ｵﾌｾｯﾄ取得
E0A6 CD4BE0		CALL	GDIRPR		;
対応ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘのT2値取得
E0A9 17			RLA			;
ｼｽﾃﾑまたはDIR非表示ﾌﾗｸﾞをｷｬﾘｰ ﾌﾗｸﾞへ移動
E0AA DA0FE1		JP	C,DIR10		;
ｼｽﾃﾑまたはDIR非表示で分岐
E0AD		;

E0AD D1			POP	DE		;
表示ﾌｧｲﾙ数ｶｳﾝﾀ復帰
E0AE 7B			LD	A,E		;
表示ﾌｧｲﾙ数ｶｳﾝﾀ値取得
E0AF 1C			INC	E		;
表示ﾌｧｲﾙ数ｶｳﾝﾀ進行(+1)
E0B0 D5			PUSH	DE		;
表示ﾌｧｲﾙ数ｶｳﾝﾀ一時保存
E0B1 E603		AND	00000011B	;
4ﾌｧｲﾙ単位先頭ﾌｧｲﾙか検査
E0B3 F5			PUSH	AF		;
4ﾌｧｲﾙ単位内ﾌｧｲﾙ数(位置)一時保存
E0B4 C2CCE0		JP	NZ,DIR4		;
4ﾌｧｲﾙ単位先頭ﾌｧｲﾙ以外で分岐
E0B7

E0B7		;	((( 行先頭ﾄﾞﾗｲﾌﾞ名表示 )))
E0B7

E0B7 CD98DC		CALL	CRLF		;
ｺﾝｿｰﾙ復帰改行
E0BA C5			PUSH	BC		;
対応ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ先頭ｵﾌｾｯﾄ一時保存
E0BB CDD0DD		CALL	GSLDRN		;
現選択(指定)ﾃﾞｨｽｸ番号取得
E0BE C1			POP	BC		;
対応ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ先頭ｵﾌｾｯﾄ復帰
E0BF C641		ADD	A,'A'		;
指定ﾄﾞﾗｲﾌﾞ番号文字取得
E0C1 CD92DC		CALL	COCHRS		;
指定ﾄﾞﾗｲﾌﾞ名ｺﾝｿｰﾙ表示
E0C4 3E3A		LD	A,':'		;
分離子文字取得
E0C6 CD92DC		CALL	COCHRS		;
分離子ｺﾝｿｰﾙ表示
E0C9 C3D4E0		JP	DIR5		;
ﾌｧｲﾙ名表示処理へ
E0CC

E0CC		;	((( 1ﾌｧｲﾙ名表示 )))
E0CC

E0CC CDA2DC	DIR4:	CALL	COSP		;
ｺﾝｿｰﾙ空白表示
E0CF 3E3A		LD	A,':'		;
分離子文字取得
E0D1 CD92DC		CALL	COCHRS		;
分離子ｺﾝｿｰﾙ表示
E0D4		;

E0D4 CDA2DC	DIR5:	CALL	COSP		;
ｺﾝｿｰﾙ空白表示
E0D7 0601		LD	B,1		;
ﾌｧｲﾙ名先頭ﾊﾞｲﾄ(F1)ｵﾌｾｯﾄ設定
E0D9 78		DIR6:	LD	A,B		;
ﾌｧｲﾙ名対応ﾊﾞｲﾄ(Fn)ｵﾌｾｯﾄ取得
E0DA CD4BE0		CALL	GDIRPR		;
対応ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘの対応Fn値取得
E0DD E67F		AND	01111111B	;
有効文字ﾋﾞｯﾄ以外解除
E0DF FE20		CP	' '		;
空白か検査
E0E1 C2F9E0		JP	NZ,DIR8		;
空白以外で分岐
E0E4		;

E0E4 F1			POP	AF		;
4ﾌｧｲﾙ単位内ﾌｧｲﾙ数(位置)復帰
E0E5 F5			PUSH	AF		;
4ﾌｧｲﾙ単位内ﾌｧｲﾙ数(位置)一時保存
E0E6 FE03		CP	3		;
4ﾌｧｲﾙ単位最終ﾌｧｲﾙか検査
E0E8 C2F7E0		JP	NZ,DIR7		;
4ﾌｧｲﾙ単位最終ﾌｧｲﾙ以外で分岐
E0EB		;

E0EB 3E09		LD	A,9		;
ﾌｧｲﾙ ﾀｲﾌﾟ先頭ﾊﾞｲﾄ(T1)ｵﾌｾｯﾄ取得
E0ED CD4BE0		CALL	GDIRPR		;
対応ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘのT1値取得
E0F0 E67F		AND	01111111B	;
有効文字ﾋﾞｯﾄ以外解除
E0F2 FE20		CP	' '		;
空白か検査
E0F4 CA0EE1		JP	Z,DIR9		;
残全空白で分岐
E0F7		;

E0F7 3E20	DIR7:	LD	A,' '		;
空白(ｽﾍﾟｰｽ)ｺｰﾄﾞ取得
E0F9 CD92DC	DIR8:	CALL	COCHRS		;
ｺﾝｿｰﾙ空白表示
E0FC 04			INC	B		;
ﾌｧｲﾙ名ｵﾌｾｯﾄ進行(+1)
E0FD 78			LD	A,B		;
ﾌｧｲﾙ名ｵﾌｾｯﾄ値取得
E0FE FE0C		CP	8+3+1		;
ﾌｧｲﾙ ﾀｲﾌﾟ名最終ｵﾌｾｯﾄ+1か検査
E100 D20EE1		JP	NC,DIR9		;
ﾌｧｲﾙ ﾀｲﾌﾟまで完了で分岐
E103		;

E103 FE09		CP	8+1		;
ﾌｧｲﾙ名最終ｵﾌｾｯﾄ+1か検査
E105 C2D9E0		JP	NZ,DIR6		;
次がﾌｧｲﾙ ﾀｲﾌﾟ先頭以外で分岐
E108		;

E108 CDA2DC		CALL	COSP		;
ｺﾝｿｰﾙ空白表示
E10B C3D9E0		JP	DIR6		;
ﾌｧｲﾙ(ﾀｲﾌﾟ)名表示処理継続へ
E10E

E10E		;	((( 4ﾌｧｲﾙ単位行端処理 )))
E10E

E10E F1		DIR9:	POP	AF		;
ｽﾀｯｸ ﾎﾟｲﾝﾀ補正(+2:4ﾌｧｲﾙ単位内ﾌｧｲﾙ数)
E10F CDC2DD	DIR10:	CALL	BREAK		;
打ち切り検査
E112 C21BE1		JP	NZ,DIR11	;
打ち切り(ｺﾝｿｰﾙ入力有り)で分岐
E115		;

E115 CDE4DC		CALL	NSRCH		;
対応ﾌｧｲﾙ次回検索
E118 C398E0		JP	DIR3		;
継続へ
E11B		;

E11B D1		DIR11:	POP	DE		;
ｽﾀｯｸ ﾎﾟｲﾝﾀ補正(+2:表示ﾌｧｲﾙ数ｶｳﾝﾀ)
E11C C386E3		JP	CMTRM		;
元ﾄﾞﾗｲﾌﾞ復帰命令終了処理へ
E11F

E11F		;	* ﾌｧｲﾙ削除 *
E11F

E11F CD5EDE	ERA:	CALL	FN2FB		;
命令行からFCBﾌｧｲﾙ名形式変換/設定
E122 FE0B		CP	8+3		;
全ﾌｧｲﾙ指定(*.*,????????.???)か検査
E124 C242E1		JP	NZ,ERA1		;
全ﾌｧｲﾙ指定以外で分岐
E127		;

E127 0152E1		LD	BC,ALMSG	;
全削除確認文字列基準ﾎﾟｲﾝﾀ取得
E12A CDA7DC		CALL	NLMGOT		;
新規行で全削除確認ｺﾝｿｰﾙ表示
E12D CD39DD		CALL	GCMDL		;
命令行取得
E130 2107DC		LD	HL,CBFCNT	;
命令行ﾊﾞｲﾄ数位置ﾎﾟｲﾝﾀ取得
E133 35			DEC	(HL)		;
入力ﾊﾞｲﾄ数検査
E134 C282DF		JP	NZ,MAIN2	;
1文字(ﾊﾞｲﾄ)以外で通常(命令行入力開始)処理へ
E137		;

E137 23			INC	HL		;
命令行内容基準ﾎﾟｲﾝﾀ取得
E138 7E			LD	A,(HL)		;
入力文字ﾊﾞｲﾄ取得
E139 FE59		CP	'Y'		;
可否検査
E13B C282DF		JP	NZ,MAIN2	;
可(Y)以外で通常(命令行入力開始)処理へ
E13E		;

E13E 23			INC	HL		;
命令行内容ﾎﾟｲﾝﾀ進行(+1)
E13F 2288DC		LD	(CBFAD1),HL	;
命令行内容次先頭ﾎﾟｲﾝﾀ保存
E142		;

E142 CD54E0	ERA1:	CALL	SLDRVS		;
命令開始時指定ﾄﾞﾗｲﾌﾞ選択
E145 11CDE3		LD	DE,CFCB		;
命令用FCB基準ﾎﾟｲﾝﾀ取得
E148 CDEFDC		CALL	DELETE		;
対応ﾌｧｲﾙ削除
E14B 3C			INC	A		;
成功(0)/失敗(-1)検査
E14C CCEADF		CALL	Z,NFDSP		;
失敗でﾌｧｲﾙ不存在警告表示
E14F C386E3		JP	CMTRM		;
元ﾄﾞﾗｲﾌﾞ復帰命令終了処理へ
E152		;

E152 414C4C20	ALMSG:	DB	'ALL (Y/N)?',0	;
全削除確認
E156 28592F4E

E15A 293F00

E15D

E15D		;	* ﾌｧｲﾙ内容表示 *
E15D

E15D CD5EDE	TYPE:	CALL	FN2FB		;
命令行からFCBﾌｧｲﾙ名形式変換/設定
E160 C209DE		JP	NZ,CMERR	;
全一致(*,?)有りで命令行異常表示後再入力処理へ
E163		;

E163 CD54E0		CALL	SLDRVS		;
命令開始時指定ﾄﾞﾗｲﾌﾞ選択
E166 CDD0DC		CALL	OPENF		;
対応ﾌｧｲﾙ開始処理
E169 CAA7E1		JP	Z,TYPE4		;
失敗(不存在)で分岐
E16C		;

E16C CD98DC		CALL	CRLF		;
ｺﾝｿｰﾙ復帰改行
E16F 21F1E3		LD	HL,TYPEBC	;
TYPE命令用ﾊﾞｲﾄ数ｶｳﾝﾀ値ﾎﾟｲﾝﾀ取得
E172 36FF		LD	(HL),-1		;
ﾊﾞｲﾄ数ｶｳﾝﾀ初期化(初回読み込み用最大値指定)
E174 21F1E3	TYPE1:	LD	HL,TYPEBC	;
TYPE命令用ﾊﾞｲﾄ数ｶｳﾝﾀ値ﾎﾟｲﾝﾀ取得
E177 7E			LD	A,(HL)		;
ﾊﾞｲﾄ数ｶｳﾝﾀ値取得
E178 FE80		CP	128		;
1ﾚｺｰﾄﾞ完了(128ﾊﾞｲﾄ到達)検査
E17A DA87E1		JP	C,TYPE2		;
未完了で分岐
E17D		;

E17D E5			PUSH	HL		;
ﾊﾞｲﾄ数ｶｳﾝﾀ値ﾎﾟｲﾝﾀ一時保存
E17E CDFEDC		CALL	SREADF		;
対応ﾌｧｲﾙ 1ﾚｺｰﾄﾞ読み込み
E181 E1			POP	HL		;
ﾊﾞｲﾄ数ｶｳﾝﾀ値ﾎﾟｲﾝﾀ復帰
E182 C2A0E1		JP	NZ,TYPE3	;
読み込み失敗で分岐
E185		;

E185 AF			XOR	A		;
0値取得
E186 77			LD	(HL),A		;
ﾊﾞｲﾄ数ｶｳﾝﾀ初期化
E187 34		TYPE2:	INC	(HL)		;
ﾊﾞｲﾄ数ｶｳﾝﾀ進行(+1)
E188 218000		LD	HL,TBF		;
標準転送ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ値取得
E18B CD59DE		CALL	ADDHLA		;
ﾊﾞｯﾌｧ内対応ﾊﾞｲﾄ位置ﾎﾟｲﾝﾀ取得
E18E 7E			LD	A,(HL)		;
対応ﾊﾞｲﾄ取得
E18F FE1A		CP	C_Z		;
終了子(EOF)検査
E191 CA86E3		JP	Z,CMTRM		;
EOFで元ﾄﾞﾗｲﾌﾞ復帰命令終了処理へ
E194		;

E194 CD8CDC		CALL	COCHR		;
対応文字ｺﾝｿｰﾙ表示
E197 CDC2DD		CALL	BREAK		;
打ち切り検査
E19A C286E3		JP	NZ,CMTRM	;
打ち切り(ｺﾝｿｰﾙ入力有り)で元ﾄﾞﾗｲﾌﾞ復帰命令終了処理へ
E19D		;

E19D C374E1		JP	TYPE1		;
継続へ
E1A0		;

E1A0 3D		TYPE3:	DEC	A		;
最終ﾚｺｰﾄﾞ越え(1)か検査
E1A1 CA86E3		JP	Z,CMTRM		;
最終ﾚｺｰﾄﾞ越えで元ﾄﾞﾗｲﾌﾞ復帰命令終了処理へ
E1A4		;

E1A4 CDD9DF		CALL	REDSP		;
ﾌｧｲﾙ読み込み異常ｺﾝｿｰﾙ表示
E1A7 CD66E0	TYPE4:	CALL	SLDRVE		;
命令終了時元ﾄﾞﾗｲﾌﾞ選択
E1AA C309DE		JP	CMERR		;
命令行異常表示後再入力処理へ
E1AD

E1AD		;	* SAVE: ﾌﾟﾛｸﾞﾗﾑをﾌｧｲﾙ保存 *
E1AD

E1AD CDF8DF	SAVE:	CALL	GTNUM		;
命令行からの保存256ﾊﾞｲﾄ単位数取得
E1B0 F5			PUSH	AF		;
保存256ﾊﾞｲﾄ単位数一時保存
E1B1 CD5EDE		CALL	FN2FB		;
命令行からFCBﾌｧｲﾙ名形式変換/設定
E1B4 C209DE		JP	NZ,CMERR	;
全一致(*,?)有りで命令行異常表示後再入力処理へ
E1B7		;

E1B7 CD54E0		CALL	SLDRVS		;
命令開始時指定ﾄﾞﾗｲﾌﾞ選択
E1BA 11CDE3		LD	DE,CFCB		;
命令用FCB基準ﾎﾟｲﾝﾀ取得
E1BD D5			PUSH	DE		;
命令用FCB基準ﾎﾟｲﾝﾀ一時保存
E1BE CDEFDC		CALL	DELETE		;
既存対応ﾌｧｲﾙ削除
E1C1 D1			POP	DE		;
命令用FCB基準ﾎﾟｲﾝﾀ復帰
E1C2 CD09DD		CALL	MAKE		;
対応ﾌｧｲﾙ新規作成
E1C5 CAFBE1		JP	Z,SAVE3		;
失敗で分岐
E1C8		;

E1C8 AF			XOR	A		;
0値取得
E1C9 32EDE3		LD	(CFCBCR),A	;
ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ内現ﾚｺｰﾄﾞ位置初期化(先頭)
E1CC F1			POP	AF		;
保存256ﾊﾞｲﾄ単位数復帰
E1CD 6F			LD	L,A		;
保存256ﾊﾞｲﾄ単位数設定
E1CE 2600		LD	H,0		;
上位0設定
E1D0 29			ADD	HL,HL		;
ﾚｺｰﾄﾞ(128ﾊﾞｲﾄ)単位数に変換
E1D1 110001		LD	DE,TPA		;
一時ﾌﾟﾛｸﾞﾗﾑ領域先頭ｱﾄﾞﾚｽ取得
E1D4 7C		SAVE1:	LD	A,H		;
ﾚｺｰﾄﾞ数ｶｳﾝﾀ上位取得
E1D5 B5			OR	L		;
指定ﾚｺｰﾄﾞ数完了検査
E1D6 CAF1E1		JP	Z,SAVE2		;
完了で分岐
E1D9		;

E1D9 2B			DEC	HL		;
ﾚｺｰﾄﾞ数ｶｳﾝﾀ減数(-1)
E1DA E5			PUSH	HL		;
ﾚｺｰﾄﾞ数ｶｳﾝﾀ一時保存
E1DB 218000		LD	HL,128		;
ﾊﾞｲﾄ数/1ﾚｺｰﾄﾞ取得
E1DE 19			ADD	HL,DE		;
ﾌﾟﾛｸﾞﾗﾑ領域ﾎﾟｲﾝﾀ進行(+128)
E1DF E5			PUSH	HL		;
ﾌﾟﾛｸﾞﾗﾑ領域ﾎﾟｲﾝﾀ一時保存
E1E0 CDD8DD		CALL	SETDMA		;
DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽをﾌﾟﾛｸﾞﾗﾑ領域ﾎﾟｲﾝﾀ位置に設定
E1E3 11CDE3		LD	DE,CFCB		;
命令用FCB基準ﾎﾟｲﾝﾀ取得
E1E6 CD04DD		CALL	SWRITE		;
対応ﾌｧｲﾙ 1ﾚｺｰﾄﾞ書き込み
E1E9 D1			POP	DE		;
ﾌﾟﾛｸﾞﾗﾑ領域ﾎﾟｲﾝﾀ復帰
E1EA E1			POP	HL		;
ﾚｺｰﾄﾞ数ｶｳﾝﾀ復帰
E1EB C2FBE1		JP	NZ,SAVE3	;
書き込み失敗で分岐
E1EE		;

E1EE C3D4E1		JP	SAVE1		;
書き込み継続へ
E1F1		;

E1F1 11CDE3	SAVE2:	LD	DE,CFCB		;
命令用FCB基準ﾎﾟｲﾝﾀ取得
E1F4 CDDADC		CALL	CLS		;
対応ﾌｧｲﾙ閉鎖
E1F7 3C			INC	A		;
成功(0～3)/失敗(-1)検査
E1F8 C201E2		JP	NZ,SAVE4	;
成功で分岐
E1FB		;

E1FB 0107E2	SAVE3:	LD	BC,NSMSG	;
ﾃﾞｨｽｸ空き無し警告文字列基準ﾎﾟｲﾝﾀ取得
E1FE CDA7DC		CALL	NLMGOT.		;
新規行でﾃﾞｨｽｸ空き無し警告ｺﾝｿｰﾙ表示
E201		;

E201 CDD5DD	SAVE4:	CALL	STNDMA		;
標準DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ設定
E204 C386E3		JP	CMTRM		;
元ﾄﾞﾗｲﾌﾞ復帰命令終了処理へ
E207		;

E207 4E4F2053	NSMSG:	DB	'NO SPACE',0	;
ﾃﾞｨｽｸ空き無し警告
E20B 50414345

E20F 00

E210

E210		;	* REN: ﾌｧｲﾙ名変更 *
E210

E210 CD5EDE	REN:	CALL	FN2FB		;
命令行から変更後ﾌｧｲﾙ名FCBﾌｧｲﾙ名形式変換/設定
E213 C209DE		JP	NZ,CMERR	;
全一致(*,?)有りで命令行異常表示後再入力処理へ
E216		;

E216 3AF0E3		LD	A,(SLDRNO)	;
命令行での1基準指定ﾄﾞﾗｲﾌﾞ番号取得
E219 F5			PUSH	AF		;
変更後ﾌｧｲﾙ名1基準指定ﾄﾞﾗｲﾌﾞ番号一時保存
E21A CD54E0		CALL	SLDRVS		;
命令開始時指定ﾄﾞﾗｲﾌﾞ選択
E21D CDE9DC		CALL	FSRCHF		;
変更後ﾌｧｲﾙ初回検索
E220 C279E2		JP	NZ,REN5		;
既存で分岐
E223		;

E223 21CDE3		LD	HL,CFCB		;
命令用FCB基準ﾎﾟｲﾝﾀ取得(転送元)
E226 11DDE3		LD	DE,CFCBD0	;
命令用FCB先頭+16位置ﾎﾟｲﾝﾀ取得(転送先)
E229 0610		LD	B,16		;
転送ﾊﾞｲﾄ数指定
E22B CD42E0		CALL	MVIR		;
変更後ﾌｧｲﾙ名をFCB先頭+16位置へｺﾋﾟｰ
E22E 2A88DC		LD	HL,(CBFAD1)	;
命令行内容次先頭ﾎﾟｲﾝﾀ取得
E231 EB			EX	DE,HL		;
命令行内容次先頭ﾎﾟｲﾝﾀをDEへ移動
E232 CD4FDE		CALL	SKPSP		;
命令行次有効文字先頭ﾎﾟｲﾝﾀ取得
E235 FE3D		CP	'='		;
有効接続子検査
E237 CA3FE2		JP	Z,REN1		;
有効接続子で分岐
E23A		;

E23A FE5F		CP	'_'		;
有効接続子検査
E23C C273E2		JP	NZ,REN4		;
有効接続子以外で分岐
E23F		;

E23F EB		REN1:	EX	DE,HL		;
命令行内容次有効文字先頭ﾎﾟｲﾝﾀをHLへ移動
E240 23			INC	HL		;
有効接続子分進行(+1)
E241 2288DC		LD	(CBFAD1),HL	;
命令行内容次先頭ﾎﾟｲﾝﾀ保存/設定
E244 CD5EDE		CALL	FN2FB		;
命令行から元ﾌｧｲﾙ名FCBﾌｧｲﾙ名形式変換/設定
E247 C273E2		JP	NZ,REN4		;
全一致(*,?)有りで分岐
E24A		;

E24A F1			POP	AF		;
変更後ﾌｧｲﾙ名1基準指定ﾄﾞﾗｲﾌﾞ番号復帰
E24B 47			LD	B,A		;
変更後ﾌｧｲﾙ名1基準指定ﾄﾞﾗｲﾌﾞ番号保存
E24C 21F0E3		LD	HL,SLDRNO	;
命令行での元ﾌｧｲﾙ名1基準指定ﾄﾞﾗｲﾌﾞ番号ﾎﾟｲﾝﾀ取得
E24F 7E			LD	A,(HL)		;
元ﾌｧｲﾙ名1基準指定ﾄﾞﾗｲﾌﾞ番号取得
E250 B7			OR	A		;
ﾄﾞﾗｲﾌﾞ指定有無検査
E251 CA59E2		JP	Z,REN2		;
現ﾄﾞﾗｲﾌﾞ指定で分岐
E254		;

E254 B8			CP	B		;
元ﾌｧｲﾙと変更後ﾌｧｲﾙのﾄﾞﾗｲﾌﾞ番号比較
E255 70			LD	(HL),B		;
元ﾌｧｲﾙ名ﾄﾞﾗｲﾌﾞ指定を変更後ﾄﾞﾗｲﾌﾞ指定に置換
E256 C273E2		JP	NZ,REN4		;
両ﾄﾞﾗｲﾌﾞ番号不一致で分岐
E259		;

E259 70		REN2:	LD	(HL),B		;
元ﾌｧｲﾙ名ﾄﾞﾗｲﾌﾞ指定を変更後ﾄﾞﾗｲﾌﾞ指定に置換
E25A AF			XOR	A		;
現ﾄﾞﾗｲﾌﾞ指定値取得
E25B 32CDE3		LD	(CFCBDR),A	;
命令用FCBﾄﾞﾗｲﾌﾞ指定値設定(現指定)
E25E CDE9DC		CALL	FSRCHF		;
元ﾌｧｲﾙ初回検索
E261 CA6DE2		JP	Z,REN3m		;
不存在で分岐
E264		;

E264 11CDE3		LD	DE,CFCB		;
命令用FCB基準ﾎﾟｲﾝﾀ取得
E267 CD0EDD		CALL	RENAME		;
対象ﾌｧｲﾙ名称変更
E26A C386E3		JP	CMTRM		;
元ﾄﾞﾗｲﾌﾞ復帰命令終了処理へ
E26D		;

E26D CDEADF	REN3:	CALL	NFDSP		;
ﾌｧｲﾙ不存在警告ｺﾝｿｰﾙ表示
E270 C386E3		JP	CMTRM		;
元ﾄﾞﾗｲﾌﾞ復帰命令終了処理へ
E273		;

E273 CD66E0	REN4:	CALL	SLDRVE		;
命令終了時元ﾄﾞﾗｲﾌﾞ選択
E276 C309DE		JP	CMERR		;
命令行異常表示後再入力処理へ
E279		;

E279 0182E2	REN5:	LD	BC,FEMSG	;
同一ﾌｧｲﾙ名既存警告文字列基準ﾎﾟｲﾝﾀ取得
E27C CDA7DC		CALL	NLMGOT		;
新規行で同一ﾌｧｲﾙ名既存警告ｺｰﾝｿｰﾙ表示
E27F C386E3		JP	CMTRM		;
元ﾄﾞﾗｲﾌﾞ復帰命令終了処理へ
E282		;

E282 46494C45	FEMSG:	DB	'FILE EXISTS',0	;
同一ﾌｧｲﾙ名既存警告
E286 20455849

E28A 53545300

E28E

E28E		;	* USER: 使用者番号設定 *
E28E

E28E CDF8DF	USER:	CALL	GTNUM		;
命令行からの使用者番号取得
E291 FE10		CP	16		;
最大番号検査
E293 D209DE		JP	NC,CMERR	;
範囲外で命令行異常表示後再入力処理へ
E296		;

E296 5F			LD	E,A		;
使用者番号値指定
E297 3ACEE3		LD	A,(CFCBNM)	;
命令用FCB内ﾌｧｲﾙ名先頭ﾊﾞｲﾄ取得
E29A FE20		CP	' '		;
有効文字有無検査
E29C CA09DE		JP	Z,CMERR		;
有効文字無しで命令行異常表示後再入力処理へ
E29F		;

E29F CD15DD		CALL	SUSERN		;
使用者番号設定
E2A2 C389E3		JP	CMTRM1		;
命令終了処理へ
E2A5

E2A5		;	* ﾌｧｲﾙのﾌﾟﾛｸﾞﾗﾑ実行/ﾄﾞﾗｲﾌﾞ選択 *
E2A5

E2A5 CDF5DD	COM:	CALL	SERCK		;
製品ｼﾘｱﾙ番号検査
E2A8 3ACEE3		LD	A,(CFCBNM)	;
命令用FCB内ﾌｧｲﾙ名先頭ﾊﾞｲﾄ取得
E2AB FE20		CP	' '		;
ﾌｧｲﾙ名有無検査
E2AD C2C4E2		JP	NZ,COM1		;
ﾌｧｲﾙ名有りで分岐
E2B0

E2B0		;	(( ﾄﾞﾗｲﾌﾞ選択 ))
E2B0

E2B0 3AF0E3		LD	A,(SLDRNO)	;
命令行での1基準指定ﾄﾞﾗｲﾌﾞ番号取得
E2B3 B7			OR	A		;
ﾄﾞﾗｲﾌﾞ指定有無検査
E2B4 CA89E3		JP	Z,CMTRM1	;
現ﾄﾞﾗｲﾌﾞ指定で命令終了処理へ
E2B7		;

E2B7 3D			DEC	A		;
0基準ﾄﾞﾗｲﾌﾞ番号取得
E2B8 32EFE3		LD	(LOGDSK),A	;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号更新保存
E2BB CD29DD		CALL	SETDN		;
選択ﾃﾞｨｽｸ番号値設定
E2BE CDBDDC		CALL	SELDSK		;
指定ﾄﾞﾗｲﾌﾞ(ﾃﾞｨｽｸ)選択
E2C1 C389E3		JP	CMTRM1		;
命令終了処理へ
E2C4

E2C4		;	(( ﾌｧｲﾙのﾌﾟﾛｸﾞﾗﾑ実行 ))
E2C4

E2C4 11D6E3	COM1:	LD	DE,CFCBTY	;
命令用FCBﾌｧｲﾙ ﾀｲﾌﾟ先頭ﾎﾟｲﾝﾀ取得
E2C7 1A			LD	A,(DE)		;
ﾌｧｲﾙ ﾀｲﾌﾟ先頭ﾊﾞｲﾄ取得
E2C8 FE20		CP	' '		;
ﾌｧｲﾙ ﾀｲﾌﾟ指定有無検査
E2CA C209DE		JP	NZ,CMERR	;
指定有りで命令行異常表示後再入力処理へ
E2CD		;

E2CD D5			PUSH	DE		;
命令用FCBﾌｧｲﾙ ﾀｲﾌﾟ先頭ﾎﾟｲﾝﾀ一時保存
E2CE CD54E0		CALL	SLDRVS		;
命令開始時指定ﾄﾞﾗｲﾌﾞ選択
E2D1 D1			POP	DE		;
命令用FCBﾌｧｲﾙ ﾀｲﾌﾟ先頭ﾎﾟｲﾝﾀ復帰(転送先)
E2D2 2183E3		LD	HL,TYCOM	;
実行形式ﾌｧｲﾙ ﾀｲﾌﾟ文字列(COM)基準ﾎﾟｲﾝﾀ取得
E2D5 CD40E0		CALL	MVI3R		;
命令用FCBﾌｧｲﾙ ﾀｲﾌﾟに'COM'を設定
E2D8 CDD0DC		CALL	OPENF		;
対応ﾌｧｲﾙ開始処理
E2DB CA6BE3		JP	Z,COM8		;
対応ﾌｧｲﾙ不存在で分岐
E2DE		;

E2DE 210001		LD	HL,TPA		;
一時ﾌﾟﾛｸﾞﾗﾑ領域先頭ｱﾄﾞﾚｽ取得
E2E1 E5		COM2:	PUSH	HL		;
一時ﾌﾟﾛｸﾞﾗﾑ領域ﾎﾟｲﾝﾀ一時保存
E2E2 EB			EX	DE,HL		;
一時ﾌﾟﾛｸﾞﾗﾑ領域ﾎﾟｲﾝﾀをDEへ移動
E2E3 CDD8DD		CALL	SETDMA		;
DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽを一時ﾌﾟﾛｸﾞﾗﾑ領域ﾎﾟｲﾝﾀに設定
E2E6 11CDE3		LD	DE,CFCB		;
命令用FCB基準ﾎﾟｲﾝﾀ取得
E2E9 CDF9DC		CALL	SREAD		;
対応ﾌｧｲﾙ 1ﾚｺｰﾄﾞ読み込み
E2EC C201E3		JP	NZ,COM3		;
異常終了で分岐
E2EF		;

E2EF E1			POP	HL		;
一時ﾌﾟﾛｸﾞﾗﾑ領域ﾎﾟｲﾝﾀ復帰
E2F0 118000		LD	DE,128		;
128ﾊﾞｲﾄ/1ﾚｺｰﾄﾞ値取得
E2F3 19			ADD	HL,DE		;
一時ﾌﾟﾛｸﾞﾗﾑ領域ﾎﾟｲﾝﾀ進行(+128)
E2F4 1100DC		LD	DE,CCP		;
CCP先頭ｱﾄﾞﾚｽ取得
E2F7 7D			LD	A,L		;
一時ﾌﾟﾛｸﾞﾗﾑ領域ﾎﾟｲﾝﾀ下位取得
E2F8 93			SUB	E		;
CCP先頭ｱﾄﾞﾚｽ下位と比較
E2F9 7C			LD	A,H		;
一時ﾌﾟﾛｸﾞﾗﾑ領域ﾎﾟｲﾝﾀ上位取得
E2FA 9A			SBC	A,D		;
CCP先頭ｱﾄﾞﾚｽ上位と比較
E2FB D271E3		JP	NC,COM9		;
一時ﾌﾟﾛｸﾞﾗﾑ領域ﾎﾟｲﾝﾀ≧CCP先頭ｱﾄﾞﾚｽで分岐
E2FE		;

E2FE C3E1E2		JP	COM2		;
対応ﾌｧｲﾙ読み込み継続へ
E301		;

E301 E1		COM3:	POP	HL		;
ｽﾀｯｸ ﾎﾟｲﾝﾀ補正(+2:一時ﾌﾟﾛｸﾞﾗﾑ領域ﾎﾟｲﾝﾀ)
E302 3D			DEC	A		;
最終ﾚｺｰﾄﾞ越え(-1)か検査
E303 C271E3		JP	NZ,COM9		;
最終ﾚｺｰﾄﾞ越え以外で分岐
E306		;

E306 CD66E0		CALL	SLDRVE		;
命令終了時元ﾄﾞﾗｲﾌﾞ選択
E309 CD5EDE		CALL	FN2FB		;
命令行から第1FCBﾌｧｲﾙ名形式変換/設定
E30C 21F0E3		LD	HL,SLDRNO	;
命令行での1基準指定ﾄﾞﾗｲﾌﾞ番号ﾎﾟｲﾝﾀ取得
E30F E5			PUSH	HL		;
第1ﾌｧｲﾙ名1基準指定ﾄﾞﾗｲﾌﾞ番号ﾎﾟｲﾝﾀ一時保存
E310 7E			LD	A,(HL)		;
第1ﾌｧｲﾙ名1基準指定ﾄﾞﾗｲﾌﾞ番号取得
E311 32CDE3		LD	(CFCBDR),A	;
第1FCBﾄﾞﾗｲﾌﾞ指定値設定
E314 3E10		LD	A,16		;
命令用FCB配置区画番号先頭(D0)位置指定
E316 CD60DE		CALL	FN2FB1		;
命令行から第2FCBﾌｧｲﾙ名形式変換/設定
E319 E1			POP	HL		;
第1ﾌｧｲﾙ名1基準指定ﾄﾞﾗｲﾌﾞ番号ﾎﾟｲﾝﾀ復帰
E31A 7E			LD	A,(HL)		;
第1ﾌｧｲﾙ名1基準指定ﾄﾞﾗｲﾌﾞ番号取得
E31B 32DDE3		LD	(CFCBD0),A	;
第2FCBﾄﾞﾗｲﾌﾞ指定値設定
E31E AF			XOR	A		;
0値取得
E31F 32EDE3		LD	(CFCBCR),A	;
ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ内現ﾚｺｰﾄﾞ位置初期化(先頭)
E322 115C00		LD	DE,FCB		;
標準FCB基準ﾎﾟｲﾝﾀ取得(転送先)
E325 21CDE3		LD	HL,CFCB		;
命令用FCB基準ﾎﾟｲﾝﾀ取得(転送元)
E328 0621		LD	B,33		;
転送ﾊﾞｲﾄ数指定
E32A CD42E0		CALL	MVIR		;
命令用FCBを標準FCBへｺﾋﾟｰ
E32D 2108DC		LD	HL,CBF		;
命令行内容基準ﾎﾟｲﾝﾀ取得
E330 7E		COM4:	LD	A,(HL)		;
対応ﾊﾞｲﾄ取得
E331 B7			OR	A		;
終了子検査
E332 CA3EE3		JP	Z,COM5		;
終了子で分岐
E335		;

E335 FE20		CP	' '		;
分離子検査
E337 CA3EE3		JP	Z,COM5		;
分離子で分岐
E33A		;

E33A 23			INC	HL		;
命令行内容ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ進行(+1)
E33B C330E3		JP	COM4		;
命令語読み飛ばしまで継続へ
E33E		;

E33E 0600	COM5:	LD	B,0		;
有効ﾊﾞｲﾄ数ｶｳﾝﾀ初期化
E340 118100		LD	DE,TBF+1	;
標準転送ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ+1値取得
E343 7E		COM6:	LD	A,(HL)		;
命令行内容ﾊﾞｯﾌｧから対応ﾊﾞｲﾄ取得
E344 12			LD	(DE),A		;
標準転送ﾊﾞｯﾌｧへｺﾋﾟｰ
E345 B7			OR	A		;
終了子検査
E346 CA4FE3		JP	Z,COM7		;
終了子で分岐
E349		;

E349 04			INC	B		;
有効ﾊﾞｲﾄ数ｶｳﾝﾀ進行(+1)
E34A 23			INC	HL		;
命令行内容ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ進行(+1)
E34B 13			INC	DE		;
標準転送ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ進行(+1)
E34C C343E3		JP	COM6		;
終了子まで継続へ
E34F		;

E34F 78		COM7:	LD	A,B		;
有効ﾊﾞｲﾄ数取得
E350 328000		LD	(TBF),A		;
標準転送ﾊﾞｯﾌｧ先頭に有効文字ﾊﾞｲﾄ数設定
E353 CD98DC		CALL	CRLF		;
ｺﾝｿｰﾙ復帰改行
E356 CDD5DD		CALL	STNDMA		;
標準DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ設定
E359 CD1ADD		CALL	SETUD		;
使用者番号:選択ﾃﾞｨｽｸ番号値設定
E35C CD0001		CALL	TPA		;
対象ﾌﾟﾛｸﾞﾗﾑ実行
E35F		;

E35F 31ABE3		LD	SP,STACK	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化
E362 CD29DD		CALL	SETDN		;
命令開始時選択ﾃﾞｨｽｸ番号値設定
E365 CDBDDC		CALL	SELDSK		;
命令開始時ﾄﾞﾗｲﾌﾞ(ﾃﾞｨｽｸ)選択
E368 C382DF		JP	MAIN2		;
通常(命令行入力開始)処理へ
E36B		;

E36B CD66E0	COM8:	CALL	SLDRVE		;
命令終了時元ﾄﾞﾗｲﾌﾞ選択
E36E C309DE		JP	CMERR		;
命令行異常表示後再入力処理へ
E371		;

E371 017AE3	COM9:	LD	BC,BLMSG	;
ﾌﾟﾛｸﾞﾗﾑ読み込み設定失敗文字列基準ﾎﾟｲﾝﾀ取得
E374 CDA7DC		CALL	NLMGOT		;
新規行でﾌﾟﾛｸﾞﾗﾑ読み込み設定失敗表示
E377 C386E3		JP	CMTRM		;
元ﾄﾞﾗｲﾌﾞ復帰命令終了処理へ
E37A		;

E37A 42414420	BLMSG:	DB	'BAD LOAD',0	;
ﾌﾟﾛｸﾞﾗﾑ読み込み設定失敗
E37E 4C4F4144

E382 00

E383		;

E383 434F4D	TYCOM:	DB	'COM'		;
実行形式ﾌｧｲﾙ形式名
E386

E386		;	* 命令終了処理 *
E386

E386 CD66E0	CMTRM:	CALL	SLDRVE		;
命令終了時元ﾄﾞﾗｲﾌﾞ選択
E389		;

E389 CD5EDE	CMTRM1:	CALL	FN2FB		;
命令行からFCBﾌｧｲﾙ名形式変換/設定(残検査)
E38C 3ACEE3		LD	A,(CFCBNM)	;
命令用FCB内ﾌｧｲﾙ名先頭ﾊﾞｲﾄ取得
E38F D620		SUB	' '		;
残命令行命令/ﾌｧｲﾙ命令有無ｺｰﾄﾞ取得
E391 21F0E3		LD	HL,SLDRNO	;
命令行での1基準指定ﾄﾞﾗｲﾌﾞ番号ﾎﾟｲﾝﾀ取得
E394 B6			OR	(HL)		;
残命令有無検査
E395 C209DE		JP	NZ,CMERR	;
残命令有りで命令行異常表示後再入力処理へ
E398		;

E398 C382DF		JP	MAIN2		;
通常(命令行入力開始)処理へ
E39B

E39B		;	[ 定数/変数定義 ]
E39B

E39B 00000000		DB	0,0,0,0,0,0,0,0	;
ｽﾀｯｸ領域(16ﾊﾞｲﾄ)
E39F 00000000

E3A3 00000000		DB	0,0,0,0,0,0,0,0	;

E3A7 00000000

E3AB

E3AB		STACK	EQU	$		;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期ｱﾄﾞﾚｽ
E3AB

E3AB 00		SUBFLG:	DB	0		;
自動処理(SUBMIT)ﾌﾗｸﾞ
E3AC

E3AC		SFCB:	EQU	$		;
自動処理(SUBMIT)用FCB
E3AC 00			DB	0		;
SUBMIT用FCBﾄﾞﾗｲﾌﾞ指定(DR)値
E3AD 24242420		DB	'$$$     '	;
SUBMIT用FCBﾌｧｲﾙ名(F1～8)
E3B1 20202020

E3B5 535542		DB	'SUB'		;
SUBMIT用FCBﾌｧｲﾙ ﾀｲﾌﾟ(T1～2)
E3B8 00			DB	0		;
SUBMIT用FCB拡張ﾚｺｰﾄﾞ数(EX)値
E3B9 00			DB	0		;
SUBMIT用FCB S1値
E3BA 00		SFCBS2:	DB	0		;
SUBMIT用FCB S2値
E3BB 00		SFCBRC:	DB	0		;
SUBMIT用FCBﾚｺｰﾄﾞ数(RC)
E3BC 00000000		DB	0,0,0,0,0,0,0,0	;
SUBMIT用FCB配置区画番号列(D0～15)
E3C0 00000000

E3C4 00000000		DB	0,0,0,0,0,0,0,0	;

E3C8 00000000

E3CC 00		SFCBCR:	DB	0		;
SUBMIT用FCB指定ﾚｺｰﾄﾞ番号(CR)
E3CD		;

E3CD		CFCB:	EQU	$		;
命令用FCB先頭位置
E3CD 00		CFCBDR:	DB	0		;
命令用FCBﾄﾞﾗｲﾌﾞ指定(DR)値
E3CE 20202020	CFCBNM:	DB	'        '	;
命令用FCBﾌｧｲﾙ名(F1～8)
E3D2 20202020

E3D6 202020	CFCBTY:	DB	'   '		;
命令用FCBﾌｧｲﾙ ﾀｲﾌﾟ(T1～2)
E3D9 00		CFCBEX:	DB	0		;
命令用FCB拡張ﾚｺｰﾄﾞ数(EX)値
E3DA 00		CFCBS1:	DB	0		;
命令用FCB S1値
E3DB 00		CFCBS2:	DB	0		;
命令用FCB S2値
E3DC 00		CFCBRC:	DB	0		;
命令用FCBﾚｺｰﾄﾞ数(RC)
E3DD 00000000	CFCBD0:	DB	0,0,0,0,0,0,0,0	;
命令用FCB配置区画番号列(D0～15)
E3E1 00000000

E3E5 00000000		DB	0,0,0,0,0,0,0,0	;
(または変更後ﾌｧｲﾙ名)
E3E9 00000000

E3ED 00		CFCBCR:	DB	0		;
命令用FCB指定ﾚｺｰﾄﾞ番号(CR)
E3EE		;

E3EE 00		BDRTPR:	DB	0		;
BDOS機能復帰ｺｰﾄﾞ
E3EF 00		LOGDSK:	DB	0		;
現(ﾛｸﾞｲﾝ)ﾃﾞｨｽｸ番号
E3F0 00		SLDRNO:	DB	0		;
命令行での指定ﾄﾞﾗｲﾌﾞ番号(0=現,1=A,･･･)
E3F1 00		TYPEBC:	DB	0		;
TYPE命令用ﾊﾞｲﾄ数ｶｳﾝﾀ
E3F2

E3F2 00000000		DB	0,0,0,0,0,0,0,0	;

E3F6 00000000

E3FA 00000000		DB	0,0,0,0,0,0	;

E3FE 0000

E400

E400			END


1.4 SUBMIT ｿｰｽ

0000		;*****************************

0000		;*			     *

0000		;*  CP/M-80 SUBMIT  Ver 2.0  *

0000		;*			     *

0000		;*****************************

0000

0000			TITLE	SUBMIT

0000

0000		;	* CP/Mｼｽﾃﾑ ﾊﾟﾗﾒｰﾀ領域定義 *
0000

0000		BOOT	EQU	0000H		;
ﾌﾞｰﾄ開始分岐先頭ﾄﾞﾚｽ
0005		BDENT	EQU	0005H		;
BDOS開始分岐先頭ﾄﾞﾚｽ
005C		FCB	EQU	005CH		;
ﾌｧｲﾙ制御領域(File Control Block)先頭ｱﾄﾞﾚｽ
0080		TBF	EQU	0080H		;
標準転送ﾊﾞｯﾌｧ先頭ｱﾄﾞﾚｽ
0100		TPA	EQU	0100H		;
一時ﾌﾟﾛｸﾞﾗﾑ領域(Transient Program Area)先頭ｱﾄﾞﾚｽ
0000

0000		;	* 制御ｺｰﾄﾞ定義 *
0000

000A		LF	EQU	0AH		;
    行終了(ｶｰｿﾙ改行)
000D		CR	EQU	0DH		;
Enter	行終了(ｶｰｿﾙ復帰)
001A		EOF	EQU	1AH		;
    ﾌｧｲﾙ終端(EOF)
0000

0000		;	[ ｺｰﾄﾞ ]
0000

0000			ORG	TPA		;
ﾌﾟﾛｸﾞﾗﾑ開始ｱﾄﾞﾚｽ
0100

0100 C3DF01		JP	MAIN		;
主処理開始へ
0103

0103		;	[ 定数 ]
0103

0103 20636F70		DB	' copyright(c) 1977, digital research '

0107 79726967

010B 68742863

010F 29203139

0113 37372C20

0117 64696769

011B 74616C20

011F 72657365

0123 61726368

0127 20

0128 0D0A24	NLMSG:	DB	CR,LF,'$'

012B 4572726F	ELMSG:	DB	'Error On Line $'

012F 72204F6E

0133 204C696E

0137 652024

013A 535542	SFTYP:	DB	'SUB'

013D 4E6F2027	FNMSG:	DB	'No ~'SUB~' File Present$'

0141 53554227

0145 2046696C

0149 65205072

014D 6573656E

0151 7424

0153 4469736B	WEMSG:	DB	'Disk Write Error$'

0157 20577269

015B 74652045

015F 72726F72

0163 24

0164 436F6D6D	BOMSG:	DB	'Command Buffer Overflow$'

0168 616E6420

016C 42756666

0170 6572204F

0174 76657266

0178 6C6F7724

017C 436F6D6D	LOMSG:	DB	'Command Too Long$'

0180 616E6420

0184 546F6F20

0188 4C6F6E67

018C 24

018D 50617261	PEMSG:	DB	'Parameter Error$'

0191 6D657465

0195 72204572

0199 726F7224

019D 496E7661	ICMSG:	DB	'Invalid Control Character$'

01A1 6C696420

01A5 436F6E74

01A9 726F6C20

01AD 43686172

01B1 61637465

01B5 7224

01B7 44697265	DFMSG:	DB	'Directory Full$'

01BB 63746F72

01BF 79204675

01C3 6C6C24

01C6 43616E6E	CEMSG:	DB	'Cannot Close, Read/Only?$'

01CA 6F742043

01CE 6C6F7365

01D2 2C205265

01D6 61642F4F

01DA 6E6C793F

01DE 24

01DF

01DF		;	[ 主処理 ]
01DF

01DF 210000	MAIN:	LD	HL,0		;
0値取得
01E2 39			ADD	HL,SP		;
現ｽﾀｯｸ ﾎﾟｲﾝﾀ値取得
01E3 22F005		LD	(STSPSV),HL	;
現ｽﾀｯｸ ﾎﾟｲﾝﾀ値保存
01E6 21930E		LD	HL,STACK	;
初期ｽﾀｯｸ ﾎﾟｲﾝﾀ値取得
01E9 F9			LD	SP,HL		;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化
01EA CDCC02		CALL	GTSF		;
前処理(指定ﾌｧｲﾙ有無検査)
01ED CD8A03		CALL	STIB		;
指定ﾌｧｲﾙ内容取得処理
01F0 CDFE04		CALL	MKSF		;
SUBMIT用ﾌｧｲﾙ書き出し処理
01F3 CD8705		CALL	JWBOT		;
ｳｫｰﾑ ﾌﾞｰﾄへ(復帰無し)
01F6 C9			RET			;
呼び出し元へ復帰
01F7

01F7		;	* 各処理からのｻﾌﾞﾙｰﾁﾝ *
01F7

01F7		;	( ｺﾝｿｰﾙ文字列表示 )
01F7		;	入: BC:文字列先頭ｱﾄﾞﾚｽ
01F7

01F7 21DD05	COMSG:	LD	HL,STRPNT+1	;
表示文字列先頭ｱﾄﾞﾚｽ保存域+1ﾎﾟｲﾝﾀ取得
01FA 70			LD	(HL),B		;
文字列先頭ｱﾄﾞﾚｽ上位保存
01FB 2B			DEC	HL		;
保存域ﾎﾟｲﾝﾀ後退(-1)
01FC 71			LD	(HL),C		;
文字列先頭ｱﾄﾞﾚｽ下位保存
01FD 2ADC05		LD	HL,(STRPNT)	;
表示文字列先頭ｱﾄﾞﾚｽ取得
0200 EB			EX	DE,HL		;
表示文字列先頭ｱﾄﾞﾚｽをDEへ移動
0201 0E09		LD	C,9		;
ｺﾝｿｰﾙ文字列出力BDOS機能指定
0203 CD8A05		CALL	BDOS1		;
ｺﾝｿｰﾙ文字列出力BDOS機能呼び出し
0206 C9			RET			;
呼び出し元へ復帰
0207

0207		;	( ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ) )
0207		;	入: BC:FCB先頭ｱﾄﾞﾚｽ
0207

0207 21E005	OPNF:	LD	HL,OFBPNT+1	;
FCB先頭ｱﾄﾞﾚｽ保存域上位ﾎﾟｲﾝﾀ取得
020A 70			LD	(HL),B		;
FCB先頭ｱﾄﾞﾚｽ上位保存
020B 2B			DEC	HL		;
FCB先頭ｱﾄﾞﾚｽ保存域下位ﾎﾟｲﾝﾀ取得
020C 71			LD	(HL),C		;
FCB先頭ｱﾄﾞﾚｽ下位保存
020D 2ADF05		LD	HL,(OFBPNT)	;
FCB先頭ｱﾄﾞﾚｽ取得
0210 EB			EX	DE,HL		;
FCB先頭ｱﾄﾞﾚｽをDEへ移動
0211 0E0F		LD	C,15		;
ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)BDOS機能指定
0213 CD8D05		CALL	BDOS2		;
ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)BDOS機能呼び出し
0216 32DE05		LD	(BDRTCD),A	;
BDOS復帰ｺｰﾄﾞ保存
0219 C9			RET			;
呼び出し元へ復帰
021A

021A		;	( ﾌｧｲﾙ閉鎖(ｸﾛｰｽﾞ) )
021A		;	入: BC:FCB先頭ｱﾄﾞﾚｽ
021A

021A 21E205	CLSF:	LD	HL,CFBPNT+1	;
FCB先頭ｱﾄﾞﾚｽ保存域上位ﾎﾟｲﾝﾀ取得
021D 70			LD	(HL),B		;
FCB先頭ｱﾄﾞﾚｽ上位保存
021E 2B			DEC	HL		;
FCB先頭ｱﾄﾞﾚｽ保存域下位ﾎﾟｲﾝﾀ取得
021F 71			LD	(HL),C		;
FCB先頭ｱﾄﾞﾚｽ下位保存
0220 2AE105		LD	HL,(CFBPNT)	;
FCB先頭ｱﾄﾞﾚｽ取得
0223 EB			EX	DE,HL		;
FCB先頭ｱﾄﾞﾚｽをDEへ移動
0224 0E10		LD	C,16		;
ﾌｧｲﾙ閉鎖(ｸﾛｰｽﾞ)BDOS機能指定
0226 CD8D05		CALL	BDOS2		;
ﾌｧｲﾙ閉鎖(ｸﾛｰｽﾞ)BDOS機能呼び出し
0229 32DE05		LD	(BDRTCD),A	;
BDOS復帰ｺｰﾄﾞ保存
022C C9			RET			;
呼び出し元へ復帰
022D

022D		;	( ﾌｧｲﾙ削除 )
022D		;	入: BC:FCB先頭ｱﾄﾞﾚｽ
022D

022D 21E405	DELF:	LD	HL,DFBPNT+1	;
FCB先頭ｱﾄﾞﾚｽ保存域上位ﾎﾟｲﾝﾀ取得
0230 70			LD	(HL),B		;
FCB先頭ｱﾄﾞﾚｽ上位保存
0231 2B			DEC	HL		;
FCB先頭ｱﾄﾞﾚｽ保存域下位ﾎﾟｲﾝﾀ取得
0232 71			LD	(HL),C		;
FCB先頭ｱﾄﾞﾚｽ下位保存
0233 2AE305		LD	HL,(DFBPNT)	;
FCB先頭ｱﾄﾞﾚｽ取得
0236 EB			EX	DE,HL		;
FCB先頭ｱﾄﾞﾚｽをDEへ移動
0237 0E13		LD	C,19		;
ﾌｧｲﾙ削除BDOS機能指定
0239 CD8A05		CALL	BDOS1		;
ﾌｧｲﾙ削除BDOS機能呼び出し
023C C9			RET			;
呼び出し元へ復帰
023D

023D		;	( 順次ﾌｧｲﾙ読み込み )
023D		;	入: BC:FCB先頭ｱﾄﾞﾚｽ
023D

023D 21E605	RDSF:	LD	HL,RFBPNT+1	;
FCB先頭ｱﾄﾞﾚｽ保存域上位ﾎﾟｲﾝﾀ取得
0240 70			LD	(HL),B		;
FCB先頭ｱﾄﾞﾚｽ上位保存
0241 2B			DEC	HL		;
FCB先頭ｱﾄﾞﾚｽ保存域下位ﾎﾟｲﾝﾀ取得
0242 71			LD	(HL),C		;
FCB先頭ｱﾄﾞﾚｽ下位保存
0243 2AE505		LD	HL,(RFBPNT)	;
FCB先頭ｱﾄﾞﾚｽ取得
0246 EB			EX	DE,HL		;
FCB先頭ｱﾄﾞﾚｽをDEへ移動
0247 0E14		LD	C,20		;
順次ﾌｧｲﾙ読み込みBDOS機能指定
0249 CD8D05		CALL	BDOS2		;
順次ﾌｧｲﾙ読み込みBDOS機能呼び出し
024C C9			RET			;
呼び出し元へ復帰
024D

024D		;	( 順次ﾌｧｲﾙ書き込み )
024D		;	入: BC:FCB先頭ｱﾄﾞﾚｽ
024D

024D 21E805	WRSF:	LD	HL,WFBPNT+1	;
FCB先頭ｱﾄﾞﾚｽ保存域上位ﾎﾟｲﾝﾀ取得
0250 70			LD	(HL),B		;
FCB先頭ｱﾄﾞﾚｽ上位保存
0251 2B			DEC	HL		;
FCB先頭ｱﾄﾞﾚｽ保存域下位ﾎﾟｲﾝﾀ取得
0252 71			LD	(HL),C		;
FCB先頭ｱﾄﾞﾚｽ下位保存
0253 2AE705		LD	HL,(WFBPNT)	;
FCB先頭ｱﾄﾞﾚｽ取得
0256 EB			EX	DE,HL		;
FCB先頭ｱﾄﾞﾚｽをDEへ移動
0257 0E15		LD	C,21		;
順次ﾌｧｲﾙ書き込みBDOS機能指定
0259 CD8D05		CALL	BDOS2		;
順次ﾌｧｲﾙ書き込みBDOS機能呼び出し
025C C9			RET			;
呼び出し元へ復帰
025D

025D		;	( ﾌｧｲﾙ作成 )
025D		;	入: BC:FCB先頭ｱﾄﾞﾚｽ
025D

025D 21EA05	MAKF:	LD	HL,MFBPNT+1	;
FCB先頭ｱﾄﾞﾚｽ保存域上位ﾎﾟｲﾝﾀ取得
0260 70			LD	(HL),B		;
FCB先頭ｱﾄﾞﾚｽ上位保存
0261 2B			DEC	HL		;
FCB先頭ｱﾄﾞﾚｽ保存域下位ﾎﾟｲﾝﾀ取得
0262 71			LD	(HL),C		;
FCB先頭ｱﾄﾞﾚｽ下位保存
0263 2AE905		LD	HL,(MFBPNT)	;
FCB先頭ｱﾄﾞﾚｽ取得
0266 EB			EX	DE,HL		;
FCB先頭ｱﾄﾞﾚｽをDEへ移動
0267 0E16		LD	C,22		;
ﾌｧｲﾙ作成BDOS機能指定
0269 CD8D05		CALL	BDOS2		;
ﾌｧｲﾙ作成BDOS機能呼び出し
026C 32DE05		LD	(BDRTCD),A	;
BDOS復帰ｺｰﾄﾞ保存
026F C9			RET			;
呼び出し元へ復帰
0270

0270		;	( 領域転送 )
0270		;	入: BC:転送先ｱﾄﾞﾚｽ E:転送ﾊﾞｲﾄ数 (SP+2):転送元ｱﾄﾞﾚｽ
0270

0270 21EF05	MVBLK:	LD	HL,TRBCNT	;
転送ﾊﾞｲﾄ数ｶｳﾝﾀ値ﾎﾟｲﾝﾀ取得
0273 73			LD	(HL),E		;
転送ﾊﾞｲﾄ数ｶｳﾝﾀ初期化
0274 2B			DEC	HL		;
転送先ｱﾄﾞﾚｽ上位値ﾎﾟｲﾝﾀ取得
0275 70			LD	(HL),B		;
転送先ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ上位設定
0276 2B			DEC	HL		;
転送先ｱﾄﾞﾚｽ下位値ﾎﾟｲﾝﾀ取得
0277 71			LD	(HL),C		;
転送先ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ下位設定
0278 2B			DEC	HL		;
転送元ｱﾄﾞﾚｽ上位値ﾎﾟｲﾝﾀ取得
0279 D1			POP	DE		;
復帰ｱﾄﾞﾚｽ一時取得(ｽﾀｯｸ ﾎﾟｲﾝﾀ+2)
027A C1			POP	BC		;
転送元ｱﾄﾞﾚｽ取得
027B 70			LD	(HL),B		;
転送元ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ上位設定
027C 2B			DEC	HL		;
転送元ｱﾄﾞﾚｽ下位値ﾎﾟｲﾝﾀ取得
027D 71			LD	(HL),C		;
転送元ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ下位設定
027E D5			PUSH	DE		;
復帰ｱﾄﾞﾚｽ再保存
027F 3AEF05	MVBLK1:	LD	A,(TRBCNT)	;
転送ﾊﾞｲﾄ数ｶｳﾝﾀ値取得
0282 3D			DEC	A		;
転送ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
0283 32EF05		LD	(TRBCNT),A	;
転送ﾊﾞｲﾄ数ｶｳﾝﾀ値更新保存
0286 FEFF		CP	-1		;
転送完了検査
0288 CAA602		JP	Z,MVBLK2	;
転送完了で分岐後呼び出し元へ復帰へ
028B		;

028B 2AEB05		LD	HL,(TRSPNT)	;
転送元ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ取得
028E E5			PUSH	HL		;
転送元ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ一時保存
028F 2AED05		LD	HL,(TRDPNT)	;
転送先ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ取得
0292 C1			POP	BC		;
転送元ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ復帰
0293 0A			LD	A,(BC)		;
転送元対応ﾊﾞｲﾄ取得
0294 77			LD	(HL),A		;
転送先に設定
0295 2AEB05		LD	HL,(TRSPNT)	;
転送元ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ取得
0298 23			INC	HL		;
転送元ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ進行(+1)
0299 22EB05		LD	(TRSPNT),HL	;
転送元ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ更新保存
029C 2AED05		LD	HL,(TRDPNT)	;
転送先ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ取得
029F 23			INC	HL		;
転送先ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ進行(+1)
02A0 22ED05		LD	(TRDPNT),HL	;
転送先ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ更新保存
02A3 C37F02		JP	MVBLK1		;
転送ﾊﾞｲﾄ数分継続へ
02A6		;

02A6 C9		MVBLK2:	RET			;
呼び出し元へ復帰
02A7

02A7		;	( 警告表示後ﾌﾟﾛｸﾞﾗﾑ終了 )
02A7		;	入: BC:警告文字列先頭ｱﾄﾞﾚｽ
02A7

02A7 21F305	ERDTRM:	LD	HL,ERSPNT+1	;
警告文字列ｱﾄﾞﾚｽ上位保存域ﾎﾟｲﾝﾀ取得
02AA 70			LD	(HL),B		;
警告文字列先頭ｱﾄﾞﾚｽ上位保存
02AB 2B			DEC	HL		;
警告文字列ｱﾄﾞﾚｽ下位保存域ﾎﾟｲﾝﾀ取得
02AC 71			LD	(HL),C		;
警告文字列先頭ｱﾄﾞﾚｽ下位保存
02AD 012801		LD	BC,NLMSG	;
復帰改行文字列先頭ｱﾄﾞﾚｽ取得
02B0 CDF701		CALL	COMSG		;
ｺﾝｿｰﾙ ｶｰｿﾙ復帰改行
02B3 012B01		LD	BC,ELMSG	;
'Error On Line '文字列ﾎﾟｲﾝﾀ取得
02B6 CDF701		CALL	COMSG		;
異常行ｺﾝｿｰﾙ表示
02B9 01B605		LD	BC,LNBF		;
行番号文字列ﾎﾟｲﾝﾀ取得
02BC CDF701		CALL	COMSG		;
行番号ｺﾝｿｰﾙ表示
02BF 2AF205		LD	HL,(ERSPNT)	;
警告文字列先頭ｱﾄﾞﾚｽ取得
02C2 44			LD	B,H		;
警告文字列先頭ｱﾄﾞﾚｽ上位指定
02C3 4D			LD	C,L		;
警告文字列先頭ｱﾄﾞﾚｽ下位指定
02C4 CDF701		CALL	COMSG		;
対応警告表示
02C7 2AF005		LD	HL,(STSPSV)	;
開始時ｽﾀｯｸ ﾎﾟｲﾝﾀ値取得
02CA F9			LD	SP,HL		;
開始時ｽﾀｯｸ ﾎﾟｲﾝﾀ復帰
02CB C9			RET			;
呼び出し元へ復帰(本ﾌﾟﾛｸﾞﾗﾑ終了)
02CC

02CC		;	* 前処理(指定ﾌｧｲﾙ有無検査) *
02CC

02CC 018100	GTSF:	LD	BC,TBF+1	;
起動時命令行先頭文字ｱﾄﾞﾚｽ取得
02CF C5			PUSH	BC		;
転送元ｱﾄﾞﾚｽ指定(ｽﾀｯｸ内)
02D0 1E7F		LD	E,128-1		;
転送ﾊﾞｲﾄ数取得
02D2 01F405		LD	BC,SCMDBF	;
起動時命令行ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得(転送先)
02D5 CD7002		CALL	MVBLK		;
起動時命令行ｺﾋﾟｰ
02D8 2A8000		LD	HL,(TBF)	;
命令行文字ﾊﾞｲﾄ数取得
02DB 2600		LD	H,0		;
上位0設定
02DD 01F405		LD	BC,SCMDBF	;
起動時命令行ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
02E0 09			ADD	HL,BC		;
最終文字ﾊﾞｲﾄの次位置ﾎﾟｲﾝﾀ取得
02E1 3600		LD	(HL),0		;
命令行ﾊﾞｯﾌｧに終了子設定
02E3 013A01		LD	BC,SFTYP	;
'SUB'文字列ﾎﾟｲﾝﾀ取得
02E6 C5			PUSH	BC		;
転送元ｱﾄﾞﾚｽ指定(ｽﾀｯｸ内)
02E7 1E03		LD	E,3		;
転送ﾊﾞｲﾄ数取得
02E9 016500		LD	BC,FCB+1+8	;
FCBﾌｧｲﾙ ﾀｲﾌﾟ先頭ﾎﾟｲﾝﾀ取得(転送先)
02EC CD7002		CALL	MVBLK		;
FCBﾌｧｲﾙ ﾀｲﾌﾟを'SUB'に初期化
02EF 015C00		LD	BC,FCB		;
FCB基準ﾎﾟｲﾝﾀ取得
02F2 CD0702		CALL	OPNF		;
対応.SUBﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)
02F5 3ADE05		LD	A,(BDRTCD)	;
BDOS復帰ｺｰﾄﾞ取得
02F8 FEFF		CP	-1		;
対応ﾌｧｲﾙ有無検査
02FA C20303		JP	NZ,GTSF1	;
対応ﾌｧｲﾙ存在で分岐
02FD		;

02FD 013D01		LD	BC,FNMSG	;
'No ~'SUB~' File Present'文字列ﾎﾟｲﾝﾀ取得
0300 CDA702		CALL	ERDTRM		;
対応ﾌｧｲﾙ不在警告表示後ﾌﾟﾛｸﾞﾗﾑ終了へ
0303		;

0303 217406	GTSF1:	LD	HL,RBFCNT	;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ内ﾎﾟｲﾝﾀ/ｶｳﾝﾀ値ﾎﾟｲﾝﾀ取得
0306 3680		LD	(HL),128	;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ内ﾎﾟｲﾝﾀ/ｶｳﾝﾀ値初期化(ﾌｧｲﾙ読みから)
0308 C9			RET			;
呼び出し元へ復帰
0309

0309		;	( 対応ﾌｧｲﾙ内1文字ﾊﾞｲﾄ取得 )
0309		;	出: A:大文字変換後取得文字ﾊﾞｲﾄ
0309

0309 3E7F	G1SF:	LD	A,128-1		;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ内最終位置ﾎﾟｲﾝﾀ値取得
030B 217406		LD	HL,RBFCNT	;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ内ﾎﾟｲﾝﾀ/ｶｳﾝﾀ値ﾎﾟｲﾝﾀ取得
030E BE			CP	(HL)		;
最終位置内か検査
030F D22503		JP	NC,G1SF2	;
最終位置内で分岐
0312		;

0312 015C00		LD	BC,FCB		;
FCB基準ﾎﾟｲﾝﾀ取得
0315 CD3D02		CALL	RDSF		;
順次ﾌｧｲﾙ読み込み
0318 FE00		CP	0		;
ﾚｺｰﾄﾞ有無検査
031A CA2003		JP	Z,G1SF1		;
有りで分岐
031D		;

031D 3E1A		LD	A,EOF		;
無しで終了(EOF)ｺｰﾄﾞ取得
031F C9			RET			;
呼び出し元へ復帰
0320		;

0320 217406	G1SF1:	LD	HL,RBFCNT	;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ内ﾎﾟｲﾝﾀ/ｶｳﾝﾀ値ﾎﾟｲﾝﾀ取得
0323 3600		LD	(HL),0		;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ内ﾎﾟｲﾝﾀ/ｶｳﾝﾀ初期化(先頭)
0325		;

0325 3A7406	G1SF2:	LD	A,(RBFCNT)	;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ内ﾎﾟｲﾝﾀ/ｶｳﾝﾀ値取得
0328 3C			INC	A		;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ内ﾎﾟｲﾝﾀ/ｶｳﾝﾀ進行(+1)
0329 327406		LD	(RBFCNT),A	;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ内ﾎﾟｲﾝﾀ/ｶｳﾝﾀ値更新保存
032C 3D			DEC	A		;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ内ｵﾌｾｯﾄ取得
032D 4F			LD	C,A		;
ｵﾌｾｯﾄ下位設定
032E 0600		LD	B,0		;
上位0設定
0330 218000		LD	HL,TBF		;
標準転送ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
0333 09			ADD	HL,BC		;
対応文字ﾊﾞｲﾄ位置ﾎﾟｲﾝﾀ取得
0334 7E			LD	A,(HL)		;
対応文字ﾊﾞｲﾄ取得
0335 327506		LD	(SFDTSV),A	;
対応文字ﾊﾞｲﾄ値保存
0338 FE0D		CP	CR		;
行終了子か検査
033A C26203		JP	NZ,G1SF3	;
行終了子以外で分岐
033D

033D		;	(( 行終了時処理 ))
033D

033D 3AB805		LD	A,(LNBF+2)	;
行番号文字列最下位桁文字ﾊﾞｲﾄ取得
0340 3C			INC	A		;
最下位桁進行(+1)
0341 32B805		LD	(LNBF+2),A	;
進行後最下位桁文字ﾊﾞｲﾄ更新保存
0344 4F			LD	C,A		;
最下位桁文字ﾊﾞｲﾄ移動
0345 3E39		LD	A,'9'		;
10進での最大文字ｺｰﾄﾞ取得
0347 B9			CP	C		;
最下位桁10進1桁以内か検査
0348 D26203		JP	NC,G1SF3	;
1桁以内で分岐
034B		;

034B 21B805		LD	HL,LNBF+2	;
行番号文字列最下位桁ﾎﾟｲﾝﾀ取得
034E 3630		LD	(HL),'0'	;
最下位桁'0'に変更
0350 2B			DEC	HL		;
行番号文字列10の桁ﾎﾟｲﾝﾀ取得
0351 7E			LD	A,(HL)		;
10の桁文字ﾊﾞｲﾄ取得
0352 3C			INC	A		;
10の桁進行(+1)
0353 77			LD	(HL),A		;
進行後10の桁文字ﾊﾞｲﾄ更新保存
0354 4F			LD	C,A		;
10の桁文字ﾊﾞｲﾄ移動
0355 3E39		LD	A,'9'		;
10進での最大文字ｺｰﾄﾞ取得
0357 B9			CP	C		;
10の桁10進1桁以内か検査
0358 D26203		JP	NC,G1SF3	;
1桁以内で分岐
035B		;

035B 21B705		LD	HL,LNBF+1	;
行番号文字列10の桁ﾎﾟｲﾝﾀ取得
035E 3630		LD	(HL),'0'	;
10の桁'0'に変更
0360 2B			DEC	HL		;
行番号文字列100の桁ﾎﾟｲﾝﾀ取得
0361 34			INC	(HL)		;
100の桁進行(+1)
0362

0362		;	(( 小文字→大文字変換 ))
0362

0362 3A7506	G1SF3:	LD	A,(SFDTSV)	;
ﾌｧｲﾙからの取得文字ﾊﾞｲﾄ値取得
0365 D661		SUB	'a'		;
'a'を0基準に変換
0367 FE1A		CP	'z'-'a'+1	;
小文字の'a～z'か検査
0369 D27403		JP	NC,G1SF4	;
'a～z'以外で分岐
036C		;

036C 3A7506		LD	A,(SFDTSV)	;
ﾌｧｲﾙからの取得文字ﾊﾞｲﾄ値取得
036F E65F		AND	01011111B	;
小文字を大文字に変換
0371 327506		LD	(SFDTSV),A	;
取得文字ﾊﾞｲﾄ大文字変換保存
0374 3A7506	G1SF4:	LD	A,(SFDTSV)	;
ﾌｧｲﾙからの取得文字ﾊﾞｲﾄ値取得
0377 C9			RET			;
呼び出し元へ復帰
0378

0378		;	( SUBMIT用$$$.SUB 1ﾚｺｰﾄﾞ順次ﾌｧｲﾙ書き込み )
0378

0378 01BB05	SF1W:	LD	BC,SFCB		;
SUBMIT用FCB基準ﾎﾟｲﾝﾀ取得
037B CD4D02		CALL	WRSF		;
SUBMIT用$$$.SUB 1ﾚｺｰﾄﾞ順次ﾌｧｲﾙ書き込み
037E FE00		CP	0		;
書き込み成否検査
0380 CA8903		JP	Z,SF1W1		;
成功で分岐
0383		;

0383 015301		LD	BC,WEMSG	;
'Disk Write Error'文字列ﾎﾟｲﾝﾀ取得
0386 CDA702		CALL	ERDTRM		;
書き込み異常警告表示後ﾌﾟﾛｸﾞﾗﾑ終了へ
0389		;

0389 C9		SF1W1:	RET			;
呼び出し元へ復帰
038A

038A		;	* 指定ﾌｧｲﾙ内容取得 *
038A

038A 217606	STIB:	LD	HL,ICMDBF	;
命令ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
038D 3600		LD	(HL),0		;
命令ﾊﾞｯﾌｧ初期化(先頭に終了子設定)
038F 210000		LD	HL,0		;
0値取得
0392 22760E		LD	(IBFCNT),HL	;
設定文字ﾊﾞｲﾄ数ｶｳﾝﾀ/ﾎﾟｲﾝﾀ初期化
0395 217C0E		LD	HL,EOLFLG	;
改行ﾌﾗｸﾞ値ﾎﾟｲﾝﾀ取得
0398 3601		LD	(HL),1		;
改行ﾌﾗｸﾞ設定(初回)
039A		;

039A 3A7C0E	STIB1:	LD	A,(EOLFLG)	;
改行ﾌﾗｸﾞ値取得
039D 1F			RRA			;
改行か検査
039E D28004		JP	NC,STIB4	;
改行以外(終了子)で分岐
03A1		;

03A1 21780E		LD	HL,ILBCNT	;
行文字ﾊﾞｲﾄ数ｶｳﾝﾀ値ﾎﾟｲﾝﾀ取得
03A4 3600		LD	(HL),0		;
改行で行文字ﾊﾞｲﾄ数ｶｳﾝﾀ初期化
03A6		;

03A6 CD0903	STIB2:	CALL	G1SF		;
対応ﾌｧｲﾙ内1文字ﾊﾞｲﾄ取得
03A9 327D0E		LD	(DTPNSV),A	;
取得文字ﾊﾞｲﾄ値保存
03AC D61A		SUB	EOF		;
EOFで0,それ以外は0以外値取得
03AE C6FF		ADD	A,0FFH		;
EOFでNC,それ以外はC
03B0 9F			SBC	A,A		;
EOFで0,それ以外は-1
03B1 F5			PUSH	AF		;
EOF検査ｺｰﾄﾞ値一時保存
03B2 3A7D0E		LD	A,(DTPNSV)	;
取得文字ﾊﾞｲﾄ値取得
03B5 D60D		SUB	CR		;
CRで0,それ以外は0以外値取得
03B7 C6FF		ADD	A,0FFH		;
CRでNC,それ以外はC
03B9 9F			SBC	A,A		;
CRで0,それ以外は-1
03BA C1			POP	BC		;
EOF検査ｺｰﾄﾞ値復帰
03BB 48			LD	C,B		;
EOF検査ｺｰﾄﾞ値ｺﾋﾟｰ
03BC A1			AND	C		;
EOForCRで0,それ以外は-1値取得
03BD 1F			RRA			;
結果をｷｬﾘｰ ﾌﾗｸﾞへ移動
03BE D26B04		JP	NC,STIE		;
EOForCRで分岐
03C1		;

03C1 3A7D0E		LD	A,(DTPNSV)	;
取得文字ﾊﾞｲﾄ値取得
03C4 FE0A		CP	LF		;
改行ｺｰﾄﾞ検査
03C6 CA6804		JP	Z,STIX1		;
改行ｺｰﾄﾞで分岐後継続へ
03C9		;

03C9 3A7D0E		LD	A,(DTPNSV)	;
取得文字ﾊﾞｲﾄ値取得
03CC FE24		CP	'$'		;
引数指定か検査
03CE C23604		JP	NZ,STIX		;
引数指定以外で分岐
03D1		;

03D1 CD0903		CALL	G1SF		;
対応ﾌｧｲﾙ内次1文字ﾊﾞｲﾄ取得
03D4 327D0E		LD	(DTPNSV),A	;
次1文字ﾊﾞｲﾄ値保存
03D7 FE24		CP	'$'		;
'$$'か検査
03D9 C2E603		JP	NZ,STIP		;
'$$'以外(引数指定)で分岐
03DC		;

03DC 2A7D0E		LD	HL,(DTPNSV)	;
取得文字ﾊﾞｲﾄ値取得
03DF 4D			LD	C,L		;
取得文字ﾊﾞｲﾄ値ｺﾋﾟｰ
03E0 CDC404		CALL	S1IB		;
書き込み用命令ﾊﾞｯﾌｧ1文字ﾊﾞｲﾄ設定
03E3 C33304		JP	STIB3		;
分岐後継続へ
03E6

03E6		;	(( 引数指定 ))
03E6

03E6 3A7D0E	STIP:	LD	A,(DTPNSV)	;
取得文字ﾊﾞｲﾄ値取得
03E9 D630		SUB	'0'		;
数値文字ﾊﾞｲﾅﾘ変換
03EB 327D0E		LD	(DTPNSV),A	;
引数番号保存
03EE 4F			LD	C,A		;
引数番号ｺﾋﾟｰ
03EF 3E09		LD	A,9		;
最大引数番号取得
03F1 B9			CP	C		;
範囲検査
03F2 D2FE03		JP	NC,STIP1	;
範囲内で分岐
03F5		;

03F5 018D01		LD	BC,PEMSG	;
'Parameter Error'文字列ﾎﾟｲﾝﾀ取得
03F8 CDA702		CALL	ERDTRM		;
引数番号範囲外警告表示後ﾌﾟﾛｸﾞﾗﾑ終了へ
03FB C33304		JP	STIB3		;
分岐後継続へ
03FE		;

03FE 217A0E	STIP1:	LD	HL,CLTOFS	;
起動時命令行検索開始ｵﾌｾｯﾄ値ﾎﾟｲﾝﾀ取得
0401 3600		LD	(HL),0		;
検索開始ｵﾌｾｯﾄ初期化(先頭)
0403 CDAD04		CALL	SKPSC		;
(空白飛ばし)有効文字先頭検索
0406		;

0406 3A7D0E	STIP2:	LD	A,(DTPNSV)	;
引数番号ｶｳﾝﾀ値取得
0409 FE00		CP	0		;
対応引数位置か検査
040B CA2204		JP	Z,STIP5		;
対応引数位置で分岐
040E		;

040E 217D0E		LD	HL,DTPNSV	;
引数番号値ﾎﾟｲﾝﾀ取得
0411 35			DEC	(HL)		;
引数番号ｶｳﾝﾀ減数(-1)
0412 CD8104	STIP3:	CALL	G1CL		;
起動時命令行1文字ﾊﾞｲﾄ取得
0415 1F			RRA			;
種別検査
0416 D21C04		JP	NC,STIP4	;
分離子or終了子で分岐
0419		;

0419 C31204		JP	STIP3		;
有効文字で継続へ
041C		;

041C CDAD04	STIP4:	CALL	SKPSC		;
(空白飛ばし)有効文字先頭検索
041F C30604		JP	STIP2		;
対応引数位置まで継続へ
0422		;

0422 CD8104	STIP5:	CALL	G1CL		;
起動時命令行1文字ﾊﾞｲﾄ取得
0425 1F			RRA			;
種別検査
0426 D23304		JP	NC,STIB3	;
分離子or終了子で分岐後継続へ
0429		;

0429 2A790E		LD	HL,(CLDTSV)	;
命令行からの取得文字ﾊﾞｲﾄ取得
042C 4D			LD	C,L		;
設定文字ﾊﾞｲﾄ指定
042D CDC404		CALL	S1IB		;
書き込み用命令ﾊﾞｯﾌｧ1文字ﾊﾞｲﾄ設定
0430 C32204		JP	STIP5		;
次の分離子or終了子まで継続へ
0433		;

0433 C36804	STIB3:	JP	STIX1		;
分岐後継続へ
0436

0436		;	(( 引数指定以外 ))
0436

0436 3A7D0E	STIX:	LD	A,(DTPNSV)	;
取得文字ﾊﾞｲﾄ値取得
0439 FE5E		CP	'^'		;
制御ｺｰﾄﾞ指定か検査
043B C26104		JP	NZ,STIS		;
制御ｺｰﾄﾞ指定以外で分岐
043E

043E		;	((( 制御ｺｰﾄﾞ )))
043E

043E CD0903	STIC:	CALL	G1SF		;
対応ﾌｧｲﾙ内1文字ﾊﾞｲﾄ取得
0441 D661		SUB	'a'		;
制御ｺｰﾄﾞ-1値取得
0443 327D0E		LD	(DTPNSV),A	;
制御ｺｰﾄﾞ-1値に更新保存
0446 4F			LD	C,A		;
制御ｺｰﾄﾞ-1値一時保存
0447 3E19		LD	A,EOF-1		;
有効最大制御ｺｰﾄﾞ-1値取得
0449 B9			CP	C		;
有効制御ｺｰﾄﾞ(01H～1AH)か検査
044A D25604		JP	NC,STIC1	;
有効制御ｺｰﾄﾞで分岐
044D		;

044D 019D01		LD	BC,ICMSG	;
'Invalid Control Character'文字列ﾎﾟｲﾝﾀ取得
0450 CDA702		CALL	ERDTRM		;
無効制御ｺｰﾄﾞ警告表示後ﾌﾟﾛｸﾞﾗﾑ終了へ
0453		;

0453 C35E04		JP	STIC2		;
分岐後継続へ
0456		;

0456 3A7D0E	STIC1:	LD	A,(DTPNSV)	;
指定制御ｺｰﾄﾞ-1値取得
0459 3C			INC	A		;
指定制御ｺｰﾄﾞ値に補正
045A 4F			LD	C,A		;
指定制御ｺｰﾄﾞ値設定
045B CDC404		CALL	S1IB		;
書き込み用命令ﾊﾞｯﾌｧ1文字ﾊﾞｲﾄ設定
045E C36804	STIC2:	JP	STIX1		;
分岐後継続へ
0461

0461		;	((( 一般文字 )))
0461

0461 2A7D0E	STIS:	LD	HL,(DTPNSV)	;
取得文字ﾊﾞｲﾄ値取得
0464 4D			LD	C,L		;
対応文字ﾊﾞｲﾄ指定
0465 CDC404		CALL	S1IB		;
書き込み用命令ﾊﾞｯﾌｧ1文字ﾊﾞｲﾄ設定
0468		;

0468 C3A603	STIX1:	JP	STIB2		;
処理へ継続へ
046B

046B		;	(( 行終了(CRorEOF) ))
046B

046B 3A7D0E	STIE:	LD	A,(DTPNSV)	;
取得文字ﾊﾞｲﾄ値取得
046E D60D		SUB	CR		;
CRで0,それ以外は0以外値取得
0470 D601		SUB	1		;
CRでC,それ以外はNC
0472 9F			SBC	A,A		;
CRで-1,CR以外は0
0473 327C0E		LD	(EOLFLG),A	;
改行ﾌﾗｸﾞ更新
0476 2A780E		LD	HL,(ILBCNT)	;
行文字ﾊﾞｲﾄ数ｶｳﾝﾀ値取得
0479 4D			LD	C,L		;
行文字ﾊﾞｲﾄ数指定
047A CDC404		CALL	S1IB		;
書き込み用命令ﾊﾞｯﾌｧに行文字ﾊﾞｲﾄ数設定
047D C39A03		JP	STIB1		;
処理へ継続へ
0480		;

0480 C9		STIB4:	RET			;
呼び出し元へ復帰
0481

0481		;	( 起動時命令行1文字ﾊﾞｲﾄ取得 )
0481		;	出: A:分離子or終了子(0)/有効文字(1)ﾌﾗｸﾞ
0481

0481 2A7A0E	G1CL:	LD	HL,(CLTOFS)	;
起動時命令行検索位置ｵﾌｾｯﾄ値取得
0484 2600		LD	H,0		;
上位0設定
0486 01F405		LD	BC,SCMDBF	;
起動時命令行ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
0489 09			ADD	HL,BC		;
命令行検索位置ﾎﾟｲﾝﾀ取得
048A 7E			LD	A,(HL)		;
対応文字ﾊﾞｲﾄ取得
048B 32790E		LD	(CLDTSV),A	;
文字ﾊﾞｲﾄ値保存
048E D620		SUB	' '		;
分離子で0,それ以外は0以外値取得
0490 D601		SUB	1		;
分離子でC,それ以外はNC
0492 9F			SBC	A,A		;
分離子で-1,それ以外は0
0493 F5			PUSH	AF		;
分離子検査ｺｰﾄﾞ値一時保存
0494 3A790E		LD	A,(CLDTSV)	;
取得文字ﾊﾞｲﾄ値取得
0497 D600		SUB	0		;
終了子で0,それ以外は0以外値取得
0499 D601		SUB	1		;
終了子でC,それ以外はNC
049B 9F			SBC	A,A		;
終了子で-1,それ以外は0
049C C1			POP	BC		;
分離子検査ｺｰﾄﾞ値復帰
049D 48			LD	C,B		;
分離子検査ｺｰﾄﾞ値ｺﾋﾟｰ
049E B1			OR	C		;
分離子or終了子で-1,それ以外は0値取得
049F 1F			RRA			;
結果をｷｬﾘｰ ﾌﾗｸﾞへ移動
04A0 DAAA04		JP	C,G1CL1		;
分離子or終了子で分岐
04A3		;

04A3 217A0E		LD	HL,CLTOFS	;
起動時命令行検索位置ｵﾌｾｯﾄ値ﾎﾟｲﾝﾀ取得
04A6 34			INC	(HL)		;
検索位置ｵﾌｾｯﾄ進行(+1)
04A7 3E01		LD	A,1		;
有効文字ﾌﾗｸﾞ取得
04A9 C9			RET			;
呼び出し元へ復帰
04AA		;

04AA 3E00	G1CL1:	LD	A,0		;
分離子or終了子ﾌﾗｸﾞ取得
04AC C9			RET			;
呼び出し元へ復帰
04AD

04AD		;	( 起動時命令行(空白飛ばし)有効文字先頭検索(ｵﾌｾｯﾄ移動) )
04AD

04AD 2A7A0E	SKPSC:	LD	HL,(CLTOFS)	;
起動時命令行検索位置ｵﾌｾｯﾄ値取得
04B0 2600		LD	H,0		;
上位0設定
04B2 01F405		LD	BC,SCMDBF	;
起動時命令行ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
04B5 09			ADD	HL,BC		;
命令行検索位置ﾎﾟｲﾝﾀ取得
04B6 7E			LD	A,(HL)		;
対応文字ﾊﾞｲﾄ取得
04B7 FE20		CP	' '		;
分離子(ｽﾍﾟｰｽ)検査
04B9 C2C304		JP	NZ,SKPSC1	;
分離子以外で分岐
04BC		;

04BC 217A0E		LD	HL,CLTOFS	;
起動時命令行検索位置ｵﾌｾｯﾄ値ﾎﾟｲﾝﾀ取得
04BF 34			INC	(HL)		;
検索位置ｵﾌｾｯﾄ進行(+1)
04C0 C3AD04		JP	SKPSC		;
分離子(ｽﾍﾟｰｽ)まで継続へ
04C3		;

04C3 C9		SKPSC1:	RET			;
呼び出し元へ復帰
04C4

04C4		;	( 書き込み用命令ﾊﾞｯﾌｧ1文字ﾊﾞｲﾄ設定 )
04C4		;	入: C:設定文字ﾊﾞｲﾄ
04C4

04C4 217B0E	S1IB:	LD	HL,IBDTSV	;
設定命令文字ﾊﾞｲﾄ保存域ﾎﾟｲﾝﾀ取得
04C7 71			LD	(HL),C		;
設定文字ﾊﾞｲﾄ保存
04C8 2A760E		LD	HL,(IBFCNT)	;
設定文字ﾊﾞｲﾄ数ｶｳﾝﾀ/ﾎﾟｲﾝﾀ値取得
04CB 23			INC	HL		;
設定文字ﾊﾞｲﾄ数ｶｳﾝﾀ/ﾎﾟｲﾝﾀ進行(+1)
04CC 22760E		LD	(IBFCNT),HL	;
設定文字ﾊﾞｲﾄ数ｶｳﾝﾀ/ﾎﾟｲﾝﾀ値更新保存
04CF 11FF07		LD	DE,1024*2-1	;
最大数-1(最終位置)値取得
04D2 CD9905		CALL	CKEND		;
ﾊﾞｯﾌｧ容量範囲検査
04D5 D2DE04		JP	NC,S1IB1	;
範囲内で分岐
04D8		;

04D8 016401		LD	BC,BOMSG	;
'Command Buffer Overflow'文字列ﾎﾟｲﾝﾀ取得
04DB CDA702		CALL	ERDTRM		;
命令ﾊﾞｯﾌｧ溢れ警告表示後ﾌﾟﾛｸﾞﾗﾑ終了へ
04DE		;

04DE 2A760E	S1IB1:	LD	HL,(IBFCNT)	;
設定文字ﾊﾞｲﾄ数ｶｳﾝﾀ/ﾎﾟｲﾝﾀ値取得
04E1 017606		LD	BC,ICMDBF	;
命令ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
04E4 09			ADD	HL,BC		;
命令ﾊﾞｯﾌｧ設定位置ﾎﾟｲﾝﾀ取得
04E5 3A7B0E		LD	A,(IBDTSV)	;
設定命令文字ﾊﾞｲﾄ値取得
04E8 77			LD	(HL),A		;
命令ﾊﾞｯﾌｧに対応文字ﾊﾞｲﾄ設定
04E9 3A780E		LD	A,(ILBCNT)	;
行文字ﾊﾞｲﾄ数ｶｳﾝﾀ値取得
04EC 3C			INC	A		;
行文字ﾊﾞｲﾄ数ｶｳﾝﾀ進行(+1)
04ED 32780E		LD	(ILBCNT),A	;
行文字ﾊﾞｲﾄ数ｶｳﾝﾀ値更新保存
04F0 4F			LD	C,A		;
行文字ﾊﾞｲﾄ数ｶｳﾝﾀ値一時保存
04F1 3E7D		LD	A,128-3		;
行最大文字ﾊﾞｲﾄ数取得
04F3 B9			CP	C		;
最大文字ﾊﾞｲﾄ数内か検査
04F4 D2FD04		JP	NC,S1IB2	;
範囲内で分岐
04F7		;

04F7 017C01		LD	BC,LOMSG	;
'Command Too Long'文字列ﾎﾟｲﾝﾀ取得
04FA CDA702		CALL	ERDTRM		;
命令行長超過警告表示後ﾌﾟﾛｸﾞﾗﾑ終了へ
04FD		;

04FD C9		S1IB2:	RET			;
呼び出し元へ復帰
04FE

04FE		;	* SUBMIT用ﾌｧｲﾙ書き出し *
04FE

04FE 01BB05	MKSF:	LD	BC,SFCB		;
SUBMIT用FCB基準ﾎﾟｲﾝﾀ取得
0501 CD2D02		CALL	DELF		;
現ﾃﾞｨｽｸのSUBMIT用$$$.SUBﾌｧｲﾙ削除
0504 21DB05		LD	HL,SFCBCR	;
SUBMIT用FCBﾚｺｰﾄﾞ位置(CR)値ﾎﾟｲﾝﾀ取得
0507 3600		LD	(HL),0		;
ﾚｺｰﾄﾞ位置(CR)初期化(先頭)
0509 01BB05		LD	BC,SFCB		;
SUBMIT用FCB基準ﾎﾟｲﾝﾀ取得
050C CD5D02		CALL	MAKF		;
現ﾃﾞｨｽｸにSUBMIT用$$$.SUBﾌｧｲﾙ作成
050F 3ADE05		LD	A,(BDRTCD)	;
BDOS復帰ｺｰﾄﾞ取得
0512 FEFF		CP	-1		;
作成成否検査
0514 C21D05		JP	NZ,MKSF1	;
成功で分岐
0517		;

0517 01B701		LD	BC,DFMSG	;
'Directory Full'文字列ﾎﾟｲﾝﾀ取得
051A CDA702		CALL	ERDTRM		;
ﾃﾞｨﾚｸﾄﾘ満杯警告表示後ﾌﾟﾛｸﾞﾗﾑ終了へ
051D		;

051D CD7A05	MKSF1:	CALL	G1IB		;
命令ﾊﾞｯﾌｧから対応行ﾊﾞｲﾄ数取得
0520 327E0E		LD	(RCDLBC),A	;
対応行ﾊﾞｲﾄ数保存
0523 FE00		CP	0		;
終了子検査
0525 CA6505		JP	Z,MKSF4		;
終了子で分岐
0528		;

0528 3A7E0E		LD	A,(RCDLBC)	;
対応行ﾊﾞｲﾄ数取得
052B 328000		LD	(TBF),A		;
対応行ﾊﾞｲﾄ数をﾚｺｰﾄﾞ ﾊﾞｯﾌｧ先頭に設定
052E 4F			LD	C,A		;
ｵﾌｾｯﾄ下位設定
052F 0600		LD	B,0		;
上位0設定
0531 218100		LD	HL,TBF+1	;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ命令文字列先頭ﾎﾟｲﾝﾀ取得
0534 09			ADD	HL,BC		;
最終命令文字位置+1ﾎﾟｲﾝﾀ取得
0535 3600		LD	(HL),0		;
行終了子設定
0537 2A7E0E		LD	HL,(RCDLBC)	;
対応行ﾊﾞｲﾄ数取得
053A 2600		LD	H,0		;
上位0設定
053C 018200		LD	BC,TBF+1+1	;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ命令文字列先頭+1ﾎﾟｲﾝﾀ取得
053F 09			ADD	HL,BC		;
行終了子の次位置ﾎﾟｲﾝﾀ取得
0540 3624		LD	(HL),'$'	;
行終了子の次に文字列終了子設定
0542		;

0542 3E00	MKSF2:	LD	A,0		;
0値取得
0544 217E0E		LD	HL,RCDLBC	;
対応行ﾊﾞｲﾄ数ｶｳﾝﾀ値ﾎﾟｲﾝﾀ取得
0547 BE			CP	(HL)		;
対応行処理終了検査
0548 D25F05		JP	NC,MKSF3	;
処理終了で分岐
054B		;

054B CD7A05		CALL	G1IB		;
命令ﾊﾞｯﾌｧから1ﾊﾞｲﾄ取得
054E 2A7E0E		LD	HL,(RCDLBC)	;
対応行ﾊﾞｲﾄ数ｶｳﾝﾀ/ﾎﾟｲﾝﾀ値取得
0551 2600		LD	H,0		;
上位0設定
0553 018000		LD	BC,TBF		;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
0556 09			ADD	HL,BC		;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ対応ﾊﾞｲﾄ位置ﾎﾟｲﾝﾀ取得
0557 77			LD	(HL),A		;
対応ﾊﾞｲﾄ設定
0558 217E0E		LD	HL,RCDLBC	;
対応行ﾊﾞｲﾄ数ｶｳﾝﾀ/ﾎﾟｲﾝﾀ値ﾎﾟｲﾝﾀ取得
055B 35			DEC	(HL)		;
対応行ﾊﾞｲﾄ数ｶｳﾝﾀ/ﾎﾟｲﾝﾀ 減数/後退(-1)
055C C34205		JP	MKSF2		;
対応行全転送まで継続へ
055F		;

055F CD7803	MKSF3:	CALL	SF1W		;
SUBMIT用$$$.SUB 1ﾚｺｰﾄﾞ順次ﾌｧｲﾙ書き込み
0562 C31D05		JP	MKSF1		;
命令ﾊﾞｯﾌｧ完了まで継続へ
0565		;

0565 01BB05	MKSF4:	LD	BC,SFCB		;
SUBMIT用FCB基準ﾎﾟｲﾝﾀ取得
0568 CD1A02		CALL	CLSF		;
SUBMIT用$$$.SUBﾌｧｲﾙ閉鎖(ｸﾛｰｽﾞ)
056B 3ADE05		LD	A,(BDRTCD)	;
BDOS復帰ｺｰﾄﾞ取得
056E FEFF		CP	-1		;
閉鎖成否検査
0570 C27905		JP	NZ,MKSF5	;
成功で分岐
0573		;

0573 01C601		LD	BC,CEMSG	;
'Cannot Close, Read/Only?'文字列ﾎﾟｲﾝﾀ取得
0576 CDA702		CALL	ERDTRM		;
ﾌｧｲﾙ閉鎖異常警告表示後ﾌﾟﾛｸﾞﾗﾑ終了へ
0579		;

0579 C9		MKSF5:	RET			;
呼び出し元へ復帰
057A

057A		;	( 命令ﾊﾞｯﾌｧから1ﾊﾞｲﾄ取得 )
057A

057A 2A760E	G1IB:	LD	HL,(IBFCNT)	;
設定文字ﾊﾞｲﾄ数ｶｳﾝﾀ/ﾎﾟｲﾝﾀ値取得
057D 2B			DEC	HL		;
設定文字ﾊﾞｲﾄ数ｶｳﾝﾀ/ﾎﾟｲﾝﾀ 減数/後退(-1)
057E 22760E		LD	(IBFCNT),HL	;
設定文字ﾊﾞｲﾄ数ｶｳﾝﾀ/ﾎﾟｲﾝﾀ値更新保存
0581 017606		LD	BC,ICMDBF	;
命令ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
0584 09			ADD	HL,BC		;
命令ﾊﾞｯﾌｧ対応位置ﾎﾟｲﾝﾀ取得
0585 7E			LD	A,(HL)		;
命令ﾊﾞｯﾌｧ対応ﾊﾞｲﾄ取得
0586 C9			RET			;
呼び出し元へ復帰
0587

0587		;	* CP/M機能移行 *
0587

0587 C30000	JWBOT:	JP	BOOT		;
ｳｫｰﾑ ﾌﾞｰﾄへ
058A C30500	BDOS1:	JP	BDENT		;
BDOS機能呼び出しへ
058D C30500	BDOS2:	JP	BDENT		;
BDOS機能呼び出しへ
0590		;

0590 CD0500		CALL	BDENT		;
BDOS機能呼び出し
0593 C9			RET			;
呼び出し元へ復帰
0594 C9			RET			;
呼び出し元へ復帰
0595 C9			RET			;
呼び出し元へ復帰
0596

0596		;	* その他 *
0596

0596 5F			LD	E,A		;
下位ﾊﾞｲﾄ設定
0597 1600		LD	D,0		;
上位0設定
0599

0599		;	( 終了位置検査 )
0599		;	入: DE:終了位置 HL:現位置  出: CF:範囲内(0)/外(1)ﾌﾗｸﾞ
0599

0599 7B		CKEND:	LD	A,E		;
終了位置下位値取得
059A 95			SUB	L		;
終了位置下位-現位置下位
059B 6F			LD	L,A		;
結果下位保存
059C 7A			LD	A,D		;
終了位置上位値取得
059D 9C			SBC	A,H		;
終了位置上位-現位置上位
059E 67			LD	H,A		;
結果上位保存
059F C9			RET			;
結果ﾌﾗｸﾞ(CF)と共に呼び出し元へ復帰
05A0

05A0		;	[ 初期化変数 ]
05A0

05A0 00000000		DB	0,0,0,0,0,0,0,0	;

05A4 00000000

05A8 00000000		DB	0,0,0,0,0,0,0,0	;

05AC 00000000

05B0 00000000		DB	0,0,0,0,0,0	;

05B4 0000

05B6		;

05B6 30303120	LNBF:	DB	'001 $'		;
行番号文字列
05BA 24

05BB		;

05BB 00		SFCB:	DB	0		;
現在のﾄﾞﾗｲﾌﾞ番号
05BC 24242420		DB	'$$$     SUB'	;
SUBMIT処理用一時ﾌｧｲﾙ名
05C0 20202020

05C4 535542

05C7 0000001A		DB	0,0,0,1AH	;
EX,S1,S2,RC
05CB 1A1A1A1A		DB	1AH,1AH,1AH,1AH	;
D0～D15
05CF 1A1A1A1A		DB	1AH,1AH,1AH,1AH	;

05D3 1A1A1A1A		DB	1AH,1AH,1AH,1AH	;

05D7 1A1A1A1A		DB	1AH,1AH,1AH,1AH	;

05DB 1A		SFCBCR	DB	1AH		;

05DC

05DC		STRPNT	DS	2		;
ｺﾝｿｰﾙ文字列表示用文字列先頭ｱﾄﾞﾚｽ
05DE		BDRTCD	DS	1		;
ﾌｧｲﾙ操作BDOS復帰ｺｰﾄﾞ
05DF		OFBPNT	DS	2		;
ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)用FCB先頭ｱﾄﾞﾚｽ
05E1		CFBPNT	DS	2		;
ﾌｧｲﾙ閉鎖(ｸﾛｰｽﾞ)用FCB先頭ｱﾄﾞﾚｽ
05E3		DFBPNT	DS	2		;
ﾌｧｲﾙ削除用FCB先頭ｱﾄﾞﾚｽ
05E5		RFBPNT	DS	2		;
順次ﾌｧｲﾙ読み込み用FCB先頭ｱﾄﾞﾚｽ
05E7		WFBPNT	DS	2		;
順次ﾌｧｲﾙ書き込み用FCB先頭ｱﾄﾞﾚｽ
05E9		MFBPNT	DS	2		;
ﾌｧｲﾙ作成用FCB先頭ｱﾄﾞﾚｽ
05EB		TRSPNT	DS	2		;
転送元ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ
05ED		TRDPNT	DS	2		;
転送先ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ
05EF		TRBCNT	DS	1		;
転送ﾊﾞｲﾄ数ｶｳﾝﾀ(-1で終了)
05F0		STSPSV	DS	2		;
開始時ｽﾀｯｸ ﾎﾟｲﾝﾀ値
05F2		ERSPNT	DS	2		;
警告文字列ｱﾄﾞﾚｽ
05F4

05F4		;	[ 未初期化変数 ]
05F4

05F4		SCMDBF	DS	128		;
起動時命令行ﾊﾞｯﾌｧ
0674		;

0674		RBFCNT	DS	1		;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ内ﾎﾟｲﾝﾀ/ｶｳﾝﾀ
0675		SFDTSV	DS	1		;
ﾌｧｲﾙからの取得文字ﾊﾞｲﾄ値
0676		;

0676		ICMDBF	DS	1024*2		;
設定用命令ﾊﾞｯﾌｧ
0E76		;

0E76		IBFCNT	DS	2		;
設定文字ﾊﾞｲﾄ数ｶｳﾝﾀ/ﾎﾟｲﾝﾀ
0E78		ILBCNT	DS	1		;
命令ﾊﾞｯﾌｧ設定用行文字ﾊﾞｲﾄ数ｶｳﾝﾀ
0E79		CLDTSV	DS	1		;
起動時命令行引数検索用文字ﾊﾞｲﾄ保存域
0E7A		CLTOFS	DS	1		;
起動時命令行検索開始ｵﾌｾｯﾄ
0E7B		IBDTSV	DS	1		;
設定命令文字ﾊﾞｲﾄ保存域
0E7C		EOLFLG	DS	1		;
取得時用改行ﾌﾗｸﾞ(CRで-1,CR以外は0)
0E7D		DTPNSV	DS	1		;
処理文字ﾊﾞｲﾄ値:引数番号/ｶｳﾝﾀ (複数目的使用)
0E7E		RCDLBC	DS	1		;
ﾚｺｰﾄﾞ設定行処理用ﾊﾞｲﾄ数ｶｳﾝﾀ/ﾎﾟｲﾝﾀ
0E7F

0E7F			DS	2*10		;
ｽﾀｯｸ領域
0E93		STACK	EQU	$		;
初期ｽﾀｯｸ ﾎﾟｲﾝﾀ値
0E93

0E93			END


1.5 XSUB ｿｰｽ

0000		;***************************

0000		;*			   *

0000		;*  CP/M-80 XSUB  Ver 2.0  *

0000		;*			   *

0000		;***************************

0000

0000			TITLE	XSUB

0000

0000		;	* CP/Mｼｽﾃﾑ ﾊﾟﾗﾒｰﾀ領域定義 *
0000

0000		BOOT	EQU	0000H		;
ﾌﾞｰﾄ開始分岐先頭ﾄﾞﾚｽ
0005		BDENT	EQU	0005H		;
BDOS開始分岐先頭ﾄﾞﾚｽ
005C		FCB	EQU	005CH		;
ﾌｧｲﾙ制御領域(File Control Block)先頭ｱﾄﾞﾚｽ
0080		TBF	EQU	0080H		;
標準転送ﾊﾞｯﾌｧ先頭ｱﾄﾞﾚｽ
0100		TPA	EQU	0100H		;
一時ﾌﾟﾛｸﾞﾗﾑ領域(Transient Program Area)先頭ｱﾄﾞﾚｽ
0000

0000		;	* 制御ｺｰﾄﾞ定義 *
0000

000A		LF	EQU	0AH		;
    行終了(ｶｰｿﾙ改行)
000D		CR	EQU	0DH		;
Enter	行終了(ｶｰｿﾙ復帰)
001A		EOF	EQU	1AH		;
    ﾌｧｲﾙ終端(EOF)
0000

0000

0000		;	[ ｺｰﾄﾞ ]
0000

0000			ORG	TPA		;
ﾌﾟﾛｸﾞﾗﾑ開始ｱﾄﾞﾚｽ
0100

0100 01BC01		LD	BC,REND-RTOP	;
XSUB常駐部ﾊﾞｲﾄ数取得
0103 C35701		JP	START		;
実処理開始へ
0106

0106 20457874		DB	' Extended Submit Vers 2.0'

010A 656E6465

010E 64205375

0112 626D6974

0116 20566572

011A 7320322E

011E 30

011F 58737562	APMSG:	DB	'Xsub Already Present$'

0123 20416C72

0127 65616479

012B 20507265

012F 73656E74

0133 24

0134 52657175	RVMSG:	DB	'Requires CP/M Version 2.0 or later$'

0138 69726573

013C 2043502F

0140 4D205665

0144 7273696F

0148 6E20322E

014C 30206F72

0150 206C6174

0154 657224

0157

0157		;	[ 主処理 ]
0157

0157 C5		START:	PUSH	BC		;
XSUB常駐部ﾊﾞｲﾄ数一時保存
0158 3A0600		LD	A,(BDENT+1)	;
BDOS機能先頭ｱﾄﾞﾚｽ下位取得
015B FE06		CP	06H		;
標準CP/Mか検査(標準番地=xx06H)
015D C27901		JP	NZ,BRK		;
非標準で打ち切り終了へ
0160

0160		;	( XSUB常駐(識別子)検査 )
0160

0160 2A0600	CKID:	LD	HL,(BDENT+1)	;
BDOS機能先頭ｱﾄﾞﾚｽ取得
0163 23			INC	HL		;
(+1)XSUB既存時の識別子ｱﾄﾞﾚｽ取得(+3)
0164 23			INC	HL		;
(+2)
0165 23			INC	HL		;
(+3)
0166 11DB01		LD	DE,KWSTR	;
基準XSUB識別子基準ﾎﾟｲﾝﾀ取得
0169 0E04		LD	C,4		;
識別子ﾊﾞｲﾄ数ｶｳﾝﾀ取得
016B 1A		CKID1:	LD	A,(DE)		;
基準対応ﾊﾞｲﾄ取得
016C BE			CP	(HL)		;
ﾒﾓﾘ上の対応ﾊﾞｲﾄ取得と比較
016D C28301		JP	NZ,CKVER	;
不一致(XSUB不在)で分岐
0170		;

0170 23			INC	HL		;
ﾒﾓﾘ上XSUB識別子ﾎﾟｲﾝﾀ進行(+1)
0171 13			INC	DE		;
基準XSUB識別子ﾎﾟｲﾝﾀ進行(+1)
0172 0D			DEC	C		;
識別子ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
0173 CA7901		JP	Z,BRK		;
全一致(XSUB既存)で打ち切り終了へ
0176		;

0176 C36B01		JP	CKID1		;
全ﾊﾞｲﾄ比較か不一致まで継続へ
0179

0179		;	( XSUB既存表示後本ﾌﾟﾛｸﾞﾗﾑ終了 )
0179

0179 0E09	BRK:	LD	C,9		;
ｺﾝｿｰﾙ文字列出力BDOS機能指定
017B 111F01		LD	DE,APMSG	;
XSUB既存警告文字列基準ﾎﾟｲﾝﾀ取得
017E CD0500		CALL	BDENT		;
XSUB既存警告表示
0181 C1			POP	BC		;
ｽﾀｯｸ ﾎﾟｲﾝﾀ補正(+2)
0182 C9			RET			;
CCPへ復帰(本ﾌﾟﾛｸﾞﾗﾑ終了)
0183

0183		;	( CP/Mﾊﾞｰｼﾞｮﾝ検査 )
0183

0183 0E0C	CKVER:	LD	C,12		;
ﾊﾞｰｼﾞｮﾝ番号取得BDOS機能指定
0185 CD0500		CALL	BDENT		;
ﾊﾞｰｼﾞｮﾝ番号取得
0188 FE20		CP	20H		;
2.0以降か検査
018A D29701		JP	NC,MOVE		;
2.0以降で分岐
018D		;

018D 0E09		LD	C,9		;
ｺﾝｿｰﾙ文字列出力BDOS機能指定
018F 113401		LD	DE,RVMSG	;
Ver警告文字列基準ﾎﾟｲﾝﾀ取得
0192 CD0500		CALL	BDENT		;
Ver警告表示
0195 C1			POP	BC		;
ｽﾀｯｸ ﾎﾟｲﾝﾀ補正(+2)
0196 C9			RET			;
CCPへ復帰(本ﾌﾟﾛｸﾞﾗﾑ終了)
0197

0197		;	( XSUB常駐部ﾒﾓﾘ展開 )
0197

0197 210700	MOVE:	LD	HL,BDENT+2	;
BDOS機能先頭ｱﾄﾞﾚｽ上位値ﾎﾟｲﾝﾀ取得
019A 7E			LD	A,(HL)		;
BDOS機能先頭ｱﾄﾞﾚｽ上位値取得
019B 3D			DEC	A		;
XSUB常駐部256ﾊﾞｲﾄ単位端数分減数
019C D608		SUB	2*1024/256	;
CCP領域分減数
019E C1			POP	BC		;
XSUB常駐部ﾊﾞｲﾄ数復帰
019F C5			PUSH	BC		;
XSUB常駐部ﾊﾞｲﾄ数一時保存
01A0 90			SUB	B		;
XSUB常駐部256ﾊﾞｲﾄ単位分減数
01A1 57			LD	D,A		;
XSUB常駐部先頭ｱﾄﾞﾚｽ上位設定
01A2 1E00		LD	E,0		;
XSUB常駐部先頭ｱﾄﾞﾚｽ下位設定
01A4 D5			PUSH	DE		;
XSUB常駐部先頭ｱﾄﾞﾚｽ一時保存
01A5 210002		LD	HL,RCPNT	;
XSUB常駐ｺｰﾄﾞ基準ﾎﾟｲﾝﾀ取得
01A8 78		MOVE1:	LD	A,B		;
転送ﾊﾞｲﾄ数ｶｳﾝﾀ上位取得
01A9 B1			OR	C		;
転送完了検査
01AA CAB501		JP	Z,RELOC		;
転送完了で分岐
01AD		;

01AD 0B			DEC	BC		;
転送ﾊﾞｲﾄ数ｶｳﾝﾀ減数
01AE 7E			LD	A,(HL)		;
対応XSUB常駐ｺｰﾄﾞ ﾊﾞｲﾄ取得
01AF 12			LD	(DE),A		;
対応ｺｰﾄﾞ ﾊﾞｲﾄをﾒﾓﾘ上に設定
01B0 13			INC	DE		;
XSUB常駐ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ進行(+1)
01B1 23			INC	HL		;
XSUB常駐ｺｰﾄﾞ ﾎﾟｲﾝﾀ進行(+1)
01B2 C3A801		JP	MOVE1		;
転送ﾊﾞｲﾄ数分継続へ
01B5

01B5		;	( ｱﾄﾞﾚｽ再配置 )
01B5

01B5 D1		RELOC:	POP	DE		;
XSUB常駐部先頭ｱﾄﾞﾚｽ復帰
01B6 C1			POP	BC		;
XSUB常駐部ﾊﾞｲﾄ数復帰
01B7 E5			PUSH	HL		;
再配置ｱﾄﾞﾚｽ情報ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ一時保存
01B8 62			LD	H,D		;
XSUB常駐部先頭ｱﾄﾞﾚｽ上位を保存
01B9 78		RELOC1:	LD	A,B		;
XSUB常駐部ﾊﾞｲﾄ数ｶｳﾝﾀ上位取得
01BA B1			OR	C		;
全ﾊﾞｲﾄ完了か検査
01BB CAD701		JP	Z,ENTREG	;
全ﾊﾞｲﾄ完了で分岐
01BE		;

01BE 0B			DEC	BC		;
XSUB常駐部ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
01BF 7B			LD	A,E		;
XSUB常駐部ｱﾄﾞﾚｽ下位取得
01C0 E607		AND	00000111B	;
8ﾊﾞｲﾄ境界か検査
01C2 C2CA01		JP	NZ,RELOC2	;
8ﾊﾞｲﾄ境界以外で分岐
01C5		;

01C5 E3			EX	(SP),HL		;
H:XSUB常駐部先頭ｱﾄﾞﾚｽ上位保存,HL:再配置情報ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ復帰
01C6 7E			LD	A,(HL)		;
再配置ｱﾄﾞﾚｽ ﾃｰﾌﾞﾙの対応ﾊﾞｲﾄ値取得
01C7 23			INC	HL		;
再配置ｱﾄﾞﾚｽ ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ進行(+1)
01C8 E3			EX	(SP),HL		;
HL:再配置情報ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ保存,H:XSUB常駐部先頭ｱﾄﾞﾚｽ上位復帰
01C9 6F			LD	L,A		;
再配置ﾋﾞｯﾄ値保存
01CA 7D		RELOC2:	LD	A,L		;
再配置ﾋﾞｯﾄ値取得
01CB 17			RLA			;
対応再配置ﾋﾞｯﾄをｷｬﾘｰ ﾌﾗｸﾞへ移動
01CC 6F			LD	L,A		;
移動後再配置ﾋﾞｯﾄ値保存
01CD D2D301		JP	NC,RELOC3	;
対応ﾊﾞｲﾄ再配置無しで分岐
01D0		;

01D0 1A			LD	A,(DE)		;
対応ﾊﾞｲﾄ値取得
01D1 84			ADD	A,H		;
再配置先ｱﾄﾞﾚｽ取得(+XSUB常駐部先頭ｱﾄﾞﾚｽ上位)
01D2 12			LD	(DE),A		;
対応ﾊﾞｲﾄ ｱﾄﾞﾚｽ再配置
01D3 13		RELOC3:	INC	DE		;
XSUB常駐部ｱﾄﾞﾚｽ進行(+1)
01D4 C3B901		JP	RELOC1		;
全ﾊﾞｲﾄ完了まで継続へ
01D7

01D7 D1		ENTREG:	POP	DE		;
ｽﾀｯｸ ﾎﾟｲﾝﾀ補正(+2)
01D8 2E00		LD	L,0		;
XSUB常駐部先頭ｱﾄﾞﾚｽ下位設定
01DA E9			JP	(HL)		;
XSUB常駐部先頭へ移行
01DB

01DB 78737562	KWSTR:	DB	'xsub'		;
基準XSUB識別子
01DF

01DF			ORG	($+255)& 0FF00H	;
次256ﾊﾞｲﾄ境界先頭ｱﾄﾞﾚｽ
0200

0200		RCPNT	EQU	$		;
XSUB常駐部先頭ｱﾄﾞﾚｽ
0200

0200			.PHASE 	0000H		;
再配置のため0番地としてｱｾﾝﾌﾞﾙ
0000

0000 C30D00	RTOP:	JP	XSTART		;
XSUB実行開始へ
0003

0003			DS	3		;
BDOS移行開始番地(xx06H)と下位ﾊﾞｲﾄ同一化
0006

0006 C35D00	XBDENT:	JP	XBDOS		;
代替BDOS機能処理(ｺﾝｿｰﾙ文字列入力,DMAｱﾄﾞﾚｽ設定機能捕捉)へ
0009

0009 78737562	KWREG:	DB	'xsub'		;
常駐部用XSUB識別子
000D

000D		;	( XSUB常駐開始処理 )
000D

000D 2A0100	XSTART:	LD	HL,(BOOT+1)	;
現ﾌﾞｰﾄ ｱﾄﾞﾚｽ取得
0010 222D00		LD	(BOOTSV),HL	;
現ﾌﾞｰﾄ ｱﾄﾞﾚｽ保存
0013 212F00		LD	HL,XBOOT	;
XSUB用ﾌﾞｰﾄ ｱﾄﾞﾚｽ取得
0016 220100		LD	(BOOT+1),HL	;
XSUB用ﾌﾞｰﾄ ｱﾄﾞﾚｽに変更
0019 2A0600		LD	HL,(BDENT+1)	;
BDOS機能ｱﾄﾞﾚｽ取得
001C 222B00		LD	(BDENT1+1),HL	;
XSUB内部用BDOS機能移行ｱﾄﾞﾚｽ設定
001F 210600		LD	HL,XBDENT	;
XSUB用BDOS機能ｱﾄﾞﾚｽ取得
0022 220600		LD	(BDENT+1),HL	;
XSUB用BDOS機能ｱﾄﾞﾚｽに変更
0025 E1			POP	HL		;
CCPへの復帰ｱﾄﾞﾚｽ取得
0026 22BC01		LD	(CCPRTA),HL	;
CCPへの復帰ｱﾄﾞﾚｽ保存
0029 E9			JP	(HL)		;
CCPへ復帰
002A

002A C30000	BDENT1:	JP	0		;
実際のBDOS機能処理へ移行
002D		;

002D 00		BOOTSV:	NOP			;
実際のﾌﾞｰﾄ ｱﾄﾞﾚｽ
002E C9			RET			;
[上行との2行は本来DS 2]
002F

002F		;	( 代替ﾌﾞｰﾄ処理 )
002F

002F 31DE01	XBOOT:	LD	SP,STACK	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化
0032 0E09		LD	C,9		;
ｺﾝｿｰﾙ文字列出力BDOS機能指定
0034 114D00		LD	DE,ACMSG	;
XSUB有効文字列基準ﾎﾟｲﾝﾀ取得
0037 CD2A00		CALL	BDENT1		;
XSUB有効中警告表示
003A 218000		LD	HL,TBF		;
標準転送ﾊﾞｯﾌｧ基準ｱﾄﾞﾚｽ取得
003D 22BA01		LD	(DMAADR),HL	;
DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ初期化
0040 CD8100		CALL	OSTDMA		;
DMAｱﾄﾞﾚｽ初期値設定(実BDOS機能)
0043 210600		LD	HL,XBDENT	;
XSUB用BDOS機能ｱﾄﾞﾚｽ取得
0046 220600		LD	(BDENT+1),HL	;
XSUB用BDOS機能ｱﾄﾞﾚｽに変更
0049 2ABC01		LD	HL,(CCPRTA)	;
CCPへの復帰ｱﾄﾞﾚｽ取得
004C E9			JP	(HL)		;
CCPへ復帰
004D		;

004D 0D0A2878	ACMSG:	DB	CR,LF,'(xsub active)$'

0051 73756220

0055 61637469

0059 76652924

005D

005D		;	( 捕捉BDOS機能処理 )
005D

005D E1		XBDOS:	POP	HL		;
呼び出し元復帰ｱﾄﾞﾚｽ取得
005E E5			PUSH	HL		;
呼び出し元復帰ｱﾄﾞﾚｽ再保存
005F 7C			LD	A,H		;
呼び出し元復帰ｱﾄﾞﾚｽ上位取得
0060 FEFF		CP	-1		;
ｼｽﾃﾑ系以外(XSUB常駐部-256以下ｱﾄﾞﾚｽ)からか検査
0062 D22A00		JP	NC,BDENT1	;
ｼｽﾃﾑ系で実BDOS機能実行へ
0065		;

0065 79			LD	A,C		;
指定BDOS機能番号取得
0066 FE0A		CP	10		;
ｺﾝｿｰﾙ文字列入力指定か検査
0068 CAA500		JP	Z,XMSGI		;
ｺﾝｿｰﾙ文字列入力指定で分岐
006B		;

006B FE1A		CP	26		;
DMAｱﾄﾞﾚｽ設定指定か検査
006D C22A00		JP	NZ,BDENT1	;
それ以外で実BDOS機能実行へ分岐
0070		;

0070 EB			EX	DE,HL		;
指定DMAｱﾄﾞﾚｽをHLへ一時移動
0071 22BA01		LD	(DMAADR),HL	;
指定DMAｱﾄﾞﾚｽ保存
0074 EB			EX	DE,HL		;
指定DMAｱﾄﾞﾚｽをDEへ復帰
0075 C32A00		JP	BDENT1		;
実BDOS機能実行へ
0078

0078		;	( XSUB用DMAｱﾄﾞﾚｽ設定 )
0078

0078 0E1A	XSTDMA:	LD	C,26		;
DMAｱﾄﾞﾚｽ設定BDOS機能指定
007A 113701		LD	DE,RCDBF	;
XSUB用転送ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
007D CD2A00		CALL	BDENT1		;
DMAｱﾄﾞﾚｽ設定(実BDOS機能)
0080 C9			RET			;
呼び出し元へ復帰
0081

0081		;	( (元の)DMAｱﾄﾞﾚｽ復帰設定 )
0081

0081 0E1A	OSTDMA:	LD	C,26		;
DMAｱﾄﾞﾚｽ設定BDOS機能指定
0083 2ABA01		LD	HL,(DMAADR)	;
現DMAｱﾄﾞﾚｽ取得
0086 EB			EX	DE,HL		;
現DMAｱﾄﾞﾚｽをDEへ移動
0087 CD2A00		CALL	BDENT1		;
現DMAｱﾄﾞﾚｽ設定(実BDOS機能)
008A C9			RET			;
呼び出し元へ復帰
008B

008B		;	( 自ﾊﾞｯﾌｧでのﾌｧｲﾙ操作 )
008B		;	入: C:BDOS機能番号 DE:FCB基準ﾎﾟｲﾝﾀ  出: A:成功(0)/失敗(-1)ﾌﾗｸﾞ
008B

008B C5		SFXJ:	PUSH	BC		;
対応ﾌｧｲﾙ操作BDOS機能番号一時保存
008C D5			PUSH	DE		;
SUBMIT用FCB基準ﾎﾟｲﾝﾀ一時保存
008D CD7800		CALL	XSTDMA		;
XSUB用DMAｱﾄﾞﾚｽ設定
0090 D1			POP	DE		;
SUBMIT用FCB基準ﾎﾟｲﾝﾀ復帰
0091 C1			POP	BC		;
対応ﾌｧｲﾙ操作BDOS機能番号復帰
0092 CD2A00		CALL	BDENT1		;
SUBMIT用ﾌｧｲﾙ対応操作実行(実BDOS機能)
0095 F5			PUSH	AF		;
BDOS機能復帰ｺｰﾄﾞ一時保存
0096 CD8100		CALL	OSTDMA		;
(元の)DMAｱﾄﾞﾚｽ復帰設定
0099 F1			POP	AF		;
BDOS機能復帰ｺｰﾄﾞ復帰
009A C9			RET			;
呼び出し元へ復帰
009B

009B		;	( SUBMIT用ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ) )
009B		;	出: ZF:成功(0)/失敗(1)ﾌﾗｸﾞ
009B

009B 0E0F	SOPN:	LD	C,15		;
ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)BDOS機能指定
009D 111601		LD	DE,SFCB		;
SUBMIT用FCB基準ﾎﾟｲﾝﾀ取得
00A0 CD8B00		CALL	SFXJ		;
SUBMIT用ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)処理
00A3 3C			INC	A		;
成否ﾌﾗｸﾞ(ZF)取得
00A4 C9			RET			;
呼び出し元へ復帰
00A5

00A5		;	( 代替ｺﾝｿｰﾙ文字列入力処理 )
00A5

00A5 D5		XMSGI:	PUSH	DE		;
指定文字列ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ一時保存
00A6 CD9B00		CALL	SOPN		;
SUBMIT用ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)処理
00A9 D1			POP	DE		;
指定文字列ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ復帰
00AA 0E0A		LD	C,10		;
ｺﾝｿｰﾙ文字列入力BDOS機能指定
00AC CA0D01		JP	Z,RTBOT		;
SUBMIT用ﾌｧｲﾙ無しで後処理へ分岐
00AF		;

00AF D5			PUSH	DE		;
指定文字列ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ一時保存
00B0 3A2501		LD	A,(SFCBRC)	;
FCBのﾚｺｰﾄﾞ数(RC)値取得
00B3 B7			OR	A		;
残ﾚｺｰﾄﾞ有無検査
00B4 CA2A00		JP	Z,BDENT1	;
残ﾚｺｰﾄﾞ無しでｺﾝｿｰﾙ文字列入力処理機能実行へ(実BDOS機能)
00B7		;

00B7 3D			DEC	A		;
最終ﾚｺｰﾄﾞ番号取得
00B8 323601		LD	(SFCBCR),A	;
FCBﾚｺｰﾄﾞ番号(CR)値に最終ﾚｺｰﾄﾞ指定
00BB 0E14		LD	C,20		;
順次ﾌｧｲﾙ読み込みBDOS機能指定
00BD 111601		LD	DE,SFCB		;
SUBMIT用FCB基準ﾎﾟｲﾝﾀ取得
00C0 CD8B00		CALL	SFXJ		;
対応ﾚｺｰﾄﾞ読み込み
00C3 213701		LD	HL,RCDBF	;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
00C6 5E			LD	E,(HL)		;
登録文字ﾊﾞｲﾄ数取得
00C7 1600		LD	D,0		;
上位0設定
00C9 19			ADD	HL,DE		;
最終文字位置ﾎﾟｲﾝﾀ取得
00CA 23			INC	HL		;
次位置ﾎﾟｲﾝﾀ取得
00CB 360D		LD	(HL),CR		;
復帰ｺｰﾄﾞ設定
00CD 23			INC	HL		;
その次の位置ﾎﾟｲﾝﾀ取得
00CE 360A		LD	(HL),LF		;
改行ｺｰﾄﾞ設定
00D0 23			INC	HL		;
更にその次の位置ﾎﾟｲﾝﾀ取得
00D1 3624		LD	(HL),'$'	;
文字列終了子設定
00D3 0E09		LD	C,9		;
ｺﾝｿｰﾙ文字列出力BDOS機能指定
00D5 113801		LD	DE,RCDBF+1	;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ文字列先頭ﾎﾟｲﾝﾀ取得
00D8 CD2A00		CALL	BDENT1		;
対応行内容表示(実BDOS機能)
00DB E1			POP	HL		;
指定文字列ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ復帰
00DC 113701		LD	DE,RCDBF	;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
00DF 1A			LD	A,(DE)		;
登録文字ﾊﾞｲﾄ数取得
00E0 BE			CP	(HL)		;
指定最大ﾊﾞｲﾄ数以内か検査
00E1 DAE600		JP	C,XMSGI1	;
以内で分岐
00E4		;

00E4 7E			LD	A,(HL)		;
指定最大ﾊﾞｲﾄ数取得
00E5 12			LD	(DE),A		;
登録文字ﾊﾞｲﾄ数を指定最大ﾊﾞｲﾄ数に変更
00E6 4F		XMSGI1:	LD	C,A		;
転送文字列ﾊﾞｲﾄ数ｺﾋﾟｰ
00E7 0C			INC	C		;
入力ﾊﾞｲﾄ数用ﾊﾞｲﾄ分補正(+1)
00E8 23			INC	HL		;
指定ﾊﾞｯﾌｧの入力ﾊﾞｲﾄ数値位置ﾎﾟｲﾝﾀ取得
00E9 1A		XMSGI2:	LD	A,(DE)		;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ内対応ﾊﾞｲﾄ取得
00EA 77			LD	(HL),A		;
指定ﾊﾞｯﾌｧに対応ﾊﾞｲﾄ設定
00EB 23			INC	HL		;
指定ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ進行(+1)
00EC 13			INC	DE		;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ進行(+1)
00ED 0D			DEC	C		;
転送ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
00EE C2E900		JP	NZ,XMSGI2	;
転送完了まで継続へ
00F1		;

00F1 0E10		LD	C,16		;
ﾌｧｲﾙ閉鎖(ｸﾛｰｽﾞ)BDOS機能指定
00F3 111601		LD	DE,SFCB		;
SUBMIT用FCB基準ﾎﾟｲﾝﾀ取得
00F6 210E00		LD	HL,14		;
FCB内S2値ｵﾌｾｯﾄ取得
00F9 19			ADD	HL,DE		;
FCB内S2値位置ﾎﾟｲﾝﾀ取得
00FA 3600		LD	(HL),0		;
S2値変更無しﾌﾗｸﾞ解除
00FC 3A3601		LD	A,(SFCBCR)	;
現ﾚｺｰﾄﾞ位置番号(CR)値取得(1ﾚｺｰﾄﾞ読みによりCR=RC)
00FF 3D			DEC	A		;
ﾚｺｰﾄﾞ数-1値取得
0100 322501		LD	(SFCBRC),A	;
ﾚｺｰﾄﾞ数減数(-1)更新設定
0103 B7			OR	A		;
残ﾚｺｰﾄﾞ有無検査
0104 C20901		JP	NZ,XMSGI3	;
残ﾚｺｰﾄﾞ有りで分岐
0107		;

0107 0E13		LD	C,19		;
無しでﾌｧｲﾙ削除BDOS機能指定
0109 CD8B00	XMSGI3:	CALL	SFXJ		;
SUBMIT用ﾌｧｲﾙ閉鎖(ｸﾛｰｽﾞ)または削除
010C C9			RET			;
呼び出し元へ復帰
010D

010D		;	( ﾌﾞｰﾄ ｱﾄﾞﾚｽ復帰(その後のﾌﾞｰﾄでXSUB常駐解除) )
010D

010D 2A2D00	RTBOT:	LD	HL,(BOOTSV)	;
実際のﾌﾞｰﾄ ｱﾄﾞﾚｽ取得
0110 220100		LD	(BOOT+1),HL	;
ﾌﾞｰﾄ ｱﾄﾞﾚｽを元に復帰
0113 C32A00		JP	BDENT1		;
ｺﾝｿｰﾙ文字列入力処理機能実行へ(実BDOS機能)
0116

0116 01		SFCB:	DB	1		;
Aﾄﾞﾗｲﾌﾞ
0117 24242420		DB	'$$$     SUB'	;
SUBMIT処理用一時ﾌｧｲﾙ名
011B 20202020

011F 535542

0122 000000		DB	0,0,0		;
EX,S1,S2
0125		;

0125		SFCBRC	DS	1		;
ﾚｺｰﾄﾞ数(RC)
0126			DS	16		;
D0～D15
0136		SFCBCR	DS	1		;
ﾚｺｰﾄﾞ位置(CR)
0137

0137		RCDBF	DS	128+3		;
SUBMIT用ﾌｧｲﾙ ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ(1行分/1ﾚｺｰﾄﾞ)+CR+LF+$
01BA

01BA 8000	DMAADR	DW	TBF		;
DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ値
01BC

01BC		REND	EQU	$		;
常駐部転送終了位置+1ｱﾄﾞﾚｽ
01BC

01BC		CCPRTA	EQU	$		;
CCP復帰ｱﾄﾞﾚｽ値
01DE		STACK	EQU	CCPRTA+2+2*16	;
初期ｽﾀｯｸ ﾎﾟｲﾝﾀ値
01BC

01BC			.DEPHASE

03BC

03BC

03BC		;	* 再配置ｱﾄﾞﾚｽ情報ﾃｰﾌﾞﾙ (ﾋﾞｯﾄ単位,MSBが下位ｱﾄﾞﾚｽ) *
03BC

03BC 20802402	RLATBL:	DB	00100000B,10000000B,00100100B,00000010B

03C0 40804241		DB	01000000B,10000000B,01000010B,01000001B

03C4 24100000		DB	00100100B,00010000B,00000000B,00000000B

03C8 08211109		DB	00001000B,00100001B,00010001B,00001001B

03CC 04410881		DB	00000100B,01000001B,00001000B,10000001B

03D0 20822221		DB	00100000B,10000010B,00100010B,00100001B

03D4 24000122		DB	00100100B,00000000B,00000001B,00100010B

03D8 10008402		DB	00010000B,00000000B,10000100B,00000010B

03DC 221104		DB	00100010B,00010001B,00000100B

03DF

03DF			END


付録 1.1 序説

CP/Mは補助記憶装置としてﾌﾛｯﾋﾟｰ ﾃﾞｨｽｸまたはｳｨﾝﾁｪｽﾀ ﾊｰﾄﾞ ﾃﾞｨｽｸを使用するﾏｲｸﾛ ｺﾝﾋﾟｭｰﾀ開発ｼｽﾃﾑ用ﾓﾆﾀ制御ﾌﾟﾛｸﾞﾗﾑです。 CP/MはIntel 8080ﾏｲｸﾛ ｺﾝﾋﾟｭｰﾀを基としたｺﾝﾋﾟｭｰﾀ ｼｽﾃﾑの使用において、ｱｾﾝﾌﾞﾙとﾌﾟﾛｸﾞﾗﾑ検査完了にわたる利便性でﾌﾟﾛｸﾞﾗﾑ作成、保存、編集用環境を提供します。 CP/Mは最低20Kﾊﾞｲﾄの主記憶(ﾒﾓﾘ)とIntel 8080, Zilog Z80(または上位互換)CPU、16台までのﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞを使用するどんなｺﾝﾋﾟｭｰﾀでも実行するために容易に変更できます。 どの点のﾊｰﾄﾞｳｪｱ環境に対して変更が必要かの詳細は第6章で得られます。 標準Digital Research版はIntel 単密度MDS800で動作するため、様々な異なるﾊｰﾄﾞｳｪｱ製造業者がそれら自身のCP/M用入出力(I/O)ﾄﾞﾗｲﾊﾞをｻﾎﾟｰﾄします。

CP/Mﾓﾆﾀは理解し易いﾌｧｲﾙ管理機構を通してﾌﾟﾛｸﾞﾗﾑへの素早いｱｸｾｽを提供します。 ﾌｧｲﾙ補助ｼｽﾃﾑは名前付けたﾌｧｲﾙ構造を支援し、順次(ｼｰｹﾝｼｬﾙ)や不順(ﾗﾝﾀﾞﾑ)ﾌｧｲﾙ ｱｸｾｽだけでなく機能的な割り当てを許します。 このﾌｧｲﾙ ｼｽﾃﾑを使用することで、ｿｰｽと実行形式両方で大容量ﾌﾟﾛｸﾞﾗﾑが保存できます。

CP/M 2.xは種々様々なﾃﾞｨｽｸ容量に合わせるための領域再設定を許すﾃｰﾌﾞﾙ駆動技術を使用する高性能な単一ｺﾝｿｰﾙ ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑです。 基本的なﾌｧｲﾙ制限が取り除かれ、過去の公開1.xﾊﾞｰｼﾞｮﾝから上位互換性を維持します。

CP/M 2.xの特徴は各8Mﾊﾞｲﾄまでの16台の論理ﾄﾞﾗｲﾌﾞへの領域指示を含みます。 どの特定ﾌｧｲﾙも将来版で32Mﾊﾞｲﾄへ拡張する容量で全ﾄﾞﾗｲﾌﾞ容量に到達できます。 ﾃﾞｨﾚｸﾄﾘ容量は適当などんなｴﾝﾄﾘ数を含むために領域設定でき、各ﾌｧｲﾙは任意で読み出し専用とｼｽﾃﾑ属性を標せます。 CP/M 2.xの使用者は使用者番号により、或る使用者領域から他へのﾌｧｲﾙ ｺﾋﾟｰ操作で容易に、物理的に分離されます。 8Mﾊﾞｲﾄ ﾌｧｲﾙ内の65536ﾚｺｰﾄﾞのどれにも直接ｱｸｾｽを提供する強力な相対ﾚｺｰﾄﾞ不順ｱｸｾｽ機能がCPM 2.xに存在します。

CP/Mは強力なﾃｷｽﾄ ｴﾃﾞｨﾀ(ED)、Intel互換ｱｾﾝﾌﾞﾗ(ASM)、ﾃﾞﾊﾞｯｶﾞ補助ｼｽﾃﾑ(DDT)もｻﾎﾟｰﾄします。 任意選択ｿﾌﾄｳｪｱは様々な高級言語と共に強力なIntel互換ﾏｸﾛ ｱｾﾝﾌﾞﾗ、ｼﾝﾎﾞﾘｯｸ ﾃﾞﾊﾞｯｶﾞを含みます。 CP/Mのｺﾝｿｰﾙ ｺﾏﾝﾄﾞ ﾌﾟﾛｾｯｻ(CCP:Console Command Processor)と併せた時、その結果の利便性は同種大型ｺﾝﾋﾟｭｰﾀの利便性と同じかまたは越えます。

CP/Mは論理的に様々な独特な部分に分けられます。

  • BIOS (Basic I/O System:基本I/0ｼｽﾃﾑ)･･･ﾊｰﾄﾞｳｪｱ依存
  • BDOS (Basic Disk Operating System:基本ﾃﾞｨｽｸ ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ)
  • CCP (Console Command Processor:ｺﾝｿｰﾙ ｺﾏﾝﾄﾞ ﾌﾟﾛｾｯｻ)
  • TPA (Transient Program Area:一時ﾌﾟﾛｸﾞﾗﾑ領域)

BIOSはﾃﾚﾀｲﾌﾟ,CRT,紙ﾃｰﾌﾟ ﾘｰﾀﾞ/ﾊﾟﾝﾁｬや使用者定義周辺装置の標準周辺装置のｲﾝﾀｰﾌｪｰｽやﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞのｱｸｾｽに必要な基本操作を提供します。 CP/Mの一部を修正(ﾊﾟｯﾁ)することにより、どんな特定ﾊｰﾄﾞｳｪｱ環境用周辺装置も仕立てられます。 BDOSは1つまたは個別ﾌｧｲﾙ ﾃﾞｨﾚｸﾄﾘを含む多くのﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞを制御することによるﾃﾞｨｽｸ管理を提供します。 BDOSはｱｸｾｽ中に最小ﾍｯﾄﾞ移動ﾃﾞｨｽｸ ｱｸｾｽで動的なﾌｧｲﾙ構築を提供するﾃﾞｨｽｸ割り当て方法を実行します。 BDOSにはﾌﾟﾛｸﾞﾗﾑでｱｸｾｽできる次の基本操作を含む入口があります。

  • ﾌｧｲﾙ検索(ﾌｧｲﾙ名による特定ﾃﾞｨｽｸ ﾌｧｲﾙ検索)
  • ﾌｧｲﾙ使用開始(以降の操作用にﾌｧｲﾙを開く)
  • ﾌｧｲﾙ閉鎖(操作後のﾌｧｲﾙを閉じる)
  • ﾌｧｲﾙ名変更(特定ﾌｧｲﾙの名前を変更)
  • ﾌｧｲﾙ読み込み(特定ﾌｧｲﾙからﾚｺｰﾄﾞ読み込み)
  • ﾌｧｲﾙ書き込み(特定ﾌｧｲﾙへﾚｺｰﾄﾞ書き込み)
  • ﾃﾞｨｽｸ選択(以降の操作用に特定ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞを選択)

CCPはｺﾝｿｰﾙと残りのCP/Mｼｽﾃﾑ間との符号によるｲﾝﾀｰﾌｪｰｽを提供します。 CCPはｺﾝｿｰﾙ装置を読み、ｱｾﾝﾌﾞﾗ、ｴﾃﾞｨﾀ、ﾃﾞﾊﾞｯｶﾞのような一時ﾌﾟﾛｸﾞﾗﾑの操作制御やﾌｧｲﾙ ﾃﾞｨﾚｸﾄﾘの一覧表示、ﾌｧｲﾙ内容の印刷を含む命令を処理します。 CCPで利用可能な標準命令は1.2.1節で一覧されます。

CP/Mの(上記での)最後の部分は一時ﾌﾟﾛｸﾞﾗﾑ領域(TPA)と呼ばれる領域です。 TPAはCCPの命令下でﾃﾞｨｽｸから設定されるﾌﾟﾛｸﾞﾗﾑを保持します。 ﾌﾟﾛｸﾞﾗﾑ編集中、例えばTPAはCP/Mﾃｷｽﾄ ｴﾃﾞｨﾀ機械語ｺｰﾄﾞとﾃﾞｰﾀ領域を保持します。 同様にCP/M下で作成したﾌﾟﾛｸﾞﾗﾑはTPAに設定することにより(直前の内容を)消し、それらのﾌﾟﾛｸﾞﾗﾑを実行することができます。

CP/M構成要素の補助ｼｽﾃﾑの何れかまたは全ては実行ﾌﾟﾛｸﾞﾗﾑにより上書き使用できます。 一旦使用者ﾌﾟﾛｸﾞﾗﾑがTAPに設定されると、CCP,BODS,BIOS領域はそのﾌﾟﾛｸﾞﾗﾑのﾃﾞｰﾀ領域として使用できます。 BIOS部分が上書き使用されない時は必ずﾌﾞｰﾄｽﾄﾗｯﾌﾟ ﾛｰﾀﾞがﾌﾟﾛｸﾞﾗﾑ的にｱｸｾｽ可能で、故に使用者ﾌﾟﾛｸﾞﾗﾑは実行の最後でﾌﾞｰﾄｽﾄﾗｯﾌﾟへの分岐だけが必要で、完全なCP/Mﾓﾆﾀがﾃﾞｨｽｸから再設定されます。

CP/Mｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑはCP/M実行でのﾊｰﾄﾞｳｪｱ環境を定義するBIOS部分を含み明確な部署単位に分割されます。 従って標準ｼｽﾃﾑは独自ｼｽﾃﾑを操作するために周辺ﾄﾞﾗｲﾊﾞを変更することにより、どの非標準環境へも容易に修正されます。


付録 1.2 機能説明

使用者はｺﾝｿｰﾙを通して入った命令を読んで解釈するCCPを主に通してCP/Mと相互やり取りをします。 一般的にCCPはｵﾝﾗｲﾝの各種ﾃﾞｨｽｸの1つを指示します。 標準ｼｽﾃﾑは16までの異なるﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞを指示します。 これらのﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞはA～Pで標されます。 CCPが現在、ﾃﾞｨｽｸを指示するなら、そのﾃﾞｨｽｸが(現在の対象ﾃﾞｨｽｸとして)登録されます。 現在登録したﾃﾞｨｽｸを明示するため、CCPが他の命令に対して準備ができている表示内で、CCPは常にﾃﾞｨｽｸ名と続く記号>で操作者に指示します。 初期起動でCP/MｼｽﾃﾑはﾃﾞｨｽｸAから設定され、CCPは次のﾒｯｾｰｼﾞを表示します。
  CP/M VER x.x
x.xはCP/Mﾊﾞｰｼﾞｮﾝ番号です。全てのCP/Mｼｽﾃﾑは20Kﾊﾞｲﾄ ﾒﾓﾘ空間で動作する初期設定ですが、実装するｼｽﾃﾑのどのﾒﾓﾘ容量にも合せるため、容易に再設定できます(1.6.9節をご覧ください)。 ｼｽﾃﾑの登録に続き、CP/Mは自動的にﾃﾞｨｽｸAを登録し、CP/Mが現在指示しているﾃﾞｨｽｸAと命令待ちを示す符号A>で指示します。 命令は2段階(組み込み命令と一時命令)で実装されます。

1.2.1 一般命令構造

組み込み命令はCCPﾌﾟﾛｸﾞﾗﾑの一部で、一方、一時命令はﾃﾞｨｽｸからTPAに設定され、実行されます(即ち一時命令は通常の使用者ﾌﾟﾛｸﾞﾗﾑと同一構造です)。 次は組み込み命令です。
  • ERA (指示したﾌｧｲﾙを削除)
  • DIR (ﾃﾞｨﾚｸﾄﾘ内のﾌｧｲﾙ名を一覧表示)
  • REN (指定したﾌｧｲﾙを改名)
  • SAVE (ﾒﾓﾘ内容をﾌｧｲﾙに保存)
  • TYPE (登録ﾃﾞｨｽｸのﾌｧｲﾙ内容を表示)
多くの命令は特定ﾌｧｲﾙまたはﾌｧｲﾙ群を参照します。 ﾌｧｲﾙ参照の形式は1.2.2節で詳述されます。

1.2.2 ﾌｧｲﾙ参照

ﾌｧｲﾙ参照はCP/Mに付随した特定ﾃﾞｨｽｸの特定ﾌｧｲﾙまたはﾌｧｲﾙ群を指示します。 これらのﾌｧｲﾙ参照は明示表現(ufn:unambiguous)か曖昧表現(afn:ambiguous)の何れかです。 明示ﾌｧｲﾙ参照は個別の単一ﾌｧｲﾙを指示し、一方、曖昧ﾌｧｲﾙ参照は幾つかの異なるﾌｧｲﾙにより応じられます。

ﾌｧｲﾙ参照は2つの部分、本来のﾌｧｲﾙ名とﾌｧｲﾙ形式から成ります。 ﾌｧｲﾙ形式が任意選択とは言え、通常、それは一般的に使用されます。 例えばﾌｧｲﾙ形式ASMはそのﾌｧｲﾙがｱｾﾝﾌﾞﾘ言語ｿｰｽ ﾌｧｲﾙであることを示すために使用され、一方、本来のﾌｧｲﾙ名は各特定ｿｰｽ ﾌｧｲﾙを区別します。 次の例で示されるように、この2つの名前はﾋﾟﾘｵﾄﾞにより分離されます。

filename.typ
この例でfilenameは8文字(ﾊﾞｲﾄ)以下の本来のﾌｧｲﾙ名で、typは3文字(ﾊﾞｲﾄ)以下のﾌｧｲﾙ形式です。 上で言及したように、名前として
filename
も許され、3つの空白(ｽﾍﾟｰｽ)から成るﾌｧｲﾙ形式と等価です。 明示ﾌｧｲﾙ参照指定で使用する文字には次のどの特殊文字も含められません。
< > . , ; : = ? * [ ] % | ( ) / \
一方、ｱﾙﾌｧﾍﾞｯﾄと数字文字と残りの特殊文字は許されます。

曖昧ﾌｧｲﾙ参照はﾃﾞｨﾚｸﾄﾘ検索と様式一致に使用されます。 曖昧ﾌｧｲﾙ参照の形式は?記号が最初(filename)と2つ目(typ)の名前を通して散在できることを除いて、明示ﾌｧｲﾙ参照と同様です。 CP/Mを通す様々な命令で?記号はﾌｧｲﾙ名の?位置のどの文字(ﾊﾞｲﾄ)とも一致します。 従って曖昧ﾌｧｲﾙ参照 X?Z.C?M は次の明確なﾌｧｲﾙ名 XYZ.COM や X3Z.CAM が該当します。

ﾜｲﾙﾄﾞｶｰﾄﾞ文字も曖昧ﾌｧｲﾙ参照に使用できます。 *記号はﾌｧｲﾙ名(filename)またはﾌｧｲﾙ形式(typ)の部分または全部を置換します。 *.* が曖昧ﾌｧｲﾙ参照 ????????.??? と等価なことに注意してください。

一方 filename.* と *.typ は各々 filename.??? と ????????.typ に相当します。 例の A>DIR *.* はﾃﾞｨﾚｸﾄﾘ内の全ﾃﾞｨｽｸ ﾌｧｲﾙの名前を一覧する命令としてCCPにより解釈されます。 次の例 A>DIR X.Y は名前X.Yのﾌｧｲﾙだけを検索します。 同様に A>DIR X?Y.C?M 命令はこの曖昧参照を満足するﾃﾞｨｽｸ上の全ての明確なﾌｧｲﾙ名に対して検索を引き起こします。

次のﾌｧｲﾙ参照は有効な明示ﾌｧｲﾙ参照です。

X
X.Y
XYZ
XYZ.COM
GAMMA
GAMMA.1

利便性を付加するため、ﾌｧｲﾙ名に対してﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞ名を一般的に指示できます。 この場合のﾄﾞﾗｲﾌﾞ名は文字A～Pと後続のｺﾛﾝ(:)のように与えられます。 指定ﾄﾞﾗｲﾌﾞはﾌｧｲﾙ操作が起こる前に(一時的に現在の選択ﾄﾞﾗｲﾌﾞとして)登録されます。 従って次はﾃﾞｨｽｸ名前置子付きの有効なﾌｧｲﾙ参照です。

A:X.Y
P:XYZ.COM
B:XYZ
B:X.A?M
C:GAMMA
C:*.ASM

ﾌｧｲﾙ名とﾄﾞﾗｲﾌﾞ名内の全ての小文字はそれらがCCPにより解釈される時に大文字へ変換されます。


付録 1.3 ﾃﾞｨｽｸ切り替え

操作者はCCPがｺﾝｿｰﾙ入力待ちの時にA～Pと後続するｺﾛﾝ(:)でﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞ名を入力することにより現在の登録ﾃﾞｨｽｸを切り替えられます。 次の指示と命令の手順はCP/MｼｽﾃﾑがﾄﾞﾗｲﾌﾞAから設定される後で起き得ます。

CP/M VER 2.2
A>DIR
A:SAMPLE ASM SAMPLE PRN
ﾃﾞｨｽｸAの全ﾌｧｲﾙ一覧
A>B:
ﾃﾞｨｽｸBに切り替え
B>DIR *.ASM
B:DUMP ASM FILES ASM
ﾃﾞｨｽｸBの全ASMﾌｧｲﾙ一覧
B>A:
ﾃﾞｨｽｸAに切り替え戻し


付録 1.4 組み込み命令

記述したﾌｧｲﾙとﾃﾞﾊﾞｲｽの参照は組み込み命令の構成を完全に指示するために直ぐに使用できます。 次の略号を以下の記述で使用します。
ufn
: 明示的ﾌｧｲﾙ参照
afn
: 曖昧ﾌｧｲﾙ参照

CCPは常に内部的に小文字を大文字に変換することを思い出してください。 従って小文字のｱﾙﾌｧﾍﾞｯﾄは命令名やﾌｧｲﾙ参照で大文字のように扱われます。

1.4.1 ERA 命令

文法:
ERA afn

ERA(削除)命令は例えばCP/Mにより現在指示される>に先行するﾃﾞｨｽｸ名のように、現状登録ﾃﾞｨｽｸからﾌｧｲﾙを取り除きます。 削除したﾌｧｲﾙは曖昧ﾌｧｲﾙ参照(afn)を満足するﾌｧｲﾙです。 次の例はERAの使用を詳述します。

ERA X.Y
現登録ﾃﾞｨｽｸのﾌｧｲﾙ名X.Yがﾃﾞｨｽｸ ﾃﾞｨﾚｸﾄﾘから削除され、その空間が戻ります(空きます)。
ERA X.*
本来の名前Xの全ﾌｧｲﾙが現ﾃﾞｨｽｸから削除されます。
ERA *.ASM
ﾌｧｲﾙ形式名ASMの全ﾌｧｲﾙが現ﾃﾞｨｽｸから削除されます。
ERA X?Y.C?M
現ﾃﾞｨｽｸの曖昧参照を満足する全ﾌｧｲﾙが削除されます。
ERA *.*
現ﾃﾞｨｽｸの全ﾌｧｲﾙを削除します。 この場合、CCPはｺﾝｿｰﾙで ALL FILES (Y/N)? を指示し、ﾌｧｲﾙが実際に削除されるのに先立ち、Y応答が必要です。
ERA B:*.PRN
現在の登録ﾃﾞｨｽｸに拘らず、ﾄﾞﾗｲﾌﾞBの曖昧参照 ????????.PRN を満足する全ﾌｧｲﾙが削除されます。

1.4.2 DIR 命令

文法:
DIR afn

DIR(ﾃﾞｨﾚｸﾄﾘ)命令は曖昧ﾌｧｲﾙ参照(afn)を満足する全ﾌｧｲﾙ名をｺﾝｿｰﾙ ﾃﾞﾊﾞｲｽに一覧します。 特別な状態 DIR は現登録ﾃﾞｨｽｸの全ﾌｧｲﾙを一覧します( DIR 命令は DIR *.* 命令と等価です)。 次は有効なDIR命令です。

DIR X.Y
DIR X?Y.C?M
DIR ??.Y
他のCCP命令と同様にafnにはﾄﾞﾗｲﾌﾞ名が先行できます。 次のDIR命令はﾃﾞｨﾚｸﾄﾘ検索を行う前に指定したﾄﾞﾗｲﾌﾞを選択します。
DIR B:
DIR B:X.Y
DIR B:*.A?M
選択したﾃﾞｨｽｸでﾃﾞｨﾚｸﾄﾘ要求を満足するﾌｧｲﾙがなかった場合、NO FILE ﾒｯｾｰｼﾞがｺﾝｿｰﾙに現れます。

1.4.3 REN 命令

文法:
REN ufn1=ufn2

REN(改名)命令はﾃﾞｨｽｸ上のﾌｧｲﾙ名変更を許します。 ufn2を満足するﾌｧｲﾙのﾌｧｲﾙ名がufn1に変更されます。 現(指定)登録ﾃﾞｨｽｸは改名ﾌｧｲﾙ(ufn2)に含まれると認識されます。 ｺﾝｿｰﾙがｻﾎﾟｰﾄしていれば←も=の代わりに入力できます。 次はREN命令の例です。

REN X.Y=Q.R
ﾌｧｲﾙ Q.R が X.Y に変更されます。
REN XYZ.COM=XYZ.XXX
ﾌｧｲﾙ XYZ.COM が XYZ.XXX に変更されます。

操作者は任意選択のﾄﾞﾗｲﾌﾞ指定によりufn1またはufn2の何れかまたは両方に先行します。 ufn1がﾄﾞﾗｲﾌﾞ名に先行されると、ufn2は同じﾄﾞﾗｲﾌﾞ名が存在すると認識されます。 同様にufn2がﾄﾞﾗｲﾌﾞ名に先行されると、ufn1も同じﾄﾞﾗｲﾌﾞ名が存在すると認識されます。 ufn1とufn2の両方がﾄﾞﾗｲﾌﾞ名に先行される場合、両方の場合で同じﾄﾞﾗｲﾌﾞが指定されなければなりません。 次のREN命令はこの形式を詳述します。

REN A:X.ASM=Y.ASM
ﾄﾞﾗｲﾌﾞAでﾌｧｲﾙ Y.ASM が X.ASM に変更されます。
REN B:ZAP.BAS=ZOT.BAS
ﾄﾞﾗｲﾌﾞBでﾌｧｲﾙ ZOT.BAS が ZAP.BAS に変更されます。
REN B:A.ASM=B:A.BAK
ﾄﾞﾗｲﾌﾞBでﾌｧｲﾙ A.BAK が A.ASM に変更されます。

ufn1が既に存在する場合、REN命令は FILE EXISTS ｴﾗｰで応答し、変更を実行しません。 指定したﾃﾞｨｽｸでufn2が存在しない場合、ｺﾝｿｰﾙに NO FILE が表示されます。

1.4.4 SAVE 命令

文法:
SAVE n ufn

SAVE命令はnﾍﾟｰｼﾞ(256ﾊﾞｲﾄ単位)分TPAからﾃﾞｨｽｸへ配置し、そのﾌｧｲﾙをufnと名付けます。 配布CP/MｼｽﾃﾑはTPAがﾒﾓﾘ上の第2ﾍﾟｰｼﾞ、0100Hから始まります。 使用者ﾌﾟﾛｸﾞﾗﾑが0100H～02FFHまでを占有する場合、SAVE命令はﾒﾓﾘの2ﾍﾟｰｼﾞ分を指定しなければなりません。 機械語ｺｰﾄﾞ ﾌｧｲﾙはその後で読み込み設定して実行できます。 次はSAVE命令の例です。

SAVE 3 X.COM
0100H～03FFHをX.COMにｺﾋﾟｰします。
SAVE 40 Q
0100H～28FFHをQにｺﾋﾟｰします。 28FFHの28Hはﾍﾟｰｼﾞ数で、28H=2*16+8=40(10進数)であることに注意してください。
SAVE 4 X.Y
0100H～04FFHをX.Yにｺﾋﾟｰします。

次の例で示されるように、SAVE命令は命令のufn部でﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞも指定できます。

SAVE 10 B:ZOT.COM
0100H～0AFFHの10ﾍﾟｰｼﾞをﾄﾞﾗｲﾌﾞBのﾌｧｲﾙZOT.COMにｺﾋﾟｰします。

1.4.5 TYPE 命令

文法:
TYPE ufn

TYPE命令は現登録ﾃﾞｨｽｸのASCIIｿｰｽ ﾌｧｲﾙ ufnの内容をｺﾝｿｰﾙ装置に表示します。 次は有効なTYPE命令です。

TYPE X.Y
TYPE X.PLM
TYPE XXX
TYPE命令はﾀﾌﾞ位置が全ての8桁境界に設定されると認識するTAB(CTRL-I)文字を拡張します。 ufnはﾄﾞﾗｲﾌﾞ名も参照できます。

TYPE B:X.PRN
ﾄﾞﾗｲﾌﾞBからのﾌｧｲﾙX.PRNが表示されます。

1.4.6 USER 命令

文法:
USER n

USER命令は同一ﾃﾞｨﾚｸﾄﾘでの分離したﾌｧｲﾙの保守を許します。 文法行でのnは0～15の整数値です。 ｺｰﾙﾄﾞ ﾌﾞｰﾄで標準CP/M 1.xﾃﾞｨﾚｸﾄﾘと互換性のある使用者領域番号0へ自動的に登録します。 同じﾃﾞｨﾚｸﾄﾘ内の他の論理領域へ移動するために何時でもUSER命令が使用できます。 1つの使用者番号を指示すると同時に登録されるﾄﾞﾗｲﾌﾞは、操作者が他へ移動する時、自動的に活性化します。 使用者番号は活性(有効)なﾃﾞｨｽｸの特定ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘをｱｸｾｽする簡単な前置子です。

有効な使用者番号はその後のUSER命令による変更か、または使用者0が再び仮定されるｺｰﾙﾄﾞ ﾌﾞｰﾄまで保持されます。


付録 1.5 行編集と出力制御

CCPは命令行入力中、或る種の行編集機能を許します。 CTRL手順はCtrlｷｰと文字ｷｰとの同時押下により得られます。 更にCCP命令行は一般的に255文字(ﾊﾞｲﾄ)までで、その命令はEnterｷｰが押下されるまで実行されません。

表1-1. 行編集用制御文字
制御文字 | 意味
CTRL-C | 行先頭で押下した時にCP/Mｼｽﾃﾑをﾘﾌﾞｰﾄ。
CTRL-E | 物理行終了。ｶｰｿﾙは復帰するが行はEnterｷｰが押下されるまで送られません。
CTRL-H | 1文字分ｶｰｿﾙ後退。
CTRL-I | 現在の入力を終了。(改行)
CTRL-M | 現在の入力を終了。(復帰)
CTRL-P | 後続のｺﾝｿｰﾙ出力を現在割り当てられたﾘｽﾄ装置(1.6.1節参照)へｺﾋﾟｰ。出力は次のCTRL+Pが押下されるまでｺﾝｿｰﾙ装置とﾘｽﾄ装置へ送られます。
CTRL-R | 現入力行の再入力。取り消しでの文字消去に続き綺麗な行で入力。
CTRL-S | ｺﾝｿｰﾙ出力一時停止。ｺﾝｿｰﾙで何れかの文字(例えば新たなCTRL-S)を押下すると、ﾌﾟﾛｸﾞﾗﾑ実行と出力が継続します。この機能は継続に先立ち出力領域を見るために、CRTなどのような高速ｺﾝｿｰﾙの出力を止めます。
CTRL-U | ｺﾝｿｰﾙで入力した行全体を削除。
CTRL-X | CTRL-Uと同じ。
CTRL-Z | ｺﾝｿｰﾙからの入力終了(PIPとEDで使用)。
rub/del | ｺﾝｿｰﾙで入力した最後の文字の削除と戻し。


付録 1.6 一時命令

一時命令はTAPに現登録ﾃﾞｨｽｸから設定され、実行されます。 CCP下実行用一時命令は以下です。 追加機能は使用者により容易に定義されます。(1.6.3節参照)。

表1-2. CP/M 一時命令
命令 | 機能
STAT | 現登録ﾃﾞｨｽｸの残保存容量ﾊﾞｲﾄ数の一覧、特定ﾌｧｲﾙについての統計的な情報提供、装置割当ての表示または切り替え。
ASM | CP/Mｱｾﾝﾌﾞﾗの設定とﾃﾞｨｽｸから特定ﾌﾟﾛｸﾞﾗﾑのｱｾﾝﾌﾞﾙ。
LOAD | Intel HEX機械語ｺｰﾄﾞ形式でのﾌｧｲﾙ読み込み/設定とTPAに設定できる機械語実行形式でのﾌｧｲﾙ生成。この設定(作成)したﾌﾟﾛｸﾞﾗﾑはCCP下の新規命令になります。
DDT | CP/MﾃﾞﾊﾞｯｶﾞをTPAに読み込み/設定し、実行を始めます。
PIP | 後続するﾃﾞｨｽｸ ﾌｧｲﾙと周辺装置との転送操作用周辺相互交換ﾌﾟﾛｸﾞﾗﾑ(PIP:Peripheral Interchange Program)を読み込み/設定します。
ED | CP/Mﾃｷｽﾄ編集ﾌﾟﾛｸﾞﾗﾑを読み込み/設定し、実行します。
SYSGEN | 新規CP/Mｼｽﾃﾑ ﾃﾞｨｽｸ作成。
SUBMIT | ﾊﾞｯﾁ処理用命令ﾌｧｲﾙの受け入れと処理。
DUMP | ﾌｧｲﾙ内容の16進数表示。
MOVCPM | 特定ﾒﾓﾘ容量用CP/Mｼｽﾃﾑの再生成。

一時命令は組み込み命令と同じ規則で指定され、追加命令は使用者により容易に定義されます。 利便性について一時命令は実行のためにTPAへ特定ﾄﾞﾗｲﾌﾞから一時的に読み込み/設定させるﾄﾞﾗｲﾌﾞ名を先行できます。 従って B:STAT 命令はCP/MにSTAT一時命令の供給元用にﾄﾞﾗｲﾌﾞBを一時的に登録させ、後続する処理のため、その後元の登録ﾃﾞｨｽｸに戻します。

1.6.1 STAT 命令

文法:
STAT
STAT 指示文字列

STAT命令はﾌｧｲﾙ記憶装置についての通常の統計的な情報とﾃﾞﾊﾞｲｽ割り当てを提供します。 指示文字列の特別な形式は現在のﾃﾞﾊﾞｲｽ割り当ての決定や切り替えを許します。 指定すべき様々な指示文字列が右側の各形式の説明と共に以下で示されます。

STAT
指示文字列なしで入力すると、STAT命令は(利用可能な)全ﾄﾞﾗｲﾌﾞの残容量を計算し、次のﾒｯｾｰｼﾞを表示します。
d: R/W, SPACE: nnnK
d: R/O, SPACE: nnnK
利用可能な各ﾄﾞﾗｲﾌﾞd:に対し、R/Wは読み書きできる量を示し、R/Oは読み込み専用を示します(ﾄﾞﾗｲﾌﾞは以下で示される明確な読み込み専用設定またはｳｫｰﾑ ﾌﾞｰﾄなしの不注意のﾃﾞｨｽｸ交換により読み込み専用になります。)。 ﾄﾞﾗｲﾌﾞd:のﾃﾞｨｽｸ残空き空間はnnnでのKﾊﾞｲﾄで与えられます。
STAT d:
ﾄﾞﾗｲﾌﾞ名が与えられると、容量が計算される前にﾄﾞﾗｲﾌﾞが選択されます。 従ってﾄﾞﾗｲﾌﾞAに登録している間の STAT B: 命令結果は次のﾒｯｾｰｼﾞです。
BYTES REMAINING ON B: nnnK
STAT afn
指示文字列はSTATにより走査されるﾌｧｲﾙの特別な設定もできます。 afnを満足するﾌｧｲﾙが必要保存容量と共に先頭からｱﾙﾌｧﾍﾞｯﾄ順で一覧されます。
RECS BYTES EXT D:FILENAME.TYPrrrr bbbk   ee d:fileNAME.typ
rrrrはﾌｧｲﾙへの128ﾊﾞｲﾄ単位の割り当てﾚｺｰﾄﾞ数、bbbはﾌｧｲﾙへの割り当てKﾊﾞｲﾄ数(bbb=rrrr*128/1024)、eeは16Kﾊﾞｲﾄ単位の拡張数(ee=bbb/16)、dはそのﾌｧｲﾙを含むﾄﾞﾗｲﾌﾞ名(A～P)、fileNAMEは本来のﾌｧｲﾙ名、typは3文字(ﾊﾞｲﾄ)のﾌｧｲﾙ形式です。 個別ﾌｧｲﾙ一覧後、記憶装置使用状況の概略が示されます。
STAT d:afn
afnの先頭にﾄﾞﾗｲﾌﾞ名が付けられます。 指定したﾄﾞﾗｲﾌﾞが先に選択され、STAT afn形式が実行されます。
STAT d:=R/O
この形式はdにより与えられたﾄﾞﾗｲﾌﾞを読み込み専用に設定し、次のｺｰﾙﾄﾞまたはｳｫｰﾑ ﾌﾞｰﾄを行うまでその効果を保持します。 ﾃﾞｨｽｸが読み込み専用の時にその読み込み専用ﾃﾞｨｽｸに書き込みを試みると、BDOS ERR ON d: Read-Only ﾒｯｾｰｼﾞが現れます。 CP/MはﾃﾞｨｽｸがR/W(読み書き可)になる自動的なｳｫｰﾑ ﾌﾞｰﾄを実行する前にｷｰが押下されるのを待ちます。

STAT命令は物理/論理装置間の割り当て制御を許します。 第5章と第6章で記述されるI/Oﾊﾞｲﾄ(IOBYTE)機能をご覧ください。 これらは4つの論理周辺装置で、どの項目も即時に各々を様々な物理周辺装置の1つに割り当てられます。 次は4つの論理装置の一覧です。

  • CON:
操作者との通信用にCCPで使用されるｼｽﾃﾑ ｺﾝｿｰﾙ装置。
  • RDR:
紙ﾃｰﾌﾟ ﾘｰﾀﾞ装置。
  • PUN:
紙ﾃｰﾌﾟ ﾊﾟﾝﾁｬ装置。
  • LST:
ﾘｽﾄ出力装置。

何れかの特定ｺﾝﾋﾟｭｰﾀ ｼｽﾃﾑに付随する実際の装置はCP/MのBIOS部分でｻﾌﾞﾙｰﾁﾝにより駆動されます。 従って論理RDR:装置は例えば現実的には高速ﾘｰﾀﾞ、ﾃﾚﾀｲﾌﾟ ﾘｰﾀﾞ、ｶｾｯﾄ ﾃｰﾌﾟです。 装置名称と割り当てで幾つかの柔軟性を許すため、様々な物理装置が表1-3.で定義されます。

表 1-3. 物理装置
装置 | 意味
TTY: | ﾃﾚﾀｲﾌﾟ装置(低速ｺﾝｿｰﾙ)
CRT: | ﾌﾞﾗｳﾝ管表示入出力装置(高速ｺﾝｿｰﾙ)
BAT: | ﾊﾞｯﾁ処理(ｺﾝｿｰﾙは現在のRDR:, 出力は現在のLST:装置)
UC1: | 使用者定義ｺﾝｿｰﾙ
PTR: | 紙ﾃｰﾌﾟ ﾘｰﾀﾞ(高速ﾘｰﾀﾞ)
UR1: | 使用者定義ﾘｰﾀﾞ1
UR2: | 使用者定義ﾘｰﾀﾞ2
PTP: | 紙ﾃｰﾌﾟ ﾊﾟﾝﾁｬ(高速ﾊﾟﾝﾁｬ)
UP1: | 使用者定義ﾊﾟﾝﾁｬ1
UP2: | 使用者定義ﾊﾟﾝﾁｬ2
LPT: | ﾗｲﾝ(行単位印字) ﾌﾟﾘﾝﾀ
UL1: | 使用者定義ﾘｽﾄ装置1

上で強調された物理装置名は実際にその名前が意味する装置に対応しないかもしれません。 例えばｶｾｯﾄ書き込み操作としてPTP:装置を作動できます。 正確な対応と駆動ｻﾌﾞﾙｰﾁﾝはCP/MのBIOS部分で定義されます。 標準配布版CP/Mで、これらの装置はMDS800開発ｼｽﾃﾑのそれらの名称に対応します。

STAT VAL: 命令は利用可能なSTAT命令の概要を生成し、その出力結果は以下です。

Temp R/O Disk d:$R/O
Set Indicator: fileNAME.typ $R/O $R/W $SYS $DIR
Disk Status: DSK: d:DSK
Iobyte Assign:
利用可能なSTAT命令の概要を即時に与え、許された論理/物理装置割当てを表示します。
CON:=TTY:CRT:BAT:UCI:
RDR:=TTY:PTR:URI:UR2:
PUN:=TTY:PTP:UP1:UP2:
LST:=TTY:CRT:LPT:ULI:
左側の論理装置は右側で示した4つの物理割り当てのどれかを利用します。 現在の論理/物理割り当ては STAT DEV: 命令を入力することにより表示されます。

この命令は左側に各論理装置、右側に現在の対応する物理装置の一覧を生成します。 例えばその一覧は次のように現れるかもしれません。

CON:=CRT:
RDR:=URl:
PUN:=PTP:
LST:=TTY:
現在の論理/物理装置割当ては次の形式のSTAT命令の入力により変更されます。
STAT ld1=pd1,ld2=pd2,...,ldn=pdn
ld1～ldn は論理装置名、pd1～pdn は(変更する)互換物理装置名です。 例えばld1 と pd1 は上で示したVAL:命令での同一行に出現します。 次の例は現在の論理/物理装置割当て変更の有効なSTAT命令を示します。
STAT CON:=CRT:
STAT PUN:=TTY:,LST:=LPT:,RDR:=TTY
次の命令形式
STAT d:fileNAME.typ $S
はd: が任意選択ﾄﾞﾗｲﾌﾞ名で、 fileNAME.typ が明示的または曖昧なﾌｧｲﾙ名で、次の出力表示形式を生成します。
Size      Recs      Bytes         Ext Acc

   48        48         6K     1 R/O A:ED.COM
   55        55        12K     1 R/O (A:PIP.COM)
65536       128        16K     2 R/W A:X.DAT
$S引数はSize欄を表示させます。 $Sが無いとSize欄は省略されますが、残容量欄が表示されます。 Size欄はﾚｺｰﾄﾞ単位での仮想的なﾌｧｲﾙ容量を示し、一方Recs欄は各拡張での仮想ﾚｺｰﾄﾞ数の合計です。 順次構成ﾌｧｲﾙについてのSize欄とRecs欄は同じです。 Bytes欄は対応ﾌｧｲﾙへ割り当てた実際のﾊﾞｲﾄ数を示します。 最小割り当て単位は(CP/M)設定時に決められ、従って順次ﾌｧｲﾙに対するﾊﾞｲﾄ数はﾚｺｰﾄﾞ数と最後の割り当て区画での残未使用領域の合算に対応します。 不順(ﾗﾝﾀﾞﾑ)ﾌｧｲﾙは書かれた時のﾃﾞｰﾀ領域だけが与えられ、故にBytes欄は正確な割り当て数だけを含みます。 ﾗﾝﾀﾞﾑ ｱｸｾｽの場合のSize欄は論理的な最終ﾌｧｲﾙ(EOF)ﾚｺｰﾄﾞ位置を与え、Recs欄は各拡張での論理ﾚｺｰﾄﾞ数を数えます。 しかしながらこれらの各拡張はそれらがﾚｺｰﾄﾞ数に加算されるとは言え、未割り当ての穴(空き部分)を含み得ます。

Ext欄はﾌｧｲﾙへ割り当てた物理的な拡張数を数えます。 このExt数はﾌｧｲﾙへ与えたﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ数に対応します。 割り当て区画容量に従って、1つのﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘで128Kﾊﾞｲﾄ(8論理拡張)までを直接的に指定できます。 特別な場合で実際には物理的な拡張により直接的に指定できる256Kﾊﾞｲﾄです。

Acc欄はR/OまたはR/Wﾌｧｲﾙ識別子を与え、以下に示す命令を使用することで変更できます。 この4つの命令形式で様々な常置ﾌｧｲﾙ識別子を設定または解除します。

STAT d:fileNAME.typ $R/O
STAT d:fileNAME.typ $R/W
STAT d:fileNAME.typ $SYS
STAT d:fileNAME.typ $DIR
R/O識別子は以降のSTAT命令により変更されるまでﾌｧｲﾙを読み込み専用にします(設定します)。 R/O状態はﾌｧｲﾙに対するﾃﾞｨﾚｸﾄﾘに記録されるので、ｺｰﾙﾄﾞ ﾌﾞｰﾄ動作の間を通してR/Oを保ちます。 R/W識別子はﾌｧｲﾙを常時読み書き可状態にします。 SYS識別子はﾌｧｲﾙにｼｽﾃﾑ識別子を付け、一方、DIRはこのｼｽﾃﾑ識別子を削除します。 fileNAME.typは曖昧または明示的が可能ですが、変更が起きるとｺﾝｿｰﾙでそれらのﾌｧｲﾙの変更される属性が一覧されます。 d:で示したﾄﾞﾗｲﾌﾞ名は任意選択です。

ﾌｧｲﾙがR/Oに標されると、以降のﾌｧｲﾙへの書き込みまたは消去の試みは画面に次のﾒｯｾｰｼﾞを生成します。

BDOS Err on d: File R/O
範囲A:～P:でのd:により名付けられたﾃﾞｨｽｸのﾄﾞﾗｲﾌﾞ仕様を一覧します。 ﾄﾞﾗｲﾌﾞ仕様は次の形式で一覧されます。
    d: Drive Characteristics
65536: 128 Byte Record Capacity
 8192: Kilobyte Drive Capacity
  128: 32 Byte Directory Eritries
    0: Checked Directory Eritries
 1024: Records/Extent
  128: Records/BlocK
   58: Sectors/TracK
    2: Reserved TracKs
d:は選択したﾄﾞﾗｲﾌﾞ、続いて総ﾚｺｰﾄﾞ容量(65536は8Mﾊﾞｲﾄ ﾄﾞﾗｲﾌﾞ)、続いてKﾊﾞｲﾄでの総容量が一覧されます。 ﾃﾞｨﾚｸﾄﾘ容量が次に、続いて検査したﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘが一覧されます。 検査したﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ数は、通常この機構がｳｫｰﾑ ﾌﾞｰﾄ間を除きCP/M操作中のﾒﾃﾞｨｱ交換検出に使用されるため、ﾘﾑｰﾊﾞﾌﾞﾙ ﾒﾃﾞｨｱに対するﾃﾞｨﾚｸﾄﾘ数と同じです。 固定ﾒﾃﾞｨｱに対するこの数は、通常最低ｺｰﾙﾄﾞまたはｳｫｰﾑ ﾌﾞｰﾄを除いてﾒﾃﾞｨｱが交換されないため、0です。

ﾚｺｰﾄﾞ数/拡張は各ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘの指定容量を決めます(1024×128ﾊﾞｲﾄ/ﾚｺｰﾄﾞ、本例では128Kﾊﾞｲﾄ)。 ﾚｺｰﾄﾞ数/ﾌﾞﾛｯｸは基本配置区画容量を示します(128×128ﾊﾞｲﾄ/ﾚｺｰﾄﾞ、本例では16Kﾊﾞｲﾄ)。 この一覧に物理ｾｸﾀ数/ﾄﾗｯｸと予約ﾄﾗｯｸ数が続きます。

同じ物理ﾃﾞｨｽｸを共用する論理ﾄﾞﾗｲﾌﾞについて、この機構が他の論理ﾃﾞｨｽｸに割り当てた下位番号ﾃﾞｨｽｸ領域を飛び越して使用するため、予約ﾄﾗｯｸ数はかなり大きくなり得ます。

命令形式

STAT DSK:
は現在有効な全ﾄﾞﾗｲﾌﾞに対するﾄﾞﾗｲﾌﾞ仕様表を作成します。

最後のSTAT命令形式は

STAT USR:
で、現在指定したﾃﾞｨｽｸのﾌｧｲﾙが持つ使用者番号の一覧を生成します。 表示形式は以下です。
Active User: 0
Active Fi1es: 0 1 3
最初の行は最後にCCPのUSER命令により設定した現在指定している使用者番号で、現在のﾃﾞｨﾚｸﾄﾘから走査した使用者番号の一覧が後続します。 この(例の)場合、現ﾃﾞｨｽｸの有効なﾌｧｲﾙが持つ3つの使用者番号で、現在有効な使用者番号は0(ｺｰﾙﾄﾞ ﾌﾞｰﾄでの既定)です。 操作者は後でCCPでのUSER 1またはUSER 3命令での登録と後続するDIR命令により他の使用者番号のﾃﾞｨﾚｸﾄﾘを調べられます。

1.6.2 ASM 命令

文法:
ASM ufn

ASM命令はCP/M 8080ｱｾﾝﾌﾞﾗを読み込み/設定して実行します。 ufn はｱｾﾝﾌﾞﾘ言語命令行を含むｿｰｽ ﾌｧｲﾙを指定し、ﾌｧｲﾙ形式は無指定でASMと仮定されます。 次のASM命令は有効です。

ASM
ASM GAMMA
この2ﾊﾟｽ ｱｾﾝﾌﾞﾗは自動的に実行されます。 第2ﾊﾟｽ中に起こるｱｾﾝﾌﾞﾘ ｴﾗｰがｺﾝｿｰﾙに表示されます。 ｱｾﾝﾌﾞﾗは X.PRN ﾌｧｲﾙを生成します。 X はASM命令で指定した本来のﾌｧｲﾙ名前です。 PRNﾌｧｲﾙは各命令行に対する生成した機械語ｺｰﾄﾞと何かあれば検査結果のｴﾗｰ ﾒｯｾｰｼﾞと共に、ｿｰｽ ﾌﾟﾛｸﾞﾗﾑに存在すればﾀﾌﾞ文字を組み入れたｿｰｽ ﾌﾟﾛｸﾞﾗﾑのﾘｽﾄを含みます。 このPRNﾌｧｲﾙはTYPE命令の使用でｺﾝｿｰﾙに表示されるか、またはPIP(1.6.4節参照)の使用で周辺装置へ送ります。 PRNﾌｧｲﾙが元のｿｰｽ ﾌﾟﾛｸﾞﾗﾑを含み、左端の16桁で種々のｱｾﾝﾌﾞﾘ情報、例えばﾌﾟﾛｸﾞﾗﾑ ｱﾄﾞﾚｽと16進機械語が増えたことに注意してください。 PRNﾌｧｲﾙは元のｿｰｽ ﾌｧｲﾙに対するﾊﾞｯｸｱｯﾌﾟとし扱います。 ｿｰｽ ﾌｧｲﾙが不測の削除または破壊された場合、PRNﾌｧｲﾙが各行の左端16文字を削除することにより編集できます(第2章参照)。 これはｴﾃﾞｨﾀの単一ﾏｸﾛ命令を実行することにより行えます。 この結果のﾌｧｲﾙは元のｿｰｽ ﾌｧｲﾙと同じで、後続の編集とｱｾﾝﾌﾞﾘのためPRNからASMに改名できます。

後続の読み込み/設定と実行(1.6.3節参照)用にあつらえたIntel HEX形式での8080機械語ｺｰﾄﾞを含むA.HEXﾌｧｲﾙも生成されます。 CP/Mｱｾﾝﾌﾞﾘ言語ﾌﾟﾛｸﾞﾗﾑの完全な詳細については第3章をご覧ください。

ｱｾﾝﾌﾞﾘ用ｿｰｽ ﾌｧｲﾙはｱｾﾝﾌﾞﾘ言語ﾌｧｲﾙ名にﾄﾞﾗｲﾌﾞ名を前置することによりﾃﾞｨｽｸを切り替えて取得されます。

ASM B:ALPHA
命令は現在の登録ﾄﾞﾗｲﾌﾞからｱｾﾝﾌﾞﾗを取得/設定し、ﾄﾞﾗｲﾌﾞBのALPHA.ASMｿｰｽ ﾌﾟﾛｸﾞﾗﾑを処理します。 この場合のHEXとPRNﾌｧｲﾙもﾄﾞﾗｲﾌﾞBに置かれます。

1.6.3 LOAD 命令

文法:
LOAD ufn

LOAD命令はHEX形式機械語ｺｰﾄﾞを含むと仮定されるufnﾌｧｲﾙを読み、後で実行できるﾒﾓﾘ ｲﾒｰｼﾞ ﾌｧｲﾙを生成します。 ﾌｧｲﾙ名 ufn は X.HEX 形式と仮定され、ﾌｧｲﾙ名Xだけが命令内で指定を必要です。 LOAD命令は実行可能な機械語ｺｰﾄﾞを含むﾌｧｲﾙ名 X.COM ﾌｧｲﾙを生成します。 このﾌｧｲﾙはCCPにより表示された>指示文字直後に使用者がﾌｧｲﾙ名Xを入力すると、実際にﾒﾓﾘ内に取得/設定され、実行されます。

通常、CCPは指示文字に続くﾌｧｲﾙ名Xを読み、組み込み機能名を捜します。 機能名が見つからないと、CCPはX.COM名のﾌｧｲﾙについてｼｽﾃﾑ ﾃﾞｨｽｸ ﾃﾞｨﾚｸﾄﾘを検索します。 見つかるとTPA内に機械語ｺｰﾄﾞが取得/設定され、そのﾌﾟﾛｸﾞﾗﾑは実行します。 従って使用者は一度HEXﾌｧｲﾙをLOADすることだけが必要で、その後本来のﾌｧｲﾙ名を入力することにより何度でも実行できます。 この方法で使用者はCCPに新規命令を創出できます。 選択的に削除され初期化したﾃﾞｨｽｸはCOMﾌｧｲﾙの一時命令を含みます。 この操作はﾌｧｲﾙ名がﾄﾞﾗｲﾌﾞ名で前置されると、ﾄﾞﾗｲﾌﾞを切り替えて行われます。 従って

LOAD B:BETA
はLOADﾌﾟﾛｸﾞﾗﾑを現在の登録ﾃﾞｨｽｸからTPA内に持って来て、実行開始後にﾄﾞﾗｲﾌﾞBで操作します。
注:このBETA.HEXﾌｧｲﾙは(例えばASMﾌﾟﾛｸﾞﾗﾑにより生成される)TPAの0100Hから始まる有効なIntel16進形式機械語ｺｰﾄﾞ ﾚｺｰﾄﾞを含まなければなりません。 16進ﾚｺｰﾄﾞのｱﾄﾞﾚｽは昇順でなければならず、満たされないﾒﾓﾘ領域の隙間はﾚｺｰﾄﾞが読まれる時にLOAD命令により00Hで満たされます。 従ってLOADはTPAで動作するCP/M標準COMﾌｧｲﾙの作成用だけに使用されなければなりません。 TPA以外のﾒﾓﾘ占有領域のﾌﾟﾛｸﾞﾗﾑはDDT下で取得/設定されます。

1.6.4 PIP 命令

文法:
PIP
PlP destination=source#1,source#2,～,source#n

PIPはﾃﾞｨｽｸ ﾌｧｲﾙと組み合わせた取得/設定、印刷、ﾊﾟﾝﾁ、複写に必要な基本的変換操作を実行するCP/M周辺相互交換ﾌﾟﾛｸﾞﾗﾑ(Peripheral Interchange Program)です。 PIPﾌﾟﾛｸﾞﾗﾑは次の形式の1つの入力により開始されます。

PIP
PIP 指示文字列
両方の場合でPIPはTPA内に取得/設定され、実行されます。 最初の形式でPIPは*文字の指示でｺﾝｿｰﾙから空の指示行入力(例えば操作者による単独Enterｷｰ入力)まで直接的に命令行を読みます。連続する各命令行は以下で示される規則に従い行うことで或るﾒﾃﾞｨｱの変換を引き起こします。

2つ目の形式でPIP命令は自動的に実行されるPIP命令を与える単一指示(命令)行を除いて最初の形式と等価で、PIPは入力命令行について更なるｺﾝｿｰﾙの指示なしに直ちに終了します。 各指示(命令)行の形式は

destination=source#1,source#2,～,source#n
で、destinationがﾃﾞｰﾀを受けるﾌｧｲﾙまたは周辺装置で、source#1,～,source#nが1つ以上のﾌｧｲﾙまたは装置の連記で、転送先へ左から右の順でｺﾋﾟｰされます。

指示(命令)行で複数ﾌｧｲﾙが与えられると(例えばn>1)、個別ﾌｧｲﾙは各ﾌｧｲﾙの終わりでCP/MのEOF(end-of-file)文字(CTRL-Z)を仮定するASCII文字を含むと仮定されます(この仮定を無効にするO引数参照)。 CP/Mのﾌｧｲﾙと装置名の規定に合致するために、(命令行の)小文字は内部的に大文字へ変換されます。 指示(命令)行の総文字(ﾊﾞｲﾄ)数は255文字を越えられません。 ｺﾝｿｰﾙ幅を超える行については物理的なｷｬﾘｯｼﾞ ﾘﾀｰﾝを強制するためにCTRL-Eが使用できます。

転送元と転送先の要素は先行するﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞ名付きまたはなしのCP/Mｿｰｽ ﾌｧｲﾙへの明示的参照です。 どのﾌｧｲﾙも取得または保存され得るﾌｧｲﾙの特定ﾄﾞﾗｲﾌﾞを定義する先行ﾄﾞﾗｲﾌﾞ名(A:～P:)で参照できます。 ﾄﾞﾗｲﾌﾞ名が含まれないと、現在の登録ﾃﾞｨｽｸが仮定されます。 転送先ﾌｧｲﾙは転送元ﾌｧｲﾙの1つ以上としても出現でき、全連結が完了するまで転送元ﾌｧｲﾙは変更されません。 転送先ﾌｧｲﾙが既に存在する場合、指示(命令)行が正しい形式ならそのﾌｧｲﾙが削除されます。 ｴﾗｰ状態が起こると、削除されません。 右側での説明との次の指示(命令)行はPIP入力として有効です。

X=Y
XとYは明示的ﾌｧｲﾙ名でﾌｧｲﾙYからﾌｧｲﾙXにｺﾋﾟｰします。Yは無変化を保ちます。
X=Y,Z
ﾌｧｲﾙYとZが変化せずにYとZを連結してﾌｧｲﾙXにｺﾋﾟｰします。
X.ASM=Y.ASM,Z.ASM
Y.ASMとZ.ASMﾌｧｲﾙを連結しX.ASMﾌｧｲﾙを作成します。
NEW.ZOT=B:OLD.ZAP
ﾄﾞﾗｲﾌﾞBのOLD.ZAPから現在の登録ﾃﾞｨｽｸのNEW.ZOTに移動/ｺﾋﾟｰします。
B:A.U=B:B.V,A:C.W,D.X
ﾄﾞﾗｲﾌﾞBのﾌｧｲﾙB.VとﾄﾞﾗｲﾌﾞAのC.Wと現在の登録ﾃﾞｨｽｸのD.Xを連結してﾄﾞﾗｲﾌﾞBのﾌｧｲﾙA.Uを作成します。

利便性に関してPIPはﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞ間のﾌｧｲﾙ転送に対して省略命令を許します。 省略PIP形式は以下です。

PIP d:=afn
PIP d1:=d2:afn
PIP ufn=d2:
PlP d1:ufn=d2:
最初の形式は現在の登録ﾃﾞｨｽｸから afn を満足する全ﾌｧｲﾙをﾄﾞﾗｲﾌﾞ d (A～P)に同じﾌｧｲﾙをｺﾋﾟｰします。 2つ目の形式は最初の形式と等価で、ｺﾋﾟｰ用の転送元がﾄﾞﾗｲﾌﾞ d2 (A～P)です。 3つ目の形式は PIP d1:ufn=d2:ufn 命令と等価で、ﾄﾞﾗｲﾌﾞ d2 から ufn で得たﾌｧｲﾙを現在の登録ﾃﾞｨｽｸの ufn ﾌｧｲﾙにｺﾋﾟｰします。 4つ目の形式は3つ目の形式と等価で、転送先ﾃﾞｨｽｸが d1 により明示的に与えられます。

転送元と転送先のﾃﾞｨｽｸはこれらの場合すべてで異なっていなければなりません。 afn が指定されると、afnを満足する各ufnがｺﾋﾟｰされる時に表示します。 転送先ﾌｧｲﾙとして同じ名前のﾌｧｲﾙが存在すると、完全なｺﾋﾟｰ完了後に削除され、ｺﾋﾟｰしたﾌｧｲﾙに置き換えます。

次のPIP命令は有効なﾃﾞｨｽｸ間ｺﾋﾟｰ操作の例を与えます。

B:=*.COM
現在のﾄﾞﾗｲﾌﾞのﾌｧｲﾙ形式COMの全ﾌｧｲﾙをﾄﾞﾗｲﾌﾞBにｺﾋﾟｰ。
A:=B:ZAP.*
ﾄﾞﾗｲﾌﾞBの本来のﾌｧｲﾙ名ZAPの全ﾌｧｲﾙをﾄﾞﾗｲﾌﾞAにｺﾋﾟｰ。
ZAP.ASM=B:
ZAP.ASM=B:ZAP.ASMと同じ。
B:ZOT.COM=A:
B:ZOT.COM=A:ZOT.COMと同じ。
B:=GAMMA.BAS
B:GAMMA.BAS=GAMMA.BASと同じ。
B:=A:GAMMA.BAS
B:GAMMA.BAS=A:GAMMA.BASと同じ。

PIPはCP/Mｼｽﾃﾑに付随する物理装置と論理装置への参照を許します。 装置名は幾つかの特殊名の装置に対してSTAT命令下で与えられるのと同じ名前です。 次はSTAT命令で与えられる論理装置の一覧です。

CON: (ｺﾝｿｰﾙ)
RDR: (ﾘｰﾀﾞ)
PUN: (ﾊﾟﾝﾁｬ)
LST: (ﾘｽﾄ)
一方、物理装置は以下です。
TTY: (ｺﾝｿｰﾙ,ﾘｰﾀﾞ,ﾊﾟﾝﾁｬまたはﾘｽﾄ)
CRT: (ｺﾝｿｰﾙまたはﾘｽﾄ), UC1: (ｺﾝｿｰﾙ)
PTR: (ﾘｰﾀﾞ), URI: (ﾘｰﾀﾞ), UR2: (ﾘｰﾀﾞ)
PTP: (ﾊﾟﾝﾁｬ), UPI: (ﾊﾟﾝﾁｬ), UP2: (ﾊﾟﾝﾁｬ)
LPT: (ﾘｽﾄ), ULI: (ﾘｽﾄ)
BAT: 物理装置はこの割り当てが RDR: と LST: 装置がｺﾝｿｰﾙ入出力に対して使用されるのを示すためだけに使用されるために含まれません。

RDR, LST, PUN, CON装置はCP/MのBIOS部内で全て定義され、どのI/Oｼｽﾃﾑについても容易に変更されます。 現在の物理装置割当てはIOBYTEにより定義されます(この機能の詳細については第6章をご覧ください)。 転送先装置はﾃﾞｰﾀを受ける能力がなければならず(例えばﾃﾞｰﾀはﾊﾟﾝﾁｬへ送ることができない)、転送元装置はﾃﾞｰﾀを生成する能力がなければなりません(例えばLST:装置は読めません)。

次の一覧はPIP命令で使用できる付加装置名を記述します。

  • NUL:
装置へ40ﾊﾞｲﾄのﾇﾙ(ASCIIｺｰﾄﾞの00H)を送ります。これはﾊﾟﾝﾁ出力の終わりに使用できます。
  • EOF:
転送先装置へCP/Mのﾌｧｲﾙ終了子(ASCIIのCTRL-Z)を送ります(PIPを通す全てのASCIIﾃﾞｰﾀ転送の最後で自動的に送ります)。
  • INP:
PIPﾌﾟﾛｸﾞﾗﾑ内にﾊﾟｯﾁできる特別なPIP入力元です。 PIPはﾃﾞｰﾀ(ﾊﾟﾘﾃｨ ﾋﾞｯﾄは0でなければなりません)がｱﾄﾞﾚｽ0109Hに返るｱﾄﾞﾚｽ0103Hを呼ぶことにより、文字(ﾊﾞｲﾄ)単位で入力ﾃﾞｰﾀを得ます。
  • OUT:
PIPﾌﾟﾛｸﾞﾗﾑ内にﾊﾟｯﾁできる特別なPIP出力先です。 PIPは送出する各文字(ﾊﾞｲﾄ)に対してCﾚｼﾞｽﾀのﾃﾞｰﾀでｱﾄﾞﾚｽ0106Hを呼びます。 PIPﾒﾓﾘ ｲﾒｰｼﾞの0109H～01FFHが使用されず、DDT(第4章参照)を使用する特殊目的ﾄﾞﾗｲﾊﾞにより置換され得ることに注意してください。
  • PRN:
ﾀﾌﾞ(TAB)が全ての8桁境界位置に拡張され、行番号が付き、初期改頁と60行単位での改頁が挿入されることを除いてLST:と同じです(PIP任意選択のt8np使用と同じ)。

ﾌｧｲﾙ名と装置名はPIP命令内に混在できます。 各々の場合で指定装置はEOF(ASCIIﾌｧｲﾙに対するCTRL-Z、非ASCIIﾃﾞｨｽｸ ﾌｧｲﾙに対してはﾃﾞｰﾀ終了)まで読まれます。 各装置またはﾌｧｲﾙからのﾃﾞｰﾀは転送元の最後のﾃﾞｰﾀが読まれてしまうまで左から右の順で連結されます。

転送先装置またはﾌｧｲﾙは転送元ﾌｧｲﾙからのﾃﾞｰﾀを使用して書かれ、ASCIIﾌｧｲﾙについては結果としてEOF(CTRL-Z)文字が追加されます。 転送先がﾃﾞｨｽｸ ﾌｧｲﾙの場合、完全なｺﾋﾟｰの完了でだけ実際のﾌｧｲﾙ名に変更される一時ﾌｧｲﾙ(ﾌｧｲﾙ形式名$$$)が作成されます。 拡張(ﾌｧｲﾙ形式)名COMのﾌｧｲﾙは常に非ASCIIとみなされます。

ｺﾋﾟｰ動作はｷｰﾎﾞｰﾄﾞの何れかのｷｰ押下により何時でも中止できます。 PIPはその動作が完了されないことを示す ABORTED ﾒｯｾｰｼﾞで応答します。 何れかの動作が中止される、または処理中に異常が起こると、PIPはSUBMIT命令使用中に設定されたどんな保留命令も削除します。

転送先がﾌｧｲﾙ形式HEX(Intel HEX形式機械語ｺｰﾄﾞ)のﾃﾞｨｽｸ ﾌｧｲﾙで転送元が紙ﾃｰﾌﾟ ﾘｰﾀﾞのような外部周辺装置の場合、PIPは等別な機能を実行します。 この場合、PIPﾌﾟﾛｸﾞﾗﾑは転送元からの内容(これもﾌｧｲﾙと呼ぶ)が正当な16進値とﾁｪｯｸ ｻﾑ行の正しく形式のHEXﾌｧｲﾙを含むことを保証するために検査します。

無効な入力行が見つかると、PIPはｺﾝｿｰﾙにｴﾗｰ ﾒｯｾｰｼﾞで報告し、復旧処置を待ちます。 通常、ﾘｰﾀﾞを開けて(ﾃｰﾌﾟを50cm程引き戻し、)ﾃｰﾌﾟのその部分を再走行します。 ﾃｰﾌﾟが再読み込みの準備ができたら、ｺﾝｿｰﾙで単独のｷｬﾘｯｼﾞ ﾘﾀｰﾝ(Enter)が入力され、PIPは読み込みを試みます。 そのﾃｰﾌﾟ位置が正しく読めない場合、ｴﾗｰ ﾒｯｾｰｼﾞに続いてﾘﾀｰﾝ(Enter)を入力することにより継続し、ﾃﾞｨｽｸ ﾌｧｲﾙが構築後にEDﾌﾟﾛｸﾞﾗﾑで手動によりその行を入力します。

PIPは転送元ﾌｧｲﾙがRDR:装置の場合にｺﾝｿｰﾙからのEOF(CTRL-Z)入力を許します。 この場合、PIPﾌﾟﾛｸﾞﾗﾑは装置から読み、ｷｰﾎﾞｰﾄﾞを監視します。 CTRL-Zがｷｰﾎﾞｰﾄﾞで入力されると、読み込み動作は普通に終了されます。

次は有効なPIP命令/指示行です。

PIP LST:=X.PRN
X.PRNをLST装置にｺﾋﾟｰしPIPﾌﾟﾛｸﾞﾗﾑを終了。
PIP
順次指示(命令)用にPIPを開始。PIPは * で指示。
*CON:=X.ASM,Y.ASM,Z.ASM
3つのASMﾌｨﾙを連結してCON装置へｺﾋﾟｰ。
*X.HEX=CON:,Y.HEX,PTR:
CTRL-Zが入力されるまでCON装置から読むことでHEXﾌｧｲﾙを作成し、CTRL-Zに出会うまでY.HEXとPTR装置からのﾃﾞｰﾀを続けます。
*PUN:=NUL:,X.ASM,EOF:,NUL:
ﾊﾟﾝﾁｬ装置へﾇﾙを40ﾊﾞｲﾄ送り、X,ASMﾌｧｲﾙをﾊﾟﾝﾁｬへｺﾋﾟｰしてEOF(CTRL-Z)を続け、更にﾇﾙを40ﾊﾞｲﾄ続けます。
ｷｬﾘｯｼﾞ ﾘﾀｰﾝ(Enter:CTRL-M)
単独ｷｬﾘｯｼﾞ ﾘﾀｰﾝはPIPﾌﾟﾛｸﾞﾗﾑを終了します。

空白(ｽﾍﾟｰｽ)なしまたは1つ以上の空白で分離された[ ]で囲まれた1つ以上のPIP引数の指示もできます。 各引数はｺﾋﾟｰ動作に影響を及ぼし、囲まれた一群の引数は影響を及ぼすﾌｧｲﾙまたは装置の直後に続かなければなりません。 一般的に各引数は任意選択10進整数値が続きます(引数SとQを除く)。 表1-4.は有効なPIP引数を記述します。

表1-4. PIP 引数
引数 | 意味
B | 塊(Block)転送。 ﾃﾞｰﾀは転送元装置から受信されたASCII x-off(CTRL-S)文字までPIPによりﾊﾞｯﾌｧされます。 これはｶｾｯﾄ ﾘｰﾀﾞのような継続的読み出し装置からﾃﾞｨｽｸ ﾌｧｲﾙへのﾃﾞｰﾀ転送を許します。 x-offの受信でPIPはﾃﾞｨｽｸ ﾊﾞｯﾌｧを消去して更なるﾃﾞｰﾀ入力に戻ります。 ﾊﾞｯﾌｧできるﾃﾞｰﾀ量はｼｽﾃﾑのﾒﾓﾘ容量に依存します。 ﾊﾞｯﾌｧが溢れると、PIPはｴﾗｰ ﾒｯｾｰｼﾞを表示します。
Dn | 文字型転送元から転送先へﾃﾞｰﾀ転送で欄(桁数/行)を越えて延びた文字を削除(Delete)します。 この引数は通常、長い行を切り詰めて狭幅ﾌﾟﾘﾝﾀまたはｺﾝｿｰﾙ装置へ送るために使用されます。
E | 転送動作が行われる時に全転送動作をｺﾝｿｰﾙへも返します(Echo)。
F | ﾌｧｲﾙからのﾌｫｰﾑ ﾌｨｰﾄﾞを濾過(Filter)します。 組み入れられた全ﾌｫｰﾑ ﾌｨｰﾄﾞは取り去られます。 引数Pは新規ﾌｫｰﾑ ﾌｨｰﾄﾞを挿入するため、同様に使用できます。
Gn | 使用者番号からﾌｧｲﾙを取得します。(n=0～15)
H | HEXﾃﾞｰﾀ転送。 全ﾃﾞｰﾀが正しいIntel HEXﾌｨﾙ形式か検査されます。 このｺﾋﾟｰ動作中、16進行(ﾚｺｰﾄﾞ)間の重要でない文字は削除されます。 ｺﾝｿｰﾙはｴﾗｰが起きた場合に修正操作用に指示されます。
I | Intel HEX形式ﾌｧｲﾙ転送で"00"ﾚｺｰﾄﾞを無視(Ignore)します。 引数Iは引数Hで自動的に設定されます。
L | 大文字を小文字に変換します。
N | 転送先へ転送した各行に1で始まり+1する行番号を付加します。 先行する0は消去され、番号に:が続きます。 N2が指定されると、先行する0が含められ、番号に続いてﾀﾌﾞ(TAB)が挿入されます。 このﾀﾌﾞは引数Tが設定されると展開されます。
O | 非ASCIIｵﾌﾞｼﾞｪｸﾄ ﾌｧｲﾙを転送します。 CP/Mの標準EOF(CTRL-Z)は無視されます。
Pn | 最初の改頁と全ての n 行目で改頁を挿入します。 n が1または指定されない場合、改頁は全ての60行目で起こります。 引数Fが使用されると、ﾌｫｰﾑ ﾌｨｰﾄﾞ消去は新規改頁が挿入される前に行います。
QS^Z | CTRL-Z で終わりを告げる文字/文字列 S との出会いで転送元装置またはﾌｧｲﾙからのｺﾋﾟｰを停止します。
R | ｼｽﾃﾑ ﾌｧｲﾙを読みます(Read)。
Ss^Z | CTRL-Z で終わりを告げる文字/文字列 s との出会いで転送元装置からのｺﾋﾟｰを開始します。 引数SとQはｻﾌﾞﾙｰﾁﾝのようなﾌｧｲﾙの特定領域を抽出するために使用できます。 開始(Start)と停止(Quit)文字はｺﾋﾟｰ動作で常に挿入されます。 このPIP命令指示語の後に命令行を指示する場合、CCPは引数SまたはQに続く文字/文字列を大文字に変換します。 命令行を指示しないなら、PIPは自動的な大文字変換を実行しません。
Tn | 転送元から転送先へ文字を転送中にﾀﾌﾞ(TAB:CTRL-I)を全 n 桁に展開します
U | ｺﾋﾟｰ動作中に小文字を大文字に変換します。
V | 書き込み操作後の読み返しにより正しくｺﾋﾟｰされたか照合します(転送先はﾃﾞｨｽｸ ﾌｧｲﾙでなければなりません)。
W | ｺﾝｿｰﾙでの問い合わせなしにR/Oﾌｧｲﾙに書きます。
Z | 各ASCII文字に対して入力でのﾊﾟﾘﾃｨ ﾋﾞｯﾄを0にします。

次の例はﾌｧｲﾙ転送で引数を指示する有効なPIP命令を示します。

PIP X.ASM=B:[V]
ﾄﾞﾗｲﾌﾞBのX.ASMを現在のﾄﾞﾗｲﾌﾞにｺﾋﾟｰし、ﾃﾞｰﾀが正しくｺﾋﾟｰされたことを検証します。
PIP LPT:=X.ASM[NT8U]
X.ASMを各行の番号、全8桁境界にﾀﾌﾞ展開、小文字を大文字変換でLPT:装置にｺﾋﾟｰします。
PIP PUN:=X.HEX[I],Y.ZOT[H]
最初にX.HEXで後行の:00ﾚｺｰﾄﾞを無視してX.HEXからPUN:装置にｺﾋﾟｰし、続けて:00ﾚｺｰﾄﾞを含めてHEXﾚｺｰﾄﾞを含むY.ZOTを読むことによりﾃﾞｰﾀを転送します。
PIP X.LIB=Y.ASM[sSUBR1:^zqJP L3^z]
Y.ASMﾌｧｲﾙをX.LIBﾌｧｲﾙにｺﾋﾟｰします。 この命令は文字列 SUBR1: が見つかった時にｺﾋﾟｰを始め、文字列 JP L3 との出会い後にｺﾋﾟｰを停止します。
PIP PRN:=X.ASM[p50]
X.ASMを行番号、全8桁境界にﾀﾌﾞ展開、全50行目で改頁でLST:装置へ送ります。 PRNﾌｧｲﾙに対して仮定される引数列は nt8p60 で、 p50 は既定値 p60 を無効にします。

通常操作下のPIPは常時R/O状態に設定されるﾌｧｲﾙを上書きしません。 R/Oﾌｧｲﾙに上書きが試みられると、次の指示が現れます。

DESTINATION FILE IS R/O, DELETE (Y/N)?
Yを入力すると、ﾌｧｲﾙは上書きされます。 そもなければ次の応答が現れます。
** NOT DELETED **
そのﾌｧｲﾙ転送は抜かされ、PIPは手順での次の操作を続けます。 R/Oﾌｧｲﾙ上書きの場合に指示と応答を避けるには、次の例のように命令行に引数Wを含められます。
PIP A:=B:*.COM[W]
引数WはﾄﾞﾗｲﾌﾞBからﾄﾞﾗｲﾌﾞAに全ての非ｼｽﾃﾑ ﾌｧｲﾙをｺﾋﾟｰし、その処理でどのR/Oﾌｧｲﾙも上書きします。 この操作は様々な連鎖したﾌｧｲﾙに関係し、次の例のように引数Wはその一覧の最後のﾌｧｲﾙに含めれるだけが必要です。
PIP A.DAT=B.DAT,F:NEW.DAT,G:OLD.DAT[W]

ｼｽﾃﾑ属性ﾌｧｲﾙは引数Rが含められるならば、PIP転送に含められ、さもなければｼｽﾃﾑ ﾌｧｲﾙは認識されません。 例えば次の命令行

PIP ED.COM=B:ED.COM[R]
は例えBﾄﾞﾗｲﾌﾞのED.COMがR/Oのｼｽﾃﾑ ﾌｧｲﾙと標されていても、そのﾌｧｲﾙを読みます。 存在すれば、そのｼｽﾃﾑ ﾌｧｲﾙ属性はｺﾋﾟｰされます。

旧版CP/Mとの下位互換性はﾌｧｲﾙが1Mﾊﾞｲﾄを越えず、ﾌｧｲﾙ属性が設定されず、ﾌｧｲﾙが使用者0で作成される場合だけ維持されます。 非標準の互換性、例えば倍密度版の1.4が必要とされるなら、内部のﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸを構築する時に1.4互換を選択する必要があるかもしれません。BIOSの違いの記述は第6章と6.10節を参照してください。

注:ﾌｧｲﾙを他の使用者領域へｺﾋﾟｰするには、PIP.COMがその使用者領域に配置されなければなりません。 他の使用者領域にPIP.COMのｺﾋﾟｰを作成するには次の手順を使用してください。

USER 0
使用者0に登記
DDT PIP.COM
PIP容量sを調査/記録のためにPIPをﾒﾓﾘに取得
GO
CCPに復帰
USER 3
使用者3に登記
SAVE s PIP.COM
使用者3用としてPIP.COMを作成

この手順でsはPIPにより占有した256ﾊﾞｲﾄ単位ﾒﾓﾘ ﾍﾟｰｼﾞの整数です。 この数値sはPIP.COMがDDT下に取得/設定される時にNEXT表示下の値を参照することにより決めることができます。 例えば次の利用可能ｱﾄﾞﾚｽが1D00Hなら、PIP.COMは1CHﾍﾟｰｼﾞ(16進数)、1×16＋12＝28ﾍﾟｰｼﾞ必要で、後続の保存でのsの値は28です。 この方法で一旦PIPがｺﾋﾟｰされると、標準PIP転送を通して同じ使用者番号に対して他のﾃﾞｨｽｸにｺﾋﾟｰできます。

1.6.5 ED 命令

文法:
ED ufn

EDﾌﾟﾛｸﾞﾗﾑはCP/M環境でASCIIﾌｧｲﾙの作成と変更を許すCP/Mｼｽﾃﾑ文章ｴﾃﾞｨﾀです。 完全な操作詳細は第2章で与えられます。 EDはEOL(End Of Line)文字(CR+LF)により分離したASCII文字の連続として構成されるｿｰｽ ﾌｧｲﾙの作成と編集を操作者に許します。 ｷｬﾘｯｼﾞ ﾘﾀｰﾝ(CR)間に入力した文字(ﾊﾞｲﾄ)数により定義される行長に特定に制限はありません(1行は作業ﾒﾓﾘ容量を越えられません)。

EDﾌﾟﾛｸﾞﾗﾑにはCP/M下のﾌﾟﾛｸﾞﾗﾑまたはﾃｷｽﾄ ﾌｧｲﾙの作成や修正に有用な文字列検索、置換、挿入について幾つかの命令があります。 CP/Mにはﾒﾓﾘ作業空間領域制限(20K CP/Mｼｽﾃﾑで約5000文字)があるとは言え、この作業領域を通してﾃﾞｰﾀは容易にﾍﾟｰｼﾞ割付されるため、編集できるﾌｧｲﾙ容量は制限されません。

対象が存在しない場合、EDは指定したｿｰｽ ﾌｧｲﾙを作成し、ｱｸｾｽ用にそのﾌｧｲﾙを開きます。 ｿｰｽ ﾌｧｲﾙが存在するなら、編集についてﾃﾞｰﾀを追加します(A命令参照)。 追加したﾃﾞｰﾀはその後表示、変更でき、作業領域からﾃﾞｨｽｸへ書き戻せます(W命令参照)。 ﾌﾟﾛｸﾞﾗﾑでの特定位置で文章により自動的にﾍﾟｰｼﾞ割付と配置ができ、大容量ﾌｧｲﾙの特定部分への容易なｱｸｾｽを許します(N命令参照)。

次の命令行を入力すると、

ED X.ASM
EDﾌﾟﾛｸﾞﾗﾑはED走行中の編集ﾃﾞｰﾀを保持するために X.$$$ と言う中間作業ﾌｧｲﾙを作成します。 EDの完了で(元の)X.ASMﾌｧｲﾙはX.BAKに改名され、編集した作業ﾌｧｲﾙがX.ASMに改名されます。 従ってX.BAKﾌｧｲﾙは元の未編集ﾌｧｲﾙを含み、X.ASMﾌｧｲﾙは新しく編集したﾌｧｲﾙを含みます。 操作者は最新版を削除し、直前版を改名することにより常に直前版のﾌｧｲﾙに戻せます。 現在のX.ASMﾌｧｲﾙが不正に編集されてしまったなら、次の命令手順がﾊﾞｯｸｱｯﾌﾟ ﾌｧｲﾙを再生します。

DIR X.*
BAKﾌｧｲﾙが利用可能かを見て調べます。
ERA X.ASM
最新版を削除します。
REN X.ASM=X.BAK
BAKﾌｧｲﾙをASMに改名します。

元のﾌｧｲﾙを破壊せずにどの位置(ﾘﾌﾞｰﾄ、電源異常、CTRL-CまたはCRL-Q命令)でも編集を中止できます。 この場合、BAKﾌｧｲﾙは作成されず、元のﾌｧｲﾙは常にそのままです。

EDﾌﾟﾛｸﾞﾗﾑは或るﾃﾞｨｽｸのｿｰｽ ﾌｧｲﾙを編集し、他のﾃﾞｨｽｸにﾊﾞｯｸｱｯﾌﾟ ﾌｧｲﾙを作成することを使用者に許します。 このED命令形式は

ED ufn d:
で、ufn は現在の登録ﾃﾞｨｽｸで編集するためのﾌｧｲﾙ名で、d は切り替えるﾄﾞﾗｲﾌﾞ名です。 EDﾌﾟﾛｸﾞﾗﾑはｿｰｽ ﾌｧｲﾙを読んで処理し、ufn 名を使用してﾄﾞﾗｲﾌﾞ d に新規ﾌｧｲﾙを書きます。 処理後、元のﾌｧｲﾙはﾊﾞｯｸｱｯﾌﾟ ﾌｧｲﾙになります。 操作者がﾃﾞｨｽｸAを指示しているなら、次の命令は有効です。
ED X.ASM B:
これはﾄﾞﾗｲﾌﾞAのX.ASMﾌｧｲﾙを編集し、ﾄﾞﾗｲﾌﾞBに新規X.$$$ﾌｧｲﾙを作成します。 編集完了後、A:X.ASMはA:X.BAKに改名され、B:X.$$$がB:X.ASMに改名されます。 利便性のため現在の登録ﾃﾞｨｽｸは編集の最後でﾄﾞﾗｲﾌﾞBになります。 編集開始前にB:X.ASM名のﾌｧｲﾙが存在すると、次のﾒｯｾｰｼﾞが画面に現れることに注意してください。
FILE EXISTS
このﾒｯｾｰｼﾞはｿｰｽ ﾌｧｲﾙの予期せぬ破壊に備える事前警告です。 操作者は先に既存ﾌｧｲﾙを削除し、その後編集操作を再開すべきです。

他の一時命令と同様に編集はﾌｧｲﾙ名に先行するﾄﾞﾗｲﾌﾞ名により現在の登録ﾃﾞｨｽｸと違うﾄﾞﾗｲﾌﾞで行えます。 次は有効な編集要求例です。

ED A:X.ASM
ﾄﾞﾗｲﾌﾞAの新規ﾌｧｲﾙとﾊﾞｯｸｱｯﾌﾟ ﾌｧｲﾙでﾄﾞﾗｲﾌﾞAのX.ASMﾌｧｲﾙを編集します。
ED B:X.ASM A:
ﾄﾞﾗｲﾌﾞAのX.$$$一時ﾌｧｲﾙでﾄﾞﾗｲﾌﾞBのX.ASMﾌｧｲﾙを編集します。 編集後、この命令はﾄﾞﾗｲﾌﾞBのX.ASMをX.BAKに変更し、ﾄﾞﾗｲﾌﾞAのX.$$$をX.ASMに変更します。

1.6.6 SYSGEN 命令

文法:
SYSGEN

SYSGEN一時命令はCP/Mｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑを含む初期化したﾃﾞｨｽｸの生成を許します。 SYSGENﾌﾟﾛｸﾞﾗﾑは示されるように相互対話形式による命令のためにｺﾝｿｰﾙで指示します。

SYSGEN
SYSGENﾌﾟﾛｸﾞﾗﾑ開始。
SYSGEN VERSION x.x
SYSGEN開始ﾒｯｾｰｼﾞ。
SOURCE DRIVE NAME
(OR RETURN TO SKIP)
CP/Mｼｽﾃﾑを含むﾃﾞｨｽｸのﾄﾞﾗｲﾌﾞ名(A～Dの1つ)で応答、通常はA。 MOVCPM命令のため、CP/Mのｺﾋﾟｰが既にﾒﾓﾘ内に存在する場合、ｷｬﾘｯｼﾞ ﾘﾀｰﾝ(Enter)だけを押下してください。 ﾄﾞﾗｲﾌﾞ名dの入力は次の応答を引き起こします。
SOURCE ON d THEN TYPE RETURN
ﾄﾞﾗｲﾌﾞdにCP/Mｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑを含むﾃﾞｨｽｸを挿入してください。 準備ができたらｷｬﾘｯｼﾞ ﾘﾀｰﾝ(Enter)により応答してください。
FUNCTION COMPLETE
ｼｽﾃﾑがﾒﾓﾘにｺﾋﾟｰされます。その後SYSGENは次を指示します。
DESTINATION DRIVE NAME
(OR RETURN TO REBOOT)
ﾃﾞｨｽｸが初期化されているなら、その新ﾃﾞｨｽｸをﾄﾞﾗｲﾌﾞに挿入し、ﾄﾞﾗｲﾌﾞ名を答えてください。 さもなければｷｬﾘｯｼﾞ ﾘﾀｰﾝ(Enter)を押下すると、ｼｽﾃﾑはﾄﾞﾗｲﾌﾞAからﾘﾌﾞｰﾄします。 ﾄﾞﾗｲﾌﾞ名dの入力は次のﾒｯｾｰｼﾞでの指示をSYSGENに引き起こします。
DESTINATION ON d
THEN TYPE RETURN
新ﾃﾞｨｽｸをﾄﾞﾗｲﾌﾞdに挿入し、準備ができたらｷｬﾘｯｼﾞ ﾘﾀｰﾝ(Enter)を押下してください。
FUNCTION COMPLETE
新ﾃﾞｨｽｸはﾄﾞﾗｲﾌﾞdで初期化されます。

DESTINATION指示はｺﾝｿｰﾙで単独ｷｬﾘｯｼﾞ ﾘﾀｰﾝ(Enter)が押下されるまで繰り返され、故に複数ﾃﾞｨｽｸが初期化できます。

ｼｽﾃﾑ生成の成功完了で新ﾃﾞｨｽｸはｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑを含み、組み込み命令だけが利用可能です。 IBM互換ﾃﾞｨｽｸは空ﾃﾞｨﾚｸﾄﾘのﾃﾞｨｽｸとしてCP/Mに思われるため、操作者はPIP一時命令を使用し、新しく構築したﾃﾞｨｽｸに既存CP/Mﾃﾞｨｽｸから適切なCOMﾌｧｲﾙをｺﾋﾟｰしなければなりません。

次のPIP命令を入力することにより、既存ﾃﾞｨｽｸから全ﾌｧｲﾙをｺﾋﾟｰできます。

PIP B:=A:*.*[v]
この命令はﾄﾞﾗｲﾌﾞAからﾄﾞﾗｲﾌﾞBに全ﾌｧｲﾙをｺﾋﾟｰし、各ﾌｧｲﾙが正しくｺﾋﾟｰされたことを照合します。 ｺﾋﾟｰ動作進行中に各ﾌｧｲﾙの名前がｺﾝｿｰﾙで表示されます。

SYSGENが既にﾃﾞｨｽｸ上に存在するﾌｧｲﾙを破壊せず、新規ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑを構築するだけなことを覚えておいてください。 ﾃﾞｨｽｸがﾄﾞﾗｲﾌﾞB～Pだけで使用されていて、ﾄﾞﾗｲﾌﾞAでのﾌﾞｰﾄｽﾄﾗｯﾌﾟ動作元に決してならないなら、SYSGENを行う必要はありません。

1.6.7 SUBMIT 命令

文法:
SUBMIT ufn parm#1 ～ parm#n

SUBMIT命令は自動処理に対し1群にされるCP/M命令を許します。 SUBMIT命令で与えられる ufn は現在の登録ﾃﾞｨｽｸに存在するﾌｧｲﾙ形式SUBと仮定したﾌｧｲﾙのﾌｧｲﾙ名でなければなりません。 このSUBﾌｧｲﾙは引数置換可能なCP/M原型命令を含みます。 parm#1 ～ parm#n 実引数は原型命令内で置換され、誤りが起きなければ置換した命令のﾌｧｲﾙがCP/Mにより順次処理されます。

$1 $2 $3 ～ $n形式の$引数を散在した原型命令ﾌｧｲﾙはEDﾌﾟﾛｸﾞﾗﾑの使用で作成され、実行用にﾌｧｲﾙが付される時に番号に対応する実引数が含められます。 SUBMIT一時命令が実行されると、parm#1 ～ parm#n 実引数は原型命令内の $1 ～ $n 形式引数と対にされます。 形式引数と実引数の番号が対応しなければ、SUBMIT機能はｺﾝｿｰﾙでのｴﾗｰ ﾒｯｾｰｼﾞで中止されます。 SUBMIT機能は登録ﾃﾞｨｽｸに置換した命令のﾌｧｲﾙ $$$.SUB を作成します。 SUBMITの終了とｼｽﾃﾑ ﾘﾌﾞｰﾄ時、この命令ﾌｧｲﾙはｺﾝｿｰﾙに代えて入力元としてCCPにより読まれます。 ﾄﾞﾗｲﾌﾞA以外の何れかのﾃﾞｨｽｸでSUBMIT機能が実行されると、命令はﾃﾞｨｽｸがﾄﾞﾗｲﾌﾞAに挿入され、ｼｽﾃﾑ ﾘﾌﾞｰﾄまで処理されません。 命令が読み返されている時にrub/delｷｰの押下により何時でも命令処理を中止できます。 この場合、$$$.SUBﾌｧｲﾙは削除され、後続の命令はｺﾝｿｰﾙか来ます。 命令処理はCCPがどれかの命令で誤りを検知する場合にも中止されます。 何れかの既存$$$.SUBﾌｧｲﾙの削除によりｴﾗｰ状態が起こると、CP/M下で実行するﾌﾟﾛｸﾞﾗﾑは命令ﾌｧｲﾙの処理を中止し得ます。

SUBMITﾌｧｲﾙ内に$を生成するために$$を入力でき、これは命令ﾌｧｲﾙ内で$に置換します。 ｱﾙﾌｧﾍﾞｯﾄ文字に先行する ^ はこのﾌｧｲﾙ内で1ﾊﾞｲﾄの制御文字(例えば^XはCTRL-X)を生成します。

SUBﾌｧｲﾙ内の最終命令は一群の命令を連結を許す他のSUBﾌｧｲﾙを開始できます。

次の原型命令を含むﾃﾞｨｽｸ上に存在するASMBL.SUBﾌｧｲﾙを想像してください。

ASM $1
DIR $1.*
ERA *.BAK
PIP $2:=$1.PRN
ERA $1.PRN
そして次の命令を実行します。
SUBMIT ASMBL X PRN
SUBMITﾌﾟﾛｸﾞﾗﾑはASMBL.SUBﾌｧｲﾙを読み、$1の全存在に対してXで、$2の全存在に対してPRNで置換します。 この結果の$$$.SUBﾌｧｲﾙは次の命令を含み、CCPにより順次実行されます。
ASM X
DIR X.*
ERA *.BAK
PIP PRN:=X.PRN
ERA X.PRN
SUBMIT機能はﾌｧｲﾙ名に先行するﾄﾞﾗｲﾌﾞ名により変更ﾄﾞﾗｲﾌﾞでSUBﾌｧｲﾙをｱｸｾｽできます。 $$$.SUBﾌｧｲﾙはﾄﾞﾗｲﾌﾞAに現れる時だけ作動されます。 従って後でﾄﾞﾗｲﾌﾞAに挿入された時に実行される$$$.SUBﾌｧｲﾙをﾄﾞﾗｲﾌﾞBで作成することが可能です。

XSUBと呼ばれる付加機能ﾌﾟﾛｸﾞﾗﾑは、CCPだけでなくﾌﾟﾛｸﾞﾗﾑへの行入力を含むSUBMITの利便力を拡張します。 XSUB命令はSUBMITﾌｧｲﾙの最初の行として含められます。 これが実行されると、XSUBはCCP下に直接自己再配置します。 後続の全SUBMIT命令行はﾊﾞｯﾌｧしたｺﾝｿｰﾙ入力を読む(BDOS機能10)ﾌﾟﾛｸﾞﾗﾑのためにXSUBにより処理され、それらの入力はSUBMITﾌｧｲﾙから直接的に受けます。 例えばSAVER.SUBﾌｧｲﾙは次のSUBMIT行を含められ、

XSUB
DDT
I $1.COM
R
G0
SAVE 1 $2.COM
A:SUBMIT SAVER PIP Y のような後続のSUBMIT命令は命令列内の$1をPIPに、$2をYに置換します。 XSUBﾌﾟﾛｸﾞﾗﾑに続いてDDTを取得/設定し、命令行PIP.COM、 R、G0を送り、従ってCCPに復帰します。 最終命令 SAVE 1 Y.COM はCCPにより処理されます。

XSUBﾌﾟﾛｸﾞﾗﾑがﾒﾓﾘ内に残っていると、その存在を示すためにｳｫｰﾑ ﾌﾞｰﾄ毎に次のﾒｯｾｰｼﾞを表示します。

(xsub active)
後続のSUBMIT命令列はｺｰﾙﾄﾞ ﾌﾞｰﾄが間で起こる場合を除いてXSUBの必要はありません。 XSUBが任意選択CP/M DESPOOLﾕｰﾃｨﾘﾃｨと同時に走行する場合、XSUBはDESPOOL後に取得/設定されなければなりません。

1.6.8 DUMP 命令

文法:
DUMP ufn

DUMPﾌﾟﾛｸﾞﾗﾑはﾃﾞｨｽｸ ﾌｧｲﾙ(ufn)の内容をｺﾝｿｰﾙに16進形式で表示します。 ﾌｧｲﾙ内容は各行の左での絶対ﾊﾞｲﾄ ｱﾄﾞﾚｽと共に16ﾊﾞｲﾄ毎に16進で一覧されます。 長い表示は表示中のrub/delｷｰ押下により中止できます。 DUMPﾌﾟﾛｸﾞﾗﾑのｿｰｽ ﾘｽﾄはCP/M環境用書き込みﾌﾟﾛｸﾞﾗﾑ例として第5章で与えられます。

1.6.9 MOVCPM 命令

文法:
MOVCPM

MOVCPMﾌﾟﾛｸﾞﾗﾑはどの特定ﾒﾓﾘ容量に対してもCP/Mｼｽﾃﾑの再設定を許します。 2つの任意選択引数がﾌﾟﾛｸﾞﾗﾑの終了で望んだ新ｼｽﾃﾑ容量と新ｼｽﾃﾑ配置を示すために使用できます。 最初の引数が省略または*が与えられると、MOVCPMﾌﾟﾛｸﾞﾗﾑはｼｽﾃﾑを対象ｼｽﾃﾑ内のKﾊﾞｲﾄ単位のRAM容量(開始ｱﾄﾞﾚｽ=0000H)を基に最大容量に再設定します。 第2引数が省略されるとｼｽﾃﾑは実行されますが、恒久的な記録がされず、*が与えられると、SYSGEN操作用の準備としてﾒﾓﾘ内のままです。 MOVCPMﾌﾟﾛｸﾞﾗﾑはCP/Mのﾒﾓﾘ ｲﾒｰｼﾞを再配置し、このﾒﾓﾘ内のｲﾒｰｼﾞをｼｽﾃﾑ生成操作用に準備した状態に置きます。 次はMOVCPM命令形式の一覧です。

MOVCPM
現在のﾒﾓﾘ設定管理用にCP/Mを再配置して実行します(ﾒﾓﾘは0000HからRAM容量が調べられます)。 再配置完了で新ｼｽﾃﾑは実行されますが、ﾃﾞｨｽｸに恒久的な記録がされません。 構築されたｼｽﾃﾑはIntel MDS800用BIOSを含みます。
MOVCPM n
n (n=20～64)Kﾊﾞｲﾄ ｼｽﾃﾑ管理用に再配置したCP/Mｼｽﾃﾑを作成し、評価としてそのｼｽﾃﾑを実行します。
MOVCPM * *
現在のﾒﾓﾘ設定用に再配置したﾒﾓﾘ ｲﾒｰｼﾞを構築しますが、SYSGEN操作用の準備としてﾒﾓﾘ内のﾒﾓﾘ ｲﾒｰｼﾞのままにします。
MOVCPM n *
n Kﾊﾞｲﾄ ﾒﾓﾘ ｼｽﾃﾑ用に再配置したﾒﾓﾘ ｲﾒｰｼﾞを作成し、SYSGEN操作用の準備としてﾒﾓﾘ ｲﾒｰｼﾞのままにします。

例えば

MOVCPM * *
命令はCP/Mｼｽﾃﾑの新版を構築し、ﾒﾓﾘ内に留まり、SYSGEN操作の準備ができます。 完了で xx がKﾊﾞｲﾄでの現在のﾒﾓﾘ容量の
READY FOR 'SYSGEN' OR
'SAYE 34 CPMxx.COM'
ﾒｯｾｰｼﾞがｺﾝｿｰﾙに現れます。 その後次の手順を入力できます。

SYSGEN
これはｼｽﾃﾑ生成を開始します。
SOURCE DRIVE NAME
(OR RETURN TO SKIP)
直前のMOVCPM操作の結果としてｼｽﾃﾑが既にﾒﾓﾘ内にあるので、CP/M読み込み動作を飛ばすためにｷｬﾘｯｼﾞ ﾘﾀｰﾝ(Enter)で答えます。
DESTINATION DRIVE NAME
OR RETURN TO REBOOT)
ﾄﾞﾗｲﾌﾞBのﾃﾞｨｽｸに新ｼｽﾃﾑを書くためにBで答えます。 SYSGENは次のﾒｯｾｰｼﾞで指示します。
DESTINATION ON B,
THEN TYPE RETURN
ﾄﾞﾗｲﾌﾞBに新ﾃﾞｨｽｸを配し、用意ができたらReturn(Enter)ｷｰを押下してください。

上記のBの代わりにAで答えると、ｼｽﾃﾑはﾄﾞﾗｲﾌﾞBの代わりにﾄﾞﾗｲﾌﾞAに書かれます。 SYSGENﾌﾟﾛｸﾞﾗﾑを中止しｼｽﾃﾑ ﾘﾌﾞｰﾄする単独のｷｬﾘｯｼﾞ ﾘﾀｰﾝ(Enter)で答えるまでSYSGENは

DESTINATION DRIVE NAME (OR RETURN TO REBOOT)
ﾒｯｾｰｼﾞ表示を続けます。

その後、新または旧ﾃﾞｨｽｸでのﾘﾌﾞｰﾄ処理を通して動作できます。 SYSGEN操作実行の代わりにMOVCPM機能の完了で xx がSYSGENﾒｯｾｰｼﾞで示した値の

SAVE 34 CPMxx.COM
形式の命令が入力できます。 現在の登録ﾃﾞｨｽｸ上のこのCP/Mﾒﾓﾘ ｲﾒｰｼﾞは補修できる形式です。 これは第6章で記述されるようにBIOSが特定周辺装置設定用に変更されなければならない非標準環境での動作時に必要です。 次は有効なMOVCPM命令です。

MOVCPM 48
48K版CP/Mを構築し、実行を始めます。
MOVCPM& 48 *
恒久記録準備用に48K版CP/Mを構築し、以下で応答します。
READY FOR 'SYSGEN' OR 'SAVE 34 CPM48.COM'
MOVCPM
最大ﾒﾓﾘ版CP/Mを構築し、実行を始めます。

新たに作成したｼｽﾃﾑは元のﾃﾞｨｽｸのｼﾘｱﾙ番号が適用され、Digital Research ｿﾌﾄｳｪｱ ﾗｲｾﾝｽ契約の条件に従います。


付録 1.7 BDOSｴﾗｰ ﾒｯｾｰｼﾞ

ﾌｧｲﾙ操作中にBDOS(Basic Disk Operating System)が中断する3つのｴﾗｰ状況があります。 これらの条件の1つが検知されると、BDOSは d がﾄﾞﾗｲﾌﾞ名の
BDOS ERR ON d: error
と次の3つ内の1つのｴﾗｰ ﾒｯｾｰｼﾞを表示します。
BAD SECTOR
SELECT
READ ONLY
BAD SECTOR ﾒｯｾｰｼﾞはﾃﾞｨｽｸ制御回路がﾃﾞｨｽｸの読み書きでｴﾗｰ状態を検出したことを示します。 一般的にこの状態はﾃﾞｨｽｸ ｺﾝﾄﾛｰﾗの機能障害または極端に劣悪なﾃﾞｨｽｸにより引き起こされます。 月に1度以上このｴﾗｰをCP/Mが報告する場合、制御回路の状態とﾒﾃﾞｨｱの状態が検査されるべきです。

異なる製造業者が製造した制御器により生成したﾌｧｲﾙ読み込みでこの状態に出会うかもしれません。 制御器がIBM互換と主張しても、おそらく記録形式での小さな違いがあります。 例えばMDS800の制御器はCRCﾃﾞｰﾀ ﾊﾞｲﾄに続いてIBM形式では必要とされない2ﾊﾞｲﾄの全1を必要とします。 この結果、Intel MDSで生成したﾃﾞｨｽｸは殆ど全部の他のIBM互換ｼｽﾃﾑで読めますが、一方、他の製造業者の装置で生成したﾃﾞｨｽｸ ﾌｧｲﾙはMDSで読むと BAD SECTOR を誘引します。 この状態から復帰するには、ﾘﾌﾞｰﾄするためにCTRL-C(最も安全な方法)、またはそのﾌｧｲﾙ操作での不良ｾｸﾀを無視するﾘﾀｰﾝ(Enter)を押下してください。
注:その動作がﾃﾞｨﾚｸﾄﾘ書き込みの場合、ﾘﾀｰﾝ(Enter)押下は無傷のﾃﾞｨｽｸを破壊かもしれません。 この場合、適切なﾊﾞｯｸｱｯﾌﾟを持つことが安全です。

SELECT ｴﾗｰはBIOSでｻﾎﾟｰﾄした範囲を越えるﾄﾞﾗｲﾌﾞの指定を試みる時に起きます。 この場合、ｴﾗｰ ﾒｯｾｰｼﾞの d の値は選択したﾄﾞﾗｲﾌﾞを与えます。 ｼｽﾃﾑはｺﾝｿｰﾙからの何れかの入力に続いてﾘﾌﾞｰﾄします。

READ ONLY ﾒｯｾｰｼﾞはBDOSにより読み出し専用に設定されてしまっているか、またはSTAT命令で読み出し専用として記録されてしまっているﾃﾞｨｽｸまたはﾌｧｲﾙの書き込みを試みる時に起きます。 ｳｫｰﾑ ﾌﾞｰﾄ手順、CTRL-Cの使用、またはﾃﾞｨｽｸが変更される時は必ずｺｰﾙﾄﾞ ﾌﾞｰﾄを実行することによりCP/Mをﾘﾌﾞｰﾄしてください。 変更したﾃﾞｨｽｸが読まれるだけで書かれないなら、BDOSはｳｫｰﾑまたはｺｰﾙﾄﾞ ﾌﾞｰﾄなしの変更をﾃﾞｨｽｸに許しますが、そのﾄﾞﾗｲﾌﾞは内部的に読み込み専用として記されます。 このﾄﾞﾗｲﾌﾞの状態情報はｳｫｰﾑまたはｺｰﾙﾄﾞ ﾌﾞｰﾄが起こると、続いて読み書きに変更されます。 このﾒｯｾｰｼﾞ表示でCP/Mはｺﾝｿｰﾙからの入力を待ちます。 何れかの入力に続いて自動的にｳｫｰﾑ ﾌﾞｰﾄが起きます。


付録 1.8 MDSでのCP/M動作

本項はIntel MDS ﾏｲｸﾛ ｺﾝﾋﾟｭｰﾀ開発ｼｽﾃﾑでCP/Mを使用するための操作手続きを与えます。 MDSｼｽﾃﾑのﾊｰﾄﾞｳｪｱとｿﾌﾄｳｪｱの基本的な知識はあるものと仮定されます。

CP/Mは本質的にIntel ISISｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑと同じ規則で開始されます。 MDSで0～3と標されるﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞは各々CP/MﾄﾞﾗｲﾌﾞのA～Dに対応します。 CP/Mｼｽﾃﾑ ﾃﾞｨｽｸはﾄﾞﾗｲﾌﾞ0に挿入され、BOOTとRESETｽｨｯﾁが続けて押下されます。 割り込み2ﾗﾝﾌﾟがこの時点でONになるべきです。 そしてｼｽﾃﾑ ｺﾝｿｰﾙでｽﾍﾟｰｽが押下され、このﾗﾝﾌﾟが消えるべきです。 そうならなければ、使用者は接続とﾎﾞｰﾚｰﾄを検査すべきです。 BOOTｽｨｯﾁがOFFに切り替えられ、ｼｽﾃﾑ指示 A> が続くCP/M開始ﾒｯｾｰｼﾞが選択したｺﾝｿｰﾙ装置に現れます。 その後、様々な常駐命令または一時命令を実行できます。

CP/Mｼｽﾃﾑは前面ﾊﾟﾈﾙのINT 0ｽｨｯﾁの押下により何時でも再開始(ｳｫｰﾑ ﾌﾞｰﾄ)できます。 組み入れIntel ROMﾓﾆﾀはRST 7機能を代わって制御するDDT下での動作を除いて、RST 7を生成するINT 7ｽｨｯﾁの押下により開始できます。

ﾃﾞｨｽｹｯﾄはﾄﾞﾗｲﾌﾞから何時でも取り外せ、ｼｽﾃﾑはﾃﾞｰﾀの正当性に影響を及ぼさず操作中に落とせます。 挿入したﾃﾞｨｽｸが読み出し専用の場合を除き、ｼｽﾃﾑ (ｺｰﾙﾄﾞまたはｳｫｰﾑ)ﾌﾞｰﾄなしにﾃﾞｨｽｸを取り外したり他へ交換したりしてはなりません。

ﾊｰﾄﾞｳｪｱ異常または機能不全の結果でCP/Mは次のﾒｯｾｰｼﾞを表示するかもしれません。

BDOS ERR ON d: BAD SECTOR
d は恒久的な異常を起こしたﾄﾞﾗｲﾌﾞです。 このｴﾗｰはﾃﾞｨｽｸ動作が後続する不規則なﾄﾞﾗｲﾌﾞ ﾄﾞｱの開閉時、またはﾃﾞｨｽｸ、ﾄﾞﾗｲﾌﾞ、制御器により起こり得ます。 ｺﾝｿｰﾙで単独のﾘﾀｰﾝ(Enter)を押下することにより、任意でこのｴﾗｰを無視することを選択できます。 このｴﾗｰは128ﾊﾞｲﾄまでのﾃﾞｰﾀの再初期化を必要とする不正ﾃﾞｰﾀ記録を誘引するかもしれません。 CP/Mｼｽﾃﾑをﾘﾌﾞｰﾄし、その操作を再試行できます。

不規則で一時的なﾄﾞﾗｲﾌﾞ電気回路への経路を度々作るのを避けるため、電源をOFFに切り替える前にﾃﾞｨｽｸを取り除くことを除いて、CP/M動作の終了は特別な操作の必要はありません。

過去に何れかのISIS版で使用されてしまったﾃﾞｨｽｸよりもIBM互換ﾃﾞｨｽｸを使用すべきです。 特にISIS FORMAT動作はﾃﾞｨｽｸ全体にわたり非標準ｾｸﾀ番号を生成します。 この非標準番号は深刻なCP/M性能低下をもたらし、配布版より顕著な低速動作をCP/Mに引き起こします。 標準ﾃﾞｨｽｸでないﾃﾞｨｽｸの再ﾌｫｰﾏｯﾄが必要になる場合、各ﾄﾗｯｸを順次ｾｸﾀ番号(1～26)での再ﾌｫｰﾏｯﾄをMDS800制御器にさせるﾌﾟﾛｸﾞﾗﾑがCP/M下で書かれなければなりません。

一般的にIBM互換8ｲﾝﾁ ﾃﾞｨｽｸはﾌｫｰﾏｯﾄが必要ありません。 けれども5 1/4ｲﾝﾁ ﾃﾞｨｽｸはﾌｫｰﾏｯﾄが必要です。


付録 2 CP/M ｴﾃﾞｨﾀ

原書ではCP/Mｴﾃﾞｨﾀの詳細記述ですが、本書の目的との関係が薄いため省略しました。


付録 3 CP/M ｱｾﾝﾌﾞﾗ

原書ではCP/Mｱｾﾝﾌﾞﾗの詳細記述ですが、本書の目的との関係が薄いため省略しました。


付録 4 CP/M ﾀﾞｲﾅﾐｯｸ ﾃﾞﾊﾞｯｷﾞﾝｸﾞ ﾂｰﾙ(DDT)

原書ではCP/Mﾀﾞｲﾅﾐｯｸ ﾃﾞﾊﾞｯｷﾞﾝｸﾞ ﾂｰﾙ(DDT)の詳細記述ですが、本書の目的との関係が薄いため省略しました。


付録 5.1 序説

本項はﾒﾓﾘ構造とｼｽﾃﾑ移行点を含むCP/M(2.x)ｼｽﾃﾑ構成を記述します。 本項は周辺とﾃﾞｨｽｸI/Oのｼｽﾃﾑ機能を使用しCP/M下で動作するﾌﾟﾛｸﾞﾗﾑを書くために必要な情報を提供します。

CP/Mは基本入出力ｼｽﾃﾑ(BIOS:Basic Input/Output System)、基本ﾃﾞｨｽｸ ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ(BDOS:Basic Disk Operating System)、ｺﾝｿｰﾙ命令ﾌﾟﾛｾｯｻ(CCP:Console Command Processor)、一時ﾌﾟﾛｸﾞﾗﾑ領域(TPA:Transient Program Area)と呼ばれる論理的な4つの部分に分けられます。 BIOSは周辺I/O装置用に必要な特定ｺﾝﾋﾟｭｰﾀ ｼｽﾃﾑでの正確な下層ｲﾝﾀｰﾌｪｰｽを定義するﾊｰﾄﾞｳｪｱ依存部です。 標準BIOSがDigital Researchより供給されるとは言え、ほぼどんなﾊ^ﾄﾞｳｪｱ環境にも一致するBIOSの再設定についての明確な指示が提供されます。 第6章をご覧ください。

BIOSとBDOSは論理的に共通移行点の単一部に組み合わされ、FDOSとして参照されます。 CCPはﾊﾞｯｸｱｯﾌﾟ保存装置の目録化情報とで人間指向ｲﾝﾀｰﾌｪｰｽを提供するためにFDOSを使用する独特なﾌﾟﾛｸﾞﾗﾑです。 TPAはFDOSとCCPにより使用されないﾒﾓﾘの領域で、様々な非常駐ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ命令と使用者ﾌﾟﾛｸﾞﾗﾑが実行されます。 ﾒﾓﾘ下部はｼｽﾃﾑ情報用に予約され、後で詳述されます。

図 5-1. CP/Mﾒﾓﾘ構造
上位 | FDOS(BIOS+BDOS)
FBASE:
CBASE: | CCP
TBASE: | TPA
BOOT: | ｼｽﾃﾑ ﾊﾟﾗﾒｰﾀ

BOOT, TBASE, CBASE, FBASEに対応する正確なﾒﾓﾘ ｱﾄﾞﾚｽは版により変化し、第6章で完全に記述されます。 すべての標準CP/M版はRAMの基準、BOOT=0000Hと仮定します。 CCPへ制御戻すために必要なﾌﾟﾛｸﾞﾗﾑと変数を取得/設定と初期化するｼｽﾃﾑ ｳｫｰﾑ ﾌﾞｰﾄを実行する機械語はBOOT位置にあります。 従って一時命令は命令ﾚﾍﾞﾙでCP/Mに制御を戻すためにBOOT位置へ飛ぶことだけが必要です。 更に標準版はTBASE=BOOT+0100H、標準的には位置0100Hと仮定します。 原則的なFDOSへの移行点はFBASEへ飛ぶBOOT+0005H(標準的には0005H)です。 BOOT+0006H(標準的には0006H)のｱﾄﾞﾚｽ部はFBASEの値を含み、CCPが一時命令により上書き使用されると仮定する時の利用可能なﾒﾓﾘ容量を決めるために使用できます。

一時命令は次のようにTPA内に取得/設定されて実行されます。 操作者は各指示子に続いて命令行を入力することによりCCPと通信します。 各命令行は次の形式の1つを採ります。

command
command file1
command file1 file2
command はDIRやTYPEのような組み込み機能、または一時命令かﾌﾟﾛｸﾞﾗﾑの名前です。 command がCP/Mの組み込み機能ならば、直ちに実行されます。 さもなければCCPは現在の指定ﾃﾞｨｽｸでﾌｧｲﾙ名 command.COM を検索します。

そのﾌｧｲﾙが見つかると、それはTPAで実行するﾌﾟﾛｸﾞﾗﾑのﾒﾓﾘ ｲﾒｰｼﾞと仮定され、従って暗黙でﾒﾓﾘ内のTBASEで始まります。 CCPはﾃﾞｨｽｸからCOMﾌｧｲﾙをTBASEから始まるﾒﾓﾘ内に取得/設定し、CBASEまで延長し得ます。

その命令に1つまたは2つのﾌｧｲﾙ指定が後続する場合、CCPはｼｽﾃﾑ ﾊﾟﾗﾒｰﾀ領域に1つまたは2つのﾌｧｲﾙ制御ﾌﾞﾛｯｸ(FCB)名を準備します。 これら任意選択FCBはFDOSを通してﾌｧｲﾙをｱｸｾｽするために必要な形式で、5.2節で記述されます。

一時ﾌﾟﾛｸﾞﾗﾑはCCPからの制御を受け取り、FDOSのI/O機能を使用して実行を始めます。 一時ﾌﾟﾛｸﾞﾗﾑはCCPから呼ばれます。 従って処理の完了で単にCCPへ戻れ(RET)、またはCP/Mに制御を戻すためにBOOTへ飛べます。 先の場合、CBASE以上のﾒﾓﾘを使用してはならず、一方、後の場合、ﾒﾓﾘはFBASE-1まで通して使用できます。

一時ﾌﾟﾛｸﾞﾗﾑは操作者ｺﾝｿｰﾙとﾃﾞｨｽｸ補助ｼｽﾃﾑを含む周辺装置との通信のためにCP/MのI/O設備(機能)を使用できます。 I/OｼｽﾃﾑはBOOT+0005HのFDOS移行点を通してCP/Mへの機能番号とｱﾄﾞﾚｽ情報を指示することによりｱｸｾｽされます。 例えばﾃﾞｨｽｸ読み込みの場合、一時命令はﾃﾞｨｽｸ読み込みに対応する番号とそれに対するCP/M FDOSへのFCBｱﾄﾞﾚｽを送ります。 FDOSはそれを実行しﾃﾞｨｽｸ読み込み完了識別か、またはﾃﾞｨｽｸ読み込みが不成功だったことを示すｴﾗｰ番号のどちらかと共に復帰します。


付録 5.2 BDOS呼び出し規約

本項は使用者ﾌﾟﾛｸﾞﾗﾑから直接ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ呼び出しを実行するための詳細情報を提供します。 多くの機能が以下で一覧されますが、ﾏｸﾛ ｱｾﾝﾌﾞﾗ(MAC)とDigital ResearchのProgrammer's Utilities Guide for the CP/M Family of Operating Systems ﾏﾆｭｱﾙで一覧されるI/Oﾏｸﾛ ﾗｲﾌﾞﾗﾘを通してより簡単にｱｸｾｽされます。

一時ﾌﾟﾛｸﾞﾗﾑでのｱｸｾｽ用に利用可能なCP/M機能は単純I/O装置とﾃﾞｨｽｸ ﾌｧｲﾙI/Oの2つの一般的な分野に分かれます。 単純装置操作は以下です。

  • ｺﾝｿｰﾙからの文字読み込み
  • ｺﾝｿｰﾙへの文字書き込み
  • 連続文字読み込み
  • 連続文字書き込み
  • I/O状態の取得または設定
  • ｺﾝｿｰﾙ ﾊﾞｯﾌｧの表示
  • ｺﾝｿｰﾙ準備可の問い合わせ

次のFDOS操作はﾃﾞｨｽｸI/Oを実行します。

  • ﾃﾞｨｽｸ ｼｽﾃﾑ ﾘｾｯﾄ
  • ﾄﾞﾗｲﾌﾞ選択
  • ﾌｧｲﾙ生成
  • ﾌｧｲﾙ閉鎖
  • ﾃﾞｨﾚｸﾄﾘ検索
  • ﾌｧｲﾙ削除
  • ﾌｧｲﾙ改名
  • 順次または不順(ﾗﾝﾀﾞﾑ)読み込み
  • 順次または不順(ﾗﾝﾀﾞﾑ)書き込み
  • 利用可能ﾃﾞｨｽｸ問い合わせ
  • 選択ﾃﾞｨｽｸ問い合わせ
  • DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ設定
  • ﾌｧｲﾙ識別子の設定/解除

上で言及したようにFDOS機能へのｱｸｾｽは基準点BOOT+0005H位置を通して機能番号とｱﾄﾞﾚｽ情報を指定することにより成し遂げられます。 一般的に機能番号はCﾚｼﾞｽﾀ、ｱﾄﾞﾚｽ情報はDEﾚｼﾞｽﾀ ﾍﾟｱで指定されます。 1ﾊﾞｲﾄ値はAﾚｼﾞｽﾀで、2ﾊﾞｲﾄ値はHLﾚｼﾞｽﾀ ﾍﾟｱで返され、機能番号が範囲外の時は0値が戻されます。 互換性のため、全ての場合でH=B, L=Aで戻ります。 CP/M規約のﾚｼﾞｽﾀ指定はIntel PL/M ｼｽﾃﾑ ﾌﾟﾛｸﾞﾗﾐﾝｸﾞ言語のそれと一致します。 CP/M機能とその番号は以下で一覧されます。

番号 | 機能 | 番号 | 機能
0 | ｼｽﾃﾑ ﾘｾｯﾄ | 20 | 順次読み込み
1 | ｺﾝｿｰﾙ入力 | 21 | 順次書き込み
2 | ｺﾝｿｰﾙ出力 | 22 | ﾌｧｲﾙ作成
3 | ﾘｰﾀﾞ入力 | 23 | ﾌｧｲﾙ改名
4 | ﾊﾟﾝﾁｬ出力 | 24 | 登録ﾍﾞｸﾀ取得
5 | ﾘｽﾄ出力 | 25 | 現ﾃﾞｨｽｸ取得
6 | 直接ｺﾝｿｰﾙ入出力 | 26 | DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ設定
7 | I/Oﾊﾞｲﾄ取得 | 27 | 配置区画取得
8 | I/Oﾊﾞｲﾄ設定 | 28 | ﾃﾞｨｽｸ書き込み保護
9 | 文字列表示 | 29 | R/Oﾍﾞｸﾀ取得
10 | ｺﾝｿｰﾙ文字列入力 | 30 | ﾌｧｲﾙ属性設定
11 | ｺﾝｿｰﾙ状態取得 | 31 | ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ取得
12 | ﾊﾞｰｼﾞｮﾝ番号取得 | 32 | 使用者番号取得/設定
13 | ﾃﾞｨｽｸ ｼｽﾃﾑ ﾘｾｯﾄ | 33 | 不順(ﾗﾝﾀﾞﾑ)読み込み
14 | ﾃﾞｨｽｸ選択 | 34 | 不順(ﾗﾝﾀﾞﾑ)書き込み
15 | ﾌｧｲﾙ開始 | 35 | ﾌｧｲﾙ容量取得
16 | ﾌｧｲﾙ閉鎖 | 36 | 不順(ﾗﾝﾀﾞﾑ)ﾚｺｰﾄﾞ設定
17 | 初回検索 | 37 | ﾄﾞﾗｲﾌﾞ ﾘｾｯﾄ
18 | 次回検索 | 38 | (未定義)
19 | ﾌｧｲﾙ削除 | 39 | (未定義)
 |  | 40 | 0での不順(ﾗﾝﾀﾞﾑ)書き込み

機能28と機能32はCP/Mでの上位互換性を維持するために応用ﾌﾟﾛｸﾞﾗﾑで避けられるべきです。

一時ﾌﾟﾛｸﾞﾗﾑへの移行でCCPは8ﾚﾍﾞﾙのｽﾀｯｸ領域に設定したままで、CCPは戻りｱﾄﾞﾚｽをｽﾀｯｸへﾌﾟｯｼｭし、ｵｰﾊﾞｰﾌﾛｰが起こる前に7ﾚﾍﾞﾙを残します。 このｽﾀｯｸが普通一時ﾌﾟﾛｸﾞﾗﾑにより使用されないとは言え(多くの一時ﾌﾟﾛｸﾞﾗﾑは0000H位置へのｼﾞｬﾝﾌﾟを通してCCPに戻る)、FDOSはｼｽﾃﾑ移行でﾛｰｶﾙ(自己)ｽﾀｯｸに切り替えるため、CP/Mｼｽﾃﾑ呼び出しをするには充分な大きさです。 例えば以下のｱｾﾝﾌﾞﾘ言語ﾌﾟﾛｸﾞﾗﾑは*に出会うまで継続的に文字を読み、そしてBOOT=0000Hの標準CP/Mｼｽﾃﾑとの仮定でCCPに制御を戻します

BDOS   EQU  0005H    ;
標準CP/M移行点
CONIN  EQU  1        ;
ｺﾝｿｰﾙ入力機能番号
;
       ORG  0100H    ;
TPA基準位置
NEXTC: LD   C,CONIN  ;
文字入力指定
       CALL BDOS     ;
文字入力(Aに文字)
       CP   '*'      ;
処理終了検査
       JP   NZ,NEXTC ;
*以外で繰り返し継続
       RET           ;
CCPに復帰
       END

CP/Mは完全な空からﾄﾞﾗｲﾌﾞの全容量までのどんなﾚｺｰﾄﾞ数をも含むどんな特定ﾌｧｲﾙも許し論理構造を提供する各ﾃﾞｨｽｸで構築する名付けられたﾌｧｲﾙを実装します。 各ﾄﾞﾗｲﾌﾞは論理的に明確なﾃﾞｨｽｸ ﾃﾞｨﾚｸﾄﾘとﾌｧｲﾙ ﾃﾞｰﾀ領域です。 ﾃﾞｨｽｸ ﾌｧｲﾙ名は選択ﾄﾞﾗｲﾌﾞ ｺｰﾄﾞ、ﾌｧｲﾙ名(空白(ｽﾍﾟｰｽ)を含まない1～8文字(ﾊﾞｲﾄ)構成)、ﾌｧｲﾙ形式(空白(ｽﾍﾟｰｽ)を含まない0～3文字(ﾊﾞｲﾄ)構成)の3部分です。 ﾌｧｲﾙ形式名は一般的に特定ﾌｧｲﾙの分類で、一方、ﾌｧｲﾙ名は各分類での個別ﾌｧｲﾙを明確にします。 表5-1.で一覧したﾌｧｲﾙ形式はそれらがほぼ任意とは言え、一般的に確立してしまっている幾つかの分類の名前です。

表 5-1. CP/M ﾌｧｲﾙ形式名
ﾌｧｲﾙ形式名 | 意味
ASM | ｱｾﾝﾌﾞﾗ ｿｰｽ
PRN | ﾌﾟﾘﾝﾀ ﾘｽﾄ
HEX | 16進機械語ｺｰﾄﾞ
BAS | BASICｿｰｽ ﾌｧｲﾙ
INT | 中間ｺｰﾄﾞ
COM | 命令ﾌｧｲﾙ
PLI | PL/Iｿｰｽ ﾌｧｲﾙ
REL | 再配置可能ﾓｼﾞｭｰﾙ
TEX | TEX ﾌｫｰﾏｯﾀ ｿｰｽ
BAK | ED ｿｰｽ ﾊﾞｯｸｱｯﾌﾟ
SYM | SID ｼﾝﾎﾞﾙ ﾌｧｲﾙ
$$$ | 一時ﾌｧｲﾙ

ｿｰｽ ﾌｧｲﾙはｿｰｽ ﾌｧｲﾙの各行がｷｬﾘｯｼﾞ ﾘﾀｰﾝとﾗｲﾝ ﾌｨｰﾄﾞの連続(CR+LF)が後続するASCII文字の連続として予定されます。 従って128ﾊﾞｲﾄのCP/Mﾚｺｰﾄﾞはｿｰｽ ﾃｷｽﾄの多くの行を含められます。 ASCIIﾌｧｲﾙの最後はCTRL-Z文字(1AH)またはCP/M読み込み操作で戻された実際のﾌｧｲﾙ終了により示されます。 機械語ｺｰﾄﾞ ﾌｧｲﾙ(例えばCOMﾌｧｲﾙ)内に組み込まれたCTRL-Z文字は無視され、CP/Mにより戻されたﾌｧｲﾙ終了状態が読み込み操作の終了に使用されます。

CP/Mのﾌｧｲﾙは128ﾊﾞｲﾄのﾚｺｰﾄﾞで0～65535に番号付けした65535までの順列と考えられ、故にﾌｧｲﾙあたり最大8Mﾊﾞｲﾄを許します。 然しながらﾚｺｰﾄﾞが論理的に続くと見なせるとは言え、ﾃﾞｰﾀがﾃﾞｨｽｸ内で物理的に続かないかもしれないことに注意してください。 内部的に全てのﾌｧｲﾙはｶｳﾝﾀが8ﾋﾞｯﾄ値として容易に保持されるために論理拡張と呼ばれる16Kﾊﾞｲﾄ単位に分割されます。 拡張への分割は次節で説明されますが、各拡張が順次と不順(ﾗﾝﾀﾞﾑ)ｱｸｾｽ動作の両方で自動的にｱｸｾｽされるため、それらはﾌﾟﾛｸﾞﾗﾏにとって特別重要ではありません。

機能15でのﾌｧｲﾙ操作の開始で、通常DEがFCBを指示します。 一時ﾌﾟﾛｸﾞﾗﾑは簡単なﾌｧｲﾙ操作についてBOOT+005CH(一般的には005CH)位置でCP/Mにより予約された既定FCB領域をたびたび使用します。 ﾌｧｲﾙ情報の基本単位は全てのﾌｧｲﾙ操作に対して使用した128ﾊﾞｲﾄ/ﾚｺｰﾄﾞです。 故にﾃﾞｨｽｸI/O用の既定位置は初期の既定DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽであるBOOT+0080H(一般的には0080H)位置でCP/Mにより提供されます。 機能26をご覧ください。

全てのﾃﾞｨﾚｸﾄﾘ操作は互換性が必要とされる初回検索と次回検索の例外を除いて公開1.x版の場合でのような書き込みﾊﾞｯﾌｧに影響を及ぼさず予約した領域で行えます。

FCBﾃﾞｰﾀ領域は順次ｱｸｾｽに対して連続33ﾊﾞｲﾄ、ﾌｧｲﾙが不順(ﾗﾝﾀﾞﾑ)にｱｸｾｽされる場合で連続36ﾊﾞｲﾄから成ります。 既定FCBは一般的に005CHに配置され、BOOT+007DHで始まる3ﾊﾞｲﾄがこの目的に利用可能なため、不順(ﾗﾝﾀﾞﾑ)ｱｸｾｽ ﾌｧｲﾙに対して使用できます。 図5-2.は後続の部分領域でFCB形式を示します。

図 5-2. ﾌｧｲﾙ制御ﾌﾞﾛｯｸ(FCB)形式
ｵﾌｾｯﾄ | 00 | 01 | 02 | ～ | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | ～ | 31 | 32 | 33 | 34 | 35
内容 | DR | F1 ～ F8 |  |  |  | T1 ～ T3 |  |  | EX | S1 | S2 | RC | D0 ～ DN |  |  | CR | R0 | R1 | R2

次表はFCB図での各部分領域の一覧と説明です。
表 5-2. ﾌｧｲﾙ制御ﾌﾞﾛｯｸ(FCB)部分領域
部分領域 | 説明
DR | ﾄﾞﾗｲﾌﾞ ｺｰﾄﾞ。 0=現在の選択ﾄﾞﾗｲﾌﾞ 1=ﾄﾞﾗｲﾌﾞA自動選択 2=ﾄﾞﾗｲﾌﾞB自動選択 ～ 16=ﾄﾞﾗｲﾌﾞP自動選択
F1～F8 | ASCII大文字での本来のﾌｧｲﾙ名(ﾋﾞｯﾄ7=0)。
T1,T2,T3 | ASCII大文字でのﾌｧｲﾙ形式名(ﾋﾞｯﾄ7=0)。 各々のﾋﾞｯﾄ7は次の目的に使用されます。 T1のﾋﾞｯﾄ7=1 : 読み出し専用(R/O) T2のﾋﾞｯﾄ7=1 : ｼｽﾃﾑ ﾌｧｲﾙ(DIR対象外) T3のﾋﾞｯﾄ7=1 : 未定義
EX | 拡張番号。 一般的に使用者により00Hに設定されるが、ﾌｧｲﾙ入出力中は0～31の範囲の値です。
S1 | 予約(未使用)。
S2 | 予約(内部でFCB内容更新の有(=0)/無(=1)ﾌﾗｸﾞに使用)。 ﾌｧｲﾙの開始(ｵｰﾌﾟﾝ)、作成、初回検索呼び出しでは00Hに設定してください。
RC | この拡張内のﾚｺｰﾄﾞ数で、0～127の値を採ります。
D0～Dn | ｼｽﾃﾑ使用予約(CP/Mにより本拡張で使用した配置区画番号で満たされます)。
CR | 順次ﾌｧｲﾙ操作で読み書きするﾚｺｰﾄﾞ番号で、一般的に使用者により00Hに設定されます。
R0,R1,R2 | 0～65535範囲の任意の不順(ﾗﾝﾀﾞﾑ)ﾚｺｰﾄﾞ番号で、R0=下位、R1=上位の16ﾋﾞｯﾄとR2のｵｰﾊﾞｰﾌﾛｰ(1/0)で構成します。

CP/Mを通してｱｸｾｽされる各ﾌｧｲﾙは後続する全てのﾌｧｲﾙ操作に対して名前と割り当て情報を提供する対応したFCBを持たなければなりません。 ﾌｧｲﾙをｱｸｾｽするとき、FCBの下位16ﾊﾞｲﾄを満たすのとCRを初期化するのはﾌﾟﾛｸﾞﾗﾏの責任です。 一般的にｵﾌｾｯﾄ1～11のﾊﾞｲﾄはﾌｧｲﾙ名とﾌｧｲﾙ形式に対してASCII文字値が設定され、一方、他の全ては0です。

FCBはﾃﾞｨｽｸのﾃﾞｨﾚｸﾄ内に保存され、ﾌﾟﾛｸﾞﾗﾏがﾌｧｲﾙ操作を始める前に主ﾒﾓﾘ内に持って来られます(ﾌｧｲﾙ開始とﾌｧｲﾙ作成機能をご覧ください)。 ﾒﾓﾘ上のFCBのｺﾋﾟｰはﾌｧｲﾙ操作が行われる時に更新され、ﾌｧｲﾙ操作の終了で遅れてﾃﾞｨｽｸへ恒久的に記録されます(ﾌｧｲﾙ閉鎖機能をご覧ください)。

CCPは一時命令に続く行の残りを走査することにより、file1とfile2(未指定領域はASCIIの空白(ｽﾍﾟｰｽ))で示された一時命令用の2つの任意FCBの最初の16ﾊﾞｲﾄを構築します。 最初のFCBはBOOT+005CH位置に構築され、後続のﾌｧｲﾙ操作用として使用できます。 2つ目のFCBは最初のFCBのD0～Dn部分を占有するので、使用前にﾒﾓﾘの他の領域へ移動しなければなりません。 例えば次の命令行が入力されると、

PROGNAME B:X.ZOT Y.ZAP
PROGNAME.COM がTPAに取得/設定され、BOOT+005CHの既定FCBはDR=2, ﾌｧｲﾙ名X(F1～8), ﾌｧｲﾙ形式ZOT(T1～3)に初期化されます。 第2のﾄﾞﾗｲﾌﾞ ｺｰﾄﾞは既定値0でBOOT+006CH、ﾌｧｲﾙ名Y(F1～8)がBOOT+006DH、ﾌｧｲﾙ形式が8ﾊﾞｲﾄ後ろのBOOT+0075Hに置かれます。 CRまでの残りの全領域は0に設定されます。 第2のﾌｧｲﾙ名とﾌｧｲﾙ形式を他の領域へ移動するのはﾌﾟﾛｸﾞﾗﾏの責任で、通常、ﾌｧｲﾙ開始操作が第2のﾌｧｲﾙ名とﾌｧｲﾙ形式を上書きするため、BOOT+005CHで始まるﾌｧｲﾙを開く前にﾌｧｲﾙ制御ﾌﾞﾛｯｸを分離することに再度注意してください。

元の命令でﾌｧｲﾙ名が指示されなければ、BOOT+005DHとBOOT+006DHから始まる領域は空白(ｽﾍﾟｰｽ)を含みます。 全ての場合でCCPはCP/Mﾌｧｲﾙ名規約に一致するべく小文字を大文字に変換します。

付加利便性としてBOOT+0080H位置の既定ﾊﾞｯﾌｧ領域は(実行)ﾌﾟﾛｸﾞﾗﾑ名に続いて操作者により入力された命令行後部に初期化されます。 最初の位置は文字(ﾊﾞｲﾄ)数、続いてその文字数分の文字を含みます 上で与えられた命令行はBOOT+0080Hで始まる領域で次のように初期化されます。

BOOT+0080H:
ｵﾌｾｯﾄ | +00 | +01 | +02 | +03 | +04 | +05 | +06 | +07 | +08 | +09 | +0A | +0B | +0C | +0D | +0E
内容 | 0EH | ' ' | 'B' | ':' | 'X' | '.' | 'Z' | 'O' | 'T' | ' ' | 'Y' | '.' | 'Z' | 'A' | 'P'

文字はASCII大文字に変換され、最後の有効文字に未初期化ﾒﾓﾘが続きます。 再び、既定DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽが明らかに変更される場合を除き、何れかのﾌｧｲﾙ操作が実行される前にこのﾊﾞｯﾌｧからの情報を引き出すのはﾌﾟﾛｸﾞﾗﾏの責任です。

個別機能は以下で詳細に記述されます。

機能0: ｼｽﾃﾑ ﾘｾｯﾄ
 | ﾚｼﾞｽﾀ | 値
引数 | C | 00H
戻値 | なし

ｼｽﾃﾑ ﾘｾｯﾄ機能はCCPﾚﾍﾞﾙでCP/Mｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑに制御を戻します。 CCPはﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞAを選択登録することによりﾃﾞｨｽｸ補助ｼｽﾃﾑを再初期化します。 この機能は明らかにBOOT位置へ飛ぶのと同じ効果を持ちます。

機能1: ｺﾝｿｰﾙ入力
 | ﾚｼﾞｽﾀ | 値
引数 | C | 01H
戻値 | A | ASCII文字

ｺﾝｿｰﾙ入力機能は次のｺﾝｿｰﾙ入力文字をAﾚｼﾞｽﾀに読みます。 ｷｬﾘｯｼﾞ ﾘﾀｰﾝ(CR:CTRL-M), ﾗｲﾝ ﾌｨｰﾄﾞ(LF:CTRL-J), ﾊﾞｯｸ ｽﾍﾟｰｽ(BS:CTRL-H)に加えて図表文字はｺﾝｿｰﾙに返し表示されます。 ﾀﾌﾞ(TAB:CTRL-I)文字は次のﾀﾌﾞ停止位置にｶｰｿﾙを移動します。 ｽｸﾛｰﾙの開始/停止(CTRL-S)とﾌﾟﾘﾝﾀ返し出力開始/停止(CTRL-P)に対して検査されます。 FDOSは文字が入力されてしまうまで呼び出しﾌﾟﾛｸﾞﾗﾑに復帰しませんので、文字が用意されない場合、実行を一時停止します。

機能2: ｺﾝｿｰﾙ出力
 | ﾚｼﾞｽﾀ | 値
引数 | C | 01H
 | E | ASCII文字
戻値 | なし

EﾚｼﾞｽﾀのASCII文字がｺﾝｿｰﾙ装置へ送られます。 機能1でのようにﾀﾌﾞは展開され、ｽｸﾛｰﾙ開始/停止とﾌﾟﾘﾝﾀ出力開始/停止について検査します。

機能3: ﾘｰﾀﾞ入力
 | ﾚｼﾞｽﾀ | 値
引数 | C | 03H
戻値 | A | ASCII文字

ﾘｰﾀﾞ入力機能は次の論理ﾘｰﾀﾞ装置からの文字をAﾚｼﾞｽﾀに読みます。 第6章のIOBYTE定義をご覧ください。 文字を読んでしまうまで制御は戻りません。

機能4: ﾊﾟﾝﾁ出力
 | ﾚｼﾞｽﾀ | 値
引数 | C | 04H
 | E | ASCII文字
戻値 | なし

ﾊﾟﾝﾁ出力機能はEﾚｼﾞｽﾀの文字を論理ﾊﾟﾝﾁ装置へ送ります。

機能5: ﾘｽﾄ出力
 | ﾚｼﾞｽﾀ | 値
引数 | C | 05H
 | E | ASCII文字
戻値 | なし

ﾘｽﾄ出力機能はEｼﾞｽﾀの文字を論理ﾘｽﾄ出力装置へ送ります。

機能6: 直接ｺﾝｿｰﾙ入出力
 | ﾚｼﾞｽﾀ | 値
引数 | C | 06H
 | E | 0FFH(入力)またはASCII文字(出力)
戻値 | A | ASCII文字または復帰情報

直接ｺﾝｿｰﾙ入出力は基本ｺﾝｿｰﾙ入出力が必要とされるこれらの特別な応用についてCP/M下で支援します。 この機能の使用は一般的にCP/Mの全ての標準制御文字機能(例えばCTRL-SとCTRL-P)を迂回するので避けられるでしょう。 けれども旧版CP/M下でBIOSを通して直接入出力を実行するﾌﾟﾛｸﾞﾗﾑは将来版のCP/MとMP/M下でもBDOS経由が完全にｻﾎﾟｰﾄされるため、BDOS下の直接入出力の使用に変更されるべきです。

機能6の入力でEﾚｼﾞｽﾀはｺﾝｿｰﾙ入力要求を示す0FFHまたはASCII文字のどちらかを含みます。 入力値が0FFHの場合、機能6は文字が用意できていなければAﾚｼﾞｽﾀ=00Hを返し、さもなければAﾚｼﾞｽﾀは次のｺﾝｿｰﾙ入力文字を含みます。

Eでの入力値が0FFHでない場合、機能6はEが有効なASCII文字を含むと仮定し、ｺﾝｿｰﾙ送ります。

機能6は他のｺﾝｿｰﾙ入出力機能と関連して使用されてはなりません。

機能7: I/Oﾊﾞｲﾄ取得
 | ﾚｼﾞｽﾀ | 値
引数 | C | 07H
戻値 | A | I/Oﾊﾞｲﾄ値

I/Oﾊﾞｲﾄ取得機能は現在のIOBYTE値をAﾚｼﾞｽﾀに返します。 IOBYTE定義については第6章をご覧ください。

機能8: I/Oﾊﾞｲﾄ設定
 | ﾚｼﾞｽﾀ | 値
引数 | C | 08H
 | E | I/Oﾊﾞｲﾄ値
戻値 | なし

I/Oﾊﾞｲﾄ設定機能はEﾚｼﾞｽﾀで与えられる値にIOBYTEを変更します。

機能9: 文字列表示
 | ﾚｼﾞｽﾀ | 値
引数 | C | 09H
 | DE | 文字列先頭ｱﾄﾞﾚｽ
戻値 | なし

文字列表示機能はDEにより与えられた位置のﾒﾓﾘに保存された文字列を文字列内の$に出会うまでｺﾝｿｰﾙ装置へ送ります。 機能2でのようにﾀﾌﾞは展開され、ｽｸﾛｰﾙ開始/停止とﾌﾟﾘﾝﾀ出力開始/停止について検査します。

機能10: ｺﾝｿｰﾙ行入力
 | ﾚｼﾞｽﾀ | 値
引数 | C | 0AH
 | DE | ﾊﾞｯﾌｧ先頭ｱﾄﾞﾚｽ
戻値 | ﾊﾞｯﾌｧにｺﾝｿｰﾙ入力行文字列

ｺﾝｿｰﾙ行入力機能はDEﾚｼﾞｽﾀにより指示されたﾊﾞｯﾌｧ内に編集済みｺﾝｿｰﾙ入力行を読みます。 ｺﾝｿｰﾙ入力はﾊﾞｯﾌｧA溢れ、ｷｬﾘｯｼﾞ ﾘﾀｰﾝ(CR)またはﾗｲﾝ ﾌｨｰﾄﾞ(LF)が入力されると終了されます。 読み込みﾊﾞｯﾌｧは次の形式を採ります。

DE: | +0 | +1 | +2 | +3 | +4 | +5 | +6 | +7 | +8 | ～ | +n
内容 | mx | nc | c1 | c2 | c3 | c4 | c5 | c6 | c7 | ～ | ??

mx(使用者指定)はﾊﾞｯﾌｧに保持する1～155の最大文字(ﾊﾞｲﾄ)数、ncは読み込み文字数でｺﾝｿｰﾙからの読み込み文字が後続します(復帰時FDOSにより設定)。 nc < mxなら、最終文字に上図で??により示される未初期化領域が続きます。 表5-3.で一覧される幾つかの制御機能が行編集中に認識されます。
表 5-3. 編集制御文字
文字 | 編集制御機能
rub/del | 最終文字の削除と返し
CTRL-C | 行先頭時ﾘﾌﾞｰﾄ
CTRL-E | 物理行終了(改行)
CTRL-H | 1文字分ﾊﾞｯｸ ｽﾍﾟｰｽ
CTRL-J | (ﾗｲﾝ ﾌｨｰﾄﾞ)行入力終了
CTRL-M | (ｷｬﾘｯｼﾞ ﾘﾀｰﾝ:Enter)行入力終了
CTRL-R | 改行後現在行再表示
CTRL-U | 現在行削除
CTRL-X | CTRL-Uに同じ

使用者は指示子が終わった桁位置にだけｷｬﾘｯｼﾞを左端位置に戻す或る機能(例えばCTRL-X)にも注意すべきです。 初期版でｷｬﾘｯｼﾞは最左端へ戻りました。 この規約は操作者のﾃﾞｰﾀ入力と行修正をより明瞭にします。

機能11: ｺﾝｿｰﾙ状態取得
 | ﾚｼﾞｽﾀ | 値
引数 | C | 0BH
戻値 | A | ｺﾝｿｰﾙ状態ｺｰﾄﾞ

ｺﾝｿｰﾙ状態機能は文字がｺﾝｿｰﾙで入力されてしまっているかを見るために検査します。 文字が用意されていると、Aﾚｼﾞｽﾀに0FFH値が返されます。 さもなければ00H値が返されます。

機能12: ﾊﾞｰｼﾞｮﾝ番号取得
 | ﾚｼﾞｽﾀ | 値
引数 | C | 0CH
戻値 | HL | ﾊﾞｰｼﾞｮﾝ番号

機能12はﾊﾞｰｼﾞｮﾝに依存しないﾌﾟﾛｸﾞﾗﾐﾝｸﾞを許す情報を提供します。 CP/Mを示すH=00H(01HはMP/M)と2.0より前の全ての版に対するL=00Hの2ﾊﾞｲﾄ値が返されます。 CP/M 2.0はLﾚｼﾞｽﾀで20H、続く2.x版は21H～2FHの範囲で返されます。 例えば機能12の使用で使用者は順次と不順(ﾗﾝﾀﾞﾑ)ｱｸｾｽ機能の両方を提供する応用ﾌﾟﾛｸﾞﾗﾑを書けます。

機能13: ﾃﾞｨｽｸ ｼｽﾃﾑ ﾘｾｯﾄ
 | ﾚｼﾞｽﾀ | 値
引数 | C | 0DH
戻値 | なし

ﾃﾞｨｽｸ ﾘｾｯﾄ機能は全ﾃﾞｨｽｸが読み書きに設定されるﾘｾｯﾄ状態にするﾌﾟﾛｸﾞﾗﾑ的なﾌｧｲﾙ ｼｽﾃﾑ再保存に使用されます。 機能28と機能29をご覧ください。 Aﾄﾞﾗｲﾌﾞだけが選択され、既定DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽがBOOT+0080Hにﾘｾｯﾄされます。 例えばこの機能はｼｽﾃﾑ ﾘﾌﾞｰﾄなしにﾃﾞｨｽｸ交換を必要とする応用ﾌﾟﾛｸﾞﾗﾑで使用できます。

機能14: ﾃﾞｨｽｸ選択
 | ﾚｼﾞｽﾀ | 値
引数 | C | 0EH
 | E | 選択ﾃﾞｨｽｸ番号
戻値 | なし

ﾃﾞｨｽｸ選択機能は全16ﾄﾞﾗｲﾌﾞ ｼｽﾃﾑでAﾄﾞﾗｲﾌﾞに対してE=0、Bﾄﾞﾗｲﾌﾞに対して1、同様にPﾄﾞﾗｲﾌﾞに対応する15までで、後続するﾌｧｲﾙ操作に対する既定ﾃﾞｨｽｸとしてEﾚｼﾞｽﾀでﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞ名を指定します。 このﾄﾞﾗｲﾌﾞは次のｺｰﾙﾄﾞ ﾌﾞｰﾄ、ｳｫｰﾑ ﾌﾞｰﾄ、ﾃﾞｨｽｸ ｼｽﾃﾑ ﾘｾｯﾄ操作までﾃﾞｨﾚｸﾄﾘが活性(有効)なｵﾝﾗｲﾝ状態に置かれます。 ｵﾝﾗｲﾝ中にﾃﾞｨｽｸのﾒﾃﾞｨｱが交換されると、ﾄﾞﾗｲﾌﾞは標準CP/M環境で自動的に読み込み専用状態になります(機能28参照)。 ﾄﾞﾗｲﾌﾞ ｺｰﾄﾞ0(DR=00H)に指定したFCBは自動的に現在選択した既定ﾄﾞﾗｲﾌﾞを参照します。

機能15: ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)
 | ﾚｼﾞｽﾀ | 値
引数 | C | 0FH
 | DE | FCB先頭ｱﾄﾞﾚｽ
戻値 | A | ﾃﾞｨﾚｸﾄﾘ情報ｺｰﾄﾞ

ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)操作は現在有効な使用者番号についてﾃﾞｨｽｸ ﾃﾞｨﾚｸﾄﾘで現存するﾌｧｲﾙを有効にするために使用されます。 FDOSはDEにより参照されるFCBの1～14位置に一致する参照ﾃﾞｨｽｸ ﾃﾞｨﾚｸﾄﾘを走査します(FCBのS1ﾊﾞｲﾄは自動的に00Hにされます)。 ASCIIの?(3FH)はこれらのどの位置でもどのﾃﾞｨﾚｸﾄﾘ文字にも一致するとみなされます。 一般的に?は含まれず、FCBのEXとS2ﾊﾞｲﾄは0です。

ﾃﾞｨﾚｸﾄﾘ要素が合致されると、関連ﾃﾞｨﾚｸﾄﾘ情報がFCBのD0～Dnに複写され、故に後続する読み書き操作を通してﾌｧｲﾙへのｱｸｾｽを許します。 使用者は既存ﾌｧｲﾙは開始(ｵｰﾌﾟﾝ)操作が成功裏に終わるまでｱｸｾｽできないことに注意すべきです。 復帰時、開始(ｵｰﾌﾟﾝ)機能は成功なら0～3、ﾌｧｲﾙが見つからなければ255(0FFH)のﾃﾞｨﾚｸﾄﾘ情報ｺｰﾄﾞを返します。 ?がFCBに現れると、最初に一致したFCBが活性(有効)にされます。 ﾌｧｲﾙが最初のﾚｺｰﾄﾞから順次ｱｸｾｽされるなら、現ﾚｺｰﾄﾞ番号(CR)がﾌﾟﾛｸﾞﾗﾑにより0にされなければならないことに注意してください。

機能16: ﾌｧｲﾙ閉鎖
 | ﾚｼﾞｽﾀ | 値
引数 | C | 10H
 | DE | FCB先頭ｱﾄﾞﾚｽ
戻値 | A | ﾃﾞｨﾚｸﾄﾘ情報ｺｰﾄﾞ

ﾌｧｲﾙ閉鎖機能はﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)機能の逆を実行します。 この閉鎖機能はDEで与えられﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)機能またはﾌｧｲﾙ作成機能を通して前に有効にされてしまっているFCBを参照ﾃﾞｨｽｸ ﾃﾞｨﾚｸﾄﾘに新規(更新)FCBとして恒久的に記録します(機能15と機能22をご覧ください)。 閉鎖についてのFCB一致処理は開始(ｵｰﾌﾟﾝ)機能と同じです。 ﾃﾞｨﾚｸﾄﾘ情報ｺｰﾄﾞは閉鎖成功に対して0～3、一方、ﾃﾞｨﾚｸﾄﾘでﾌｧｲﾙ名が見つからないなら255(0FFH)が返されます。 読み込み操作だけが行われるなら、ﾌｧｲﾙは閉鎖の必要がありません。 書き込み操作が起こると、新しいﾃﾞｨﾚｸﾄﾘ情報を恒久的に記録するために閉鎖処理が必要です。

機能17: 初回検索
 | ﾚｼﾞｽﾀ | 値
引数 | C | 11H
 | DE | FCB先頭ｱﾄﾞﾚｽ
戻値 | A | ﾃﾞｨﾚｸﾄﾘ情報ｺｰﾄﾞ

初回検索はDEにより指示されたFCBで与えられたﾌｧｲﾙと一致するﾃﾞｨﾚｸﾄﾘを走査します。 ﾌｧｲﾙが見つからなければ255(0FFH)値が返され、さもなければﾌｧｲﾙが存在することを示す0～3が返されます。 ﾌｧｲﾙが見つかると、現在のDMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽからのﾊﾞｯﾌｧがそのﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘを含むﾚｺｰﾄﾞで満たされ、相対的な開始位置はA×32(Aﾚｼﾞｽﾀの左5ﾋﾞｯﾄ回転/ｼﾌﾄまたは5回のADD A,A)です。 応用ﾌﾟﾛｸﾞﾗﾑでは一般的に必要とされないとは言え、ﾃﾞｨﾚｸﾄﾘ情報はこの位置でﾊﾞｯﾌｧから抜き出せます。

F1～EXのどの位置でのASCIIの?(63(10進):3FH(16進))は自動選択した、または既定のﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞのどのﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘの対応する部分領域とも一致します。 DRがASCIIの?を含むと、自動ﾃﾞｨｽｸ選択機能が禁止され、既定ﾃﾞｨｽｸが検索され、その検索機能は使用者番号どれもに加え、割り当て済みまたは空の何れかの一致したｴﾝﾄﾘで戻ります。 この?文字機能は一般的に応用ﾌﾟﾛｸﾞﾗﾑにより使用されませんが、現在の全ﾃﾞｨﾚｸﾄﾘ値を走査する完全な柔軟性を許します。 DRが?でなければ、S2ﾊﾞｲﾄは自動的に0にされます。

機能18: 次回検索
 | ﾚｼﾞｽﾀ | 値
引数 | C | 12H
戻値 | A | ﾃﾞｨﾚｸﾄﾘ情報ｺｰﾄﾞ

次回検索機能は最後に一致したｴﾝﾄﾘの次からﾃﾞｨﾚｸﾄﾘ走査を続けることを除いて初回検索と同じです。 機能17同様に機能18はもうﾃﾞｨﾚｸﾄﾘ項目一致がないと、255(0FFH)値を返します。

機能19: ﾌｧｲﾙ削除
 | ﾚｼﾞｽﾀ | 値
引数 | C | 13H
 | DE | FCB先頭ｱﾄﾞﾚｽ
戻値 | A | ﾃﾞｨﾚｸﾄﾘ情報ｺｰﾄﾞ

ﾌｧｲﾙ削除機能はDEにより指示されたFCBに一致するﾌｧｲﾙを取り除きます。 ﾌｧｲﾙ名とﾌｧｲﾙ形式名は曖昧参照(様々な位置での?)を含められますが、ﾄﾞﾗｲﾌﾞ選択ｺｰﾄﾞは初回検索や次回検索のように曖昧にできません。

機能19は参照したﾌｧｲﾙが見つからなければ255(0FFH)を返し、さもなければ0～3範囲の値を返します。

機能20: 順次読み込み
 | ﾚｼﾞｽﾀ | 値
引数 | C | 14H
 | DE | FCB先頭ｱﾄﾞﾚｽ
戻値 | A | ﾃﾞｨﾚｸﾄﾘ情報ｺｰﾄﾞ

DEで与えられﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)機能またはﾌｧｲﾙ作成機能を通して前に有効にされてしまっているFCBで、順次読み込み機能はﾌｧｲﾙから現在のDMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽのﾒﾓﾘ内に次のﾚｺｰﾄﾞ(128ﾊﾞｲﾄ)を読みます。 このﾚｺｰﾄﾞはこの拡張(ｴﾝﾄﾘ)のCR位置から読み、CRは次のﾚｺｰﾄﾞ位置へ自動的に増加(+1)されます。 CRが溢れると、次の論理拡張(ｴﾝﾄﾘ)が自動的に開かれ、CRは次の読み込み操作に備え0にﾘｾｯﾄされます。 読み込み操作が成功ならAﾚｼﾞｽﾀに00H値が返され、一方、次のﾚｺｰﾄﾞ位置にﾃﾞｰﾀが存在しなければ(例えばﾌｧｲﾙ終了発生)、非0値が返されます。

機能21: 順次書き込み
 | ﾚｼﾞｽﾀ | 値
引数 | C | 15H
 | DE | FCB先頭ｱﾄﾞﾚｽ
戻値 | A | ﾃﾞｨﾚｸﾄﾘ情報ｺｰﾄﾞ

DEで与えられﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)機能またはﾌｧｲﾙ作成機能を通して前に有効にされてしまっているFCBで、順次書き込み機能は現在のDMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽの128ﾊﾞｲﾄ ﾚｺｰﾄﾞ ﾃﾞｰﾀをFCBでの名前のﾌｧｲﾙに書きます。 このﾚｺｰﾄﾞはﾌｧｲﾙのCR位置に置かれ、CRは次のﾚｺｰﾄﾞ位置へ自動的に増加(+1)されます。 CRが溢れると、次の論理拡張(ｴﾝﾄﾘ)が自動的に開かれ、CRは次の書き込み操作に備え0にﾘｾｯﾄされます。 書き込み操作が成功ならAﾚｼﾞｽﾀに00H値が返され、一方、非0値はﾃﾞｨｽｸ満杯により引き起こされた書き込み不成功を示します。

機能22: ﾌｧｲﾙ作成
 | ﾚｼﾞｽﾀ | 値
引数 | C | 16H
 | DE | FCB先頭ｱﾄﾞﾚｽ
戻値 | A | ﾃﾞｨﾚｸﾄﾘ情報ｺｰﾄﾞ

ﾌｧｲﾙ作成操作はFCBが現在参照したﾃﾞｨｽｸ ﾃﾞｨﾚｸﾄﾘに存在しない(DR=0の既定ﾃﾞｨｽｸまたは非0のDRで明示的に名付けられた或る)ﾌｧｲﾙ名でなければならないことを除いてﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)操作と同じです。 FDOSはﾌｧｲﾙを作成し、ﾃﾞｨﾚｸﾄﾘと主ﾒﾓﾘ両方の値を空ﾌｧｲﾙに初期化します。 ﾌﾟﾛｸﾞﾗﾏは重複ﾌｧｲﾙ名が起きないことを保証しなければならず、何れかの重複の可能性があるなら先行するﾌｧｲﾙ削除操作が大事です。 戻りでのAﾚｼﾞｽﾀは成功なら0～3、これ以上ﾃﾞｨﾚｸﾄﾘ領域が利用できないなら255(0FFH)です。 この作成機能はFCB活性(有効)化の効果の側面を持ち、従って後続するﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)は必要ありません。

機能23: ﾌｧｲﾙ名変更
 | ﾚｼﾞｽﾀ | 値
引数 | C | 17H
 | DE | FCB先頭ｱﾄﾞﾚｽ
戻値 | A | ﾃﾞｨﾚｸﾄﾘ情報ｺｰﾄﾞ

改名機能は最初の16ﾊﾞｲﾄでのﾌｧｲﾙ名の全存在を次の16ﾊﾞｲﾄでのﾌｧｲﾙ名に変更するためにDEにより指示されたFCBを使用します。 位置0のﾄﾞﾗｲﾌﾞ ｺｰﾄﾞ(DR)はﾄﾞﾗｲﾌﾞを選択するために使用され、一方、FCBの位置16の進ﾌｧｲﾙ名に対するﾄﾞﾗｲﾌﾞ ｺｰﾄﾞは0と仮定されます。 復帰でのAﾚｼﾞｽﾀは改名が成功なら0～3の間の値、最初のﾌｧｲﾙ名がﾃﾞｨﾚｸﾄﾘ走査で見つけられなければ255(0FFH)です。

機能24: 登録ﾍﾞｸﾀ取得
 | ﾚｼﾞｽﾀ | 値
引数 | C | 18H
戻値 | HL | 登録ﾍﾞｸﾀ

CP/Mにより返された登録ﾍﾞｸﾀ値はHLﾚｼﾞｽﾀの16ﾋﾞｯﾄ値で、LﾚｼﾞｽﾀのLSBが最初のAﾄﾞﾗｲﾌﾞに対応し、HﾚｼﾞｽﾀのMSBが16番目のPﾄﾞﾗｲﾌﾞに対応します。 ﾋﾞｯﾄの0値はそのﾄﾞﾗｲﾌﾞがｵﾝﾗｲﾝでないことを示し、一方、1値は明確なﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞ選択または非0のDR指定でのﾌｧｲﾙ操作により引き起こされた暗黙のﾄﾞﾗｲﾌﾞ選択の結果として活性(有効)なｵﾝﾗｲﾝのﾄﾞﾗｲﾌﾞを標します。 使用者は復帰でAとLﾚｼﾞｽﾀが同じ値を含むため初期版との互換性が維持されることに注意すべきです。

機能25: 現ﾃﾞｨｽｸ番号取得
 | ﾚｼﾞｽﾀ | 値
引数 | C | 19H
戻値 | A | 現ﾃﾞｨｽｸ番号

機能25は現在選択している既定ﾃﾞｨｽｸ番号をAﾚｼﾞｽﾀに返します。 ﾃﾞｨｽｸ番号は0～15の範囲でﾄﾞﾗｲﾌﾞA～Pに対応します。

機能26: DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ設定
 | ﾚｼﾞｽﾀ | 値
引数 | C | 1AH
 | DE | DMA(転送ﾊﾞｯﾌｧ)先頭ｱﾄﾞﾚｽ
戻値 | なし

DMAはﾒｲﾝﾌﾚｰﾑ ｺﾝﾋﾟｭｰﾀのﾒﾓﾘとﾃﾞｨｽｸ補助ｼｽﾃﾑ間でﾃﾞｰﾀを転送するために直接ｱｸｾｽするﾃﾞｨｽｸ制御器との接続に度々使用されるDirect Memory Accessの頭字語です。 多くのｺﾝﾋﾟｭｰﾀ ｼｽﾃﾑが非DMA(ﾃﾞｰﾀはﾌﾟﾛｸﾞﾗﾑI/O操作を通して転送)を使用するとは言え、CP/MでのDMAｱﾄﾞﾚｽはﾃﾞｨｽｸ書き込み後とﾃﾞｨｽｸ読み込み前に存在する128ﾊﾞｲﾄ ﾃﾞｰﾀ ﾚｺｰﾄﾞのｱﾄﾞﾚｽの意味になります。 ｺｰﾙﾄﾞまたはｳｫｰﾑ ﾌﾞｰﾄ、ﾃﾞｨｽｸ ｼｽﾃﾑ ﾘｾｯﾄでDMAｱﾄﾞﾚｽは自動的にBOOT+0080Hに設定されます。 DMA設定機能はこの既定値をﾃﾞｰﾀ ﾚｺｰﾄﾞが存在する他のﾒﾓﾘ領域のｱﾄﾞﾚｽへ変更するために使用できます。 従ってDMAｱﾄﾞﾚｽは以降のDMA設定機能、ｺｰﾙﾄﾞまたはｳｫｰﾑ ﾌﾞｰﾄ、ﾃﾞｨｽｸ ｼｽﾃﾑ ﾘｾｯﾄにより変更されるまでDEにより指定された値になります。

機能27: 配置区画ｱﾄﾞﾚｽ取得
 | ﾚｼﾞｽﾀ | 値
引数 | C | 1BH
戻値 | HL | 配置区画基準ｱﾄﾞﾚｽ

配置区画ﾍﾞｸﾀはｵﾝﾗｲﾝの各ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞに対して主ﾒﾓﾘに保持されます。 様々なｼｽﾃﾑ ﾌﾟﾛｸﾞﾗﾑが保存残容量を測定するために配置区画ﾍﾞｸﾀにより提供される情報を使用します(STATﾌﾟﾛｸﾞﾗﾑをご覧ください)。 機能27は現在せんたくしたﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞに対する配置区画ﾍﾞｸﾀの基準ｱﾄﾞﾚｽを返します。 けれども選択したﾃﾞｨｽｸが読み込み専用に標されてしまっていると、その配置情報は無効かもしれません。 この機能が一般的に応用ﾌﾟﾛｸﾞﾗﾑにより使用されないとは言え、配置区画ﾍﾞｸﾀの付加的な詳細は第6章で得られます。

機能28: ﾃﾞｨｽｸ書き込み保護設定
 | ﾚｼﾞｽﾀ | 値
引数 | C | 1CH
戻値 | なし

ﾃﾞｨｽｸ書き込み保護機能は現在選択したﾃﾞｨｽｸに対して一時的な書込み保護を提供します。 以降のｺｰﾙﾄﾞまたはｳｫｰﾑ ﾌﾞｰﾄ操作前のそのﾃﾞｨｽｸへの書き込みの試みはBDOS ERR on d: R/Oﾒｯｾｰｼﾞを生成します。

機能29: 読み込み専用ﾍﾞｸﾀ取得
 | ﾚｼﾞｽﾀ | 値
引数 | C | 1DH
戻値 | HL | R/Oﾍﾞｸﾀ値

機能29はHLﾚｼﾞｽﾀ ﾍﾟｱに一時的に設定された読み込み専用ﾋﾞｯﾄを持つﾄﾞﾗｲﾌﾞを示すﾋﾞｯﾄ ﾍﾞｸﾀを返します。 機能24でのようにLﾚｼﾞｽﾀのLSBが最初のAﾄﾞﾗｲﾌﾞに対応し、HﾚｼﾞｽﾀのMSBが16番目のPﾄﾞﾗｲﾌﾞに対応します。 R/Oﾋﾞｯﾄは明示的な機能28呼び出し、またはCP/M内の自動的なｿﾌﾄｳｪｱ機構でのﾃﾞｨｽｸ交換検出のどちらかにより設定(1)されます。

機能30: ﾌｧｲﾙ属性設定
 | ﾚｼﾞｽﾀ | 値
引数 | C | 1EH
 | DE | FCB先頭ｱﾄﾞﾚｽ
戻値 | A | ﾃﾞｨﾚｸﾄﾘ情報ｺｰﾄﾞ

ﾌｧｲﾙ属性設定機能はﾌｧｲﾙに付随した恒久的な識別子のﾌﾟﾛｸﾞﾗﾑ的な操作を許します。 特に読み出し専用(R/O)とｼｽﾃﾑ属性(T1とT2のMSB)が設定または解除できます。 DEﾚｼﾞｽﾀ ﾍﾟｱは適切に設定または解除した明示的なﾌｧｲﾙ名(FCB)をｱﾄﾞﾚｽ指定します。 機能30は一致ﾌｧｲﾙを検索し選択した識別子を含む一致ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘを変更します。 F1～F4の識別子(MSB)は現在使用されず、これらがﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)と閉鎖(ｸﾛｰｽﾞ)操作中の一致操作に含まれないため、応用ﾌﾟﾛｸﾞﾗﾑで使用できます。 F5～F8とT3の識別子(MSB)は将来のｼｽﾃﾑ拡張に予約されています。

機能31: ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ取得
 | ﾚｼﾞｽﾀ | 値
引数 | C | 1FH
戻値 | HL | DPB先頭ｱﾄﾞﾚｽ

この機能呼び出しの結果として、BIOS常駐のﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸの先頭ｱﾄﾞﾚｽが返されます。 このｱﾄﾞﾚｽは2つの目的のどちらかに使用できます。 1つ目は空きを計算し表示する目的でﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ値が得られ、または必要なら一時ﾌﾟﾛｸﾞﾗﾑはﾃﾞｨｽｸ環境変更時に現在のﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ値を動的に変更できます。 一般的に応用ﾌﾟﾛｸﾞﾗﾑはこの機能を必要としないでしょう。

機能32: 使用者番号取得/設定
 | ﾚｼﾞｽﾀ | 値
引数 | C | 20H
 | E | 0FFH(取得時)または使用者番号(設定時)
戻値 | A | 現在の使用者番号(取得時)またはなし(設定時)

応用ﾌﾟﾛｸﾞﾗﾑは機能32を呼び出すことにより現在有効な使用者番号の問い合わせと変更ができます。 Eﾚｼﾞｽﾀ=0FFHなら、0～15範囲の現在の使用者番号値がAﾚｼﾞｽﾀに返されます。 Eﾚｼﾞｽﾀが0FFH以外なら、現在の使用者番号がEﾚｼﾞｽﾀの下位4ﾋﾞｯﾄ値に変更されます。

機能33: 不順(ﾗﾝﾀﾞﾑ)読み込み
 | ﾚｼﾞｽﾀ | 値
引数 | C | 21H
 | DE | FCB先頭ｱﾄﾞﾚｽ
戻値 | A | 結果情報ｺｰﾄﾞ

不順(ﾗﾝﾀﾞﾑ)読み込みはFCBに続く3ﾊﾞｲﾄ領域(ﾊﾞｲﾄ位置はR0=FCB+33,R1=FCB+34,R2=FCB+35)で構成した24ﾋﾞｯﾄ値により選択した特定ﾚｺｰﾄﾞ番号で読み込み操作を行うことを除いて、以前の公開版の順次ﾌｧｲﾙ読み込みと同じです。 使用者は24ﾋﾞｯﾄ列が最下位ﾊﾞｲﾄ(R0)、中間ﾊﾞｲﾄ(R1)、最上位ﾊﾞｲﾄ(R2)で格納されることに注意すべきです。 CP/Mはﾌｧｲﾙ容量の計算(機能35参照)を除いてR2ﾊﾞｲﾄを参照しません。 R2ﾊﾞｲﾄは0でなければなりませんが、とは言え非0値はﾌｧｲﾙ最終を過ぎたｵｰﾊﾞｰﾌﾛｰを示します。

従ってR0とR1ﾊﾞｲﾄの対は読み込むﾚｺｰﾄﾞを含むﾀﾞﾌﾞﾙ ﾊﾞｲﾄまたはﾜｰﾄﾞ値として扱われます。 この値は0～65535の範囲で8Mﾊﾞｲﾄのﾌｧｲﾙのどのﾚｺｰﾄﾞへのｱｸｾｽをも提供します。 不順ｱｸｾｽを使用するﾌｧｲﾙの手順では、基準拡張(ｴﾝﾄﾘ、EX=0)が最初に開かれなければなりません。 基準拡張(ｴﾝﾄﾘ)がどんな配置区画ﾃﾞｰﾀを含むまたは含まないかもしれなくても、これはﾌｧｲﾙがﾃﾞｨﾚｸﾄﾘで正確に記録され、DIR要求で見えることを保証します。 選択したﾚｺｰﾄﾞ番号は不順(ﾗﾝﾀﾞﾑ)ﾚｺｰﾄﾞ領域(R0,R1)に格納され、そしてそのﾚｺｰﾄﾞを読むためにBDOSが呼び出されます。

呼び出しからの復帰でAﾚｼﾞｽﾀは以下で一覧されるｴﾗｰ ｺｰﾄﾞまたは操作が成功したことを示す値00Hを含みます。 後者の場合、現在のDMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ内はﾗﾝﾀﾞﾑにｱｸｾｽしたﾚｺｰﾄﾞを含みます。 順次読み込み操作と異なり、ﾚｺｰﾄﾞ番号が進められないことに注意してください。 従って続く不順(ﾗﾝﾀﾞﾑ)読み込み操作は同じﾚｺｰﾄﾞを続けて読みます。

各不順(ﾗﾝﾀﾞﾑ)読み込み操作で論理拡張と現在のﾚｺｰﾄﾞ値は自動的に設定されます。 従ってﾌｧｲﾙは現在ﾗﾝﾀﾞﾑにｱｸｾｽした位置から始まる順次読み書きができます。 けれどもこの場合、ﾗﾝﾀﾞﾑに読んだ最終ﾚｺｰﾄﾞは不順動作から順次読み込みへ切り替え後1度再読み込みされ、順次書き込み操作へ切り替え後1度再書き込みされることに注意してください。 使用者は順次読み書き操作の効果を得るために各ﾗﾝﾀﾞﾑ読み書きに続いてﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ位置(R0,R1)を単に進められます。

不順(ﾗﾝﾀﾞﾑ)読み込みの結果となるAﾚｼﾞｽﾀで返されたｴﾗｰ ｺｰﾄﾞは以下で一覧されます。

01H | 非存在ﾃﾞｰﾀの読み込み
02H | 予約(ﾗﾝﾀﾞﾑ動作では返らない)
03H | 現在の拡張(ｴﾝﾄﾘ)を閉鎖(ｸﾛｰｽﾞ)できない。
04H | 非存在拡張(ｴﾝﾄﾘ)を検索
05H | 予約(書き込み専用:新規拡張作成失敗)
06H | ﾃﾞｨｽｸの物理最終位置を越えて検索

ｴﾗｰ ｺｰﾄﾞ01Hと04Hは不順(ﾗﾝﾀﾞﾑ)読み込み操作が以前に書かれていないﾃﾞｰﾀまたは作成されていない拡張(ｴﾝﾄﾘ)と同等条件でｱｸｾｽする時に起きます。 ｴﾗｰ ｺｰﾄﾞ03Hは一般的に正しいｼｽﾃﾑ動作下では起きません。 もし起きたなら、ﾃﾞｨｽｸが物理的に書き込み禁止にされていない限り、単に再読み込みするか、または拡張0で再開始(ｵｰﾌﾟﾝ)することにより解消できます。 ｴﾗｰ ｺｰﾄﾞ06Hは現在の2.0公開版下でR2ﾊﾞｲﾄが非0であれば必ず起きます。 一般的に復帰ｺｰﾄﾞ=0は操作の成功完了を示し、非0の復帰ｺｰﾄﾞはﾃﾞｰﾀ損失として扱うことができます。

機能34: 不順(ﾗﾝﾀﾞﾑ)書き込み
 | ﾚｼﾞｽﾀ | 値
引数 | C | 22H
 | DE | FCB先頭ｱﾄﾞﾚｽ
戻値 | A | 結果情報ｺｰﾄﾞ

不順(ﾗﾝﾀﾞﾑ)書き込み操作はﾃﾞｰﾀが現在のDMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽからﾃﾞｨｽｸに書かれるのを除いて、不順(ﾗﾝﾀﾞﾑ)読み込み呼び出しと同様に始められます。 また、書き込み対象のﾃﾞｰﾀまたは拡張(ｴﾝﾄﾘ)が未だ割り当てられてしまっていない場合、書き込み操作を続ける前にその割り当てが実行されます。 不順(ﾗﾝﾀﾞﾑ)読み込み操作でのように書き込みの結果としてﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ番号(R0～2)は変更されません。 FCBの論理拡張番号と現在のﾚｺｰﾄﾞ位置は書き込みが行われるﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ番号に従って設定されます。 更に不順(ﾗﾝﾀﾞﾑ)書き込みに続き、順次操作の始めで現在指定したﾚｺｰﾄﾞが読みまたは書かれることに注意して、順次読み込みまたは書き込みができます。 使用者は順次書き込み操作の効果を得るために各ﾗﾝﾀﾞﾑ書き込みに続いてﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ位置(R0,R1)を単に進めることもできます。 不順(ﾗﾝﾀﾞﾑ)動作での拡張の最終ﾚｺｰﾄﾞの読み書きは順次動作でのように自動的な拡張の切り替えを引き起こさないことに注意してください。

不順(ﾗﾝﾀﾞﾑ)書き込みにより返されるｴﾗｰ ｺｰﾄﾞは不順(ﾗﾝﾀﾞﾑ)読み込み操作と同様で、ﾃﾞｨﾚｸﾄﾘ ｵｰﾊﾞｰﾌﾛｰの結果で拡張が作成できないことを示すｴﾗｰ ｺｰﾄﾞ05Hが追加されます。

機能35: ﾌｧｲﾙ容量取得
 | ﾚｼﾞｽﾀ | 値
引数 | C | 23H
 | DE | FCB先頭ｱﾄﾞﾚｽ
戻値 | FCBﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ領域の設定

ﾌｧｲﾙ容量計算時、DEﾚｼﾞｽﾀ ﾍﾟｱが(R0,R1,R2ﾊﾞｲﾄが存在する)ﾗﾝﾀﾞﾑ動作形式のFCBをｱﾄﾞﾚｽ指定します。 FCBはﾃﾞｨﾚｸﾄﾘ走査に使用される明示的なﾌｧｲﾙ名を含みます。 復帰でﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ ﾊﾞｲﾄはﾌｧｲﾙの最後に続くﾚｺｰﾄﾞのﾚｺｰﾄﾞ ｱﾄﾞﾚｽ、事実上仮想的なﾌｧｲﾙ容量を含みます。 機能35呼び出し後に上位ﾚｺｰﾄﾞ ﾊﾞｲﾄ(R2)が01Hの場合、そのﾌｧｲﾙは最大ﾚｺｰﾄﾞ数(65536)を含みます。 さもなければ前のとおりにﾌｧｲﾙ容量としてR0とR1ﾊﾞｲﾄが16ﾋﾞｯﾄ値を構成します。

ﾌｧｲﾙの最後にﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ位置を設定するため、単に機能35を呼び出し、その後現在のﾚｺｰﾄﾞ ｱﾄﾞﾚｽで不順(ﾗﾝﾀﾞﾑ)書き込みの手順を行うことにより、ﾃﾞｰﾀが追加できます。

ﾌｧｲﾙが順次に書かれると、仮想ﾌｧｲﾙ容量は物理容量に対応します。 ﾌｧｲﾙがﾗﾝﾀﾞﾑ動作で作成され、割り当てに穴(抜け)が存在すると、そのﾌｧｲﾙは示された容量より少ないﾚｺｰﾄﾞを含むかもしれません。 例えば8Mﾊﾞｲﾄのﾌｧｲﾙの最後のﾚｺｰﾄﾞだけがﾗﾝﾀﾞﾑ動作で書かれると(即ちﾚｺｰﾄﾞ番号65535)、例えﾃﾞｰﾀの1領域(ﾚｺｰﾄﾞ)だけが実際に割り当てられていても仮想容量は65536ﾚｺｰﾄﾞです。

機能36: ﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ設定
 | ﾚｼﾞｽﾀ | 値
引数 | C | 24H
 | DE | FCB先頭ｱﾄﾞﾚｽ
戻値 | FCBﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ領域の設定

ﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ設定機能は特定位置へ順次に読み書きされたﾌｧｲﾙから自動的にﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ位置を生成することをBDOSにさせます。 この機能は2つの方法で使用できます。

最初のは読み込みの始めで度々必要とし、様々な手掛かり領域の位置を引き出すために順次ﾌｧｲﾙを走査します。 各手掛かりに出会うと、この手掛かりに対応するﾃﾞｰﾀ用のﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ位置を計算するために機能36が呼び出されます。 ﾃﾞｰﾀ部容量が128ﾊﾞｲﾄなら、結果のﾚｺｰﾄﾞ位置が後の回復用の手掛かりとしてﾃｰﾌﾞﾙ内に配置されます。 ﾌｧｲﾙ全体の走査とそれらのﾚｺｰﾄﾞ番号と手掛かりの表作成後、使用者は先に保存した対応ﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ番号を使用し、不順(ﾗﾝﾀﾞﾑ)読み込みを実行することにより、特定手掛かりﾚｺｰﾄﾞへ直ちに移動できます。 この仕組みはﾌﾟﾛｸﾞﾗﾑが後で手掛かりﾃﾞｰﾀの正確な開始位置を見つけるために、手掛かりとﾚｺｰﾄﾞ番号に対するﾊﾞｯﾌｧ相対ﾊﾞｲﾄ位置を保存することだけが必要なため、容易に一般化されます。

機能36の第2の使用は順次読み書き後から不順(ﾗﾝﾀﾞﾑ)読み書きへの切り替え時に起きます。 ﾌｧｲﾙはﾌｧｲﾙ内の特定位置を順次ｱｸｾｽされ、ﾚｺｰﾄﾞ番号を設定する機能36が呼び出され、そしてﾌｧｲﾙ内の選択した位置から後続の不順(ﾗﾝﾀﾞﾑ)読み書き操作が続きます。

機能37: ﾄﾞﾗｲﾌﾞ ﾘｾｯﾄ
 | ﾚｼﾞｽﾀ | 値
引数 | C | 25H
 | DE | ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ(ﾋﾞｯﾄ値)
戻値 | A | 00H

ﾄﾞﾗｲﾌﾞ ﾘｾｯﾄ機能は指定したﾄﾞﾗｲﾌﾞのﾘｾｯﾄを許します。 渡す引数はﾘｾｯﾄすべきﾄﾞﾗｲﾌﾞの16ﾋﾞｯﾄ ﾍﾞｸﾀ値です(LSB=Aﾄﾞﾗｲﾌﾞ)。

MP/Mとの互換性を維持するため、CP/Mは0値を返します。

機能40: 00Hでの不順(ﾗﾝﾀﾞﾑ)書き込み
 | ﾚｼﾞｽﾀ | 値
引数 | C | 28H
 | DE | FCB先頭ｱﾄﾞﾚｽ
戻値 | A | 結果情報ｺｰﾄﾞ

00Hでの書き込み操作は直前が未割り当ての領域がﾃﾞｰﾀ書き込み前に00Hで満たされることを除いて機能34と同じです。


付録 5.3 ﾌｧｲﾙ間ｺﾋﾟｰ ﾌﾟﾛｸﾞﾗﾑ例

次のﾌﾟﾛｸﾞﾗﾑは相対的に簡単なﾌｧｲﾙ操作例を提供します。 このﾌﾟﾛｸﾞﾗﾑのｿｰｽ ﾌｧｲﾙはCP/MのEDﾌﾟﾛｸﾞﾗﾑを使用し、COPY.ASMとして作成され、その後ASMまたはMACを使用してｱｾﾝﾌﾞﾙされてHEXﾌｧｲﾙになります。 CCP下で直接的に実行するCOPY.COMﾌｧｲﾙを生成するためにLOADﾌﾟﾛｸﾞﾗﾑが使用されます。 このﾌﾟﾛｸﾞﾗﾑはﾛｰｶﾙ領域にｽﾀｯｸ ﾎﾟｲﾝﾀを設定することにより始まり、第2ﾌｧｲﾙ名を006CHの既定領域からDFCBと呼ぶ33ﾊﾞｲﾄのﾌｧｲﾙ制御領域への移動を続行します。 その後DFCBは現在のﾚｺｰﾄﾞ部を消去(=0)することによりﾌｧｲﾙ操作に対して準備されます。 005CHのSFCBがCOPYﾌﾟﾛｸﾞﾗﾑへの移行部でCCPにより適切に設定されるため、この時点で転送元と転送先のFCBは処理用の準備が整います。 現在、最初のﾌｧｲﾙ名は既定FCB内で007CHからの現(ﾗﾝﾀﾞﾑ)ﾚｺｰﾄﾞ位置部を含め適当な領域が00Hにされて配置されます。 ﾌﾟﾛｸﾞﾗﾑは転送元ﾌｧｲﾙを開き、存在するどんな転送先ﾌｧｲﾙも削除し、転送先ﾌｧｲﾙを作成することにより続けます。 これら全てが成功すると、ﾌﾟﾛｸﾞﾗﾑは各ﾚｺｰﾄﾞが転送元ﾌｧｲﾙから転送先ﾌｧｲﾙ内に配置されるまでﾗﾍﾞﾙCOPYを回ります。 ﾃﾞｰﾀ転送の完了で転送先ﾌｧｲﾙが閉じられ、ﾌﾟﾛｸﾞﾗﾑはBOOTへ飛ぶことによりCCP命令ﾚﾍﾞﾙへ復帰します。

        ; ﾌｧｲﾙ間ｺﾋﾟｰ ﾌﾟﾛｸﾞﾗﾑ例

        ; (CCP一時命令)

        ;

        ; COPY a:x.y b:u.v

0000 =		BOOT	EQU	0000H		;
ｼｽﾃﾑ ﾘﾌﾞｰﾄ入口
0005 =		BDOS	EQU	0005H		;
BDOS移行入口
005C =		FCB1	EQU	005CH		;
最初のﾌｧｲﾙ名
005C =		SFCB	EQU	FCB1		;
転送元FCB
006C =		FCB2	EQU	006CH		;
第2ﾌｧｲﾙ名
0080 =		DBUFF	EQU	0080H		;
既定転送ﾊﾞｯﾌｧ基準ｱﾄﾞﾚｽ
0100 =		TPA	EQU	0100H		;
TPA領域先頭ｱﾄﾞﾚｽ
        ;

0009 =		PRINTF	EQU	 9		;
文字列表示機能番号
000F =		OPENF	EQU	15		;
ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)機能番号
0010 =		CLOSEF	EQU	16		;
ﾌｧｲﾙ閉鎖(ｸﾛｰｽﾞ)機能番号
0013 =		DELETEF	EQU	19		;
ﾌｧｲﾙ削除機能番号
0014 =		READF	EQU	20		;
順次読み込み機能番号
0015 =		WRITEF	EQU	21		;
順次書き込み機能番号
0016 =		MAKEF	EQU	22		;
ﾌｧｲﾙ作成機能番号

0100			ORG	TPA		;
TPA領域先頭位置

0100 311902		LD	SP,STACK
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化(ﾛｰｶﾙ ｽﾀｯｸ領域)
0103 0E10		LD	C,16		;
第2FCB有効ﾊﾞｲﾄ数取得
0105 116C00		LD	DE,FCB2		;
第2FCB基準ﾎﾟｲﾝﾀ取得
0108 21D901		LD	HL,DFCB		;
転送先FCB基準ﾎﾟｲﾝﾀ取得
010B 1A		MFCB:	LD	A,(DE)		;
第2FCB対応ﾊﾞｲﾄ取得
010C 13			INC	DE		;
第2FCBﾎﾟｲﾝﾀ進行(+1)
010D 77			LD	(HL),A		;
転送先FCB対応ﾊﾞｲﾄ設定(ｺﾋﾟｰ)
010E 23			INC	HL		;
転送先FCBﾎﾟｲﾝﾀ進行(+1)
010F 0D			DEC	C		;
転送ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
0110 C20B01		JP	NZ,MFCB		;
転送ﾊﾞｲﾄ数分継続へ

        ;	( 現ﾚｺｰﾄﾞ位置(CR)初期化 )

0113 AF			XOR	A		;
0値取得
0114 32F901		LD	(DFCBCR),A	;
現ﾚｺｰﾄﾞ位置(CR)初期化

        ;	( 転送元ﾌｧｲﾙ準備 )

0117 115C00		LD	DE,SFCB		;
転送元FCB基準ﾎﾟｲﾝﾀ取得
011A CD6901		CALL	OPEN		;
転送元ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)
011D 118701		LD	DE,NOFILE	;
ﾌｧｲﾙなし文字列基準ﾎﾟｲﾝﾀ取得
0120 3C			INC	A		;
成功(0)/失敗(-1)検査
0121 CC6101		CALL	Z,FINIS		;
失敗でﾌｧｲﾙなし表示後ﾘﾌﾞｰﾄへ(非復帰)

        ;	( 転送先ﾌｧｲﾙ準備 )

0124 11D901		LD	DE,DFCB		;
転送先FCB基準ﾎﾟｲﾝﾀ取得
0127 CD7301		CALL	DELETE		;
既存なら予め削除
        ;

012A 11D901		LD	DE,DFCB		;
転送先FCB基準ﾎﾟｲﾝﾀ取得
012D CD8201		CALL	MAKE		;
転送先ﾌｧｲﾙ作成
0130 119601		LD	DE,NODIR	;
ﾃﾞｨﾚｸﾄﾘ満杯文字列基準ﾎﾟｲﾝﾀ取得
0133 3C			INC	A		;
成功(0)/失敗(-1)検査
0134 CC6101		CALL	Z,FINIS		;
失敗でﾃﾞｨﾚｸﾄﾘ満杯表示後ﾘﾌﾞｰﾄへ(非復帰)

        ;	( 転送元→転送先 1ﾚｺｰﾄﾞ単位転送 )
        ;	(( 転送元1ﾚｺｰﾄﾞ読み込み/終了検査 ))

0137 115C00	COPY:	LD	DE,SFCB		;
転送元FCB基準ﾎﾟｲﾝﾀ取得
013A CD7801		CALL	READ		;
転送元対応ﾚｺｰﾄﾞ読み込み
013D B7			OR	A		;
ﾌｧｲﾙ終了(0以外)検査
013E C25101		JP	NZ,EOFILE	;
ﾌｧｲﾙ終了で分岐

        ;	(( 転送先1ﾚｺｰﾄﾞ書き込み ))

0141 11D901		LD	DE,DFCB		;
転送先FCB基準ﾎﾟｲﾝﾀ取得
0144 CD7D01		CALL	WRITE		;
転送先対応ﾚｺｰﾄﾞ書き込み
0147 11A901		LD	DE,SPACE	;
ﾃﾞｨｽｸ空きなし文字列基準ﾎﾟｲﾝﾀ取得
014A B7			OR	A		;
成功(0)/失敗(0以外)検査
014B C46101		CALL	NZ,FINIS	;
失敗でﾃﾞｨｽｸ空きなし表示後ﾘﾌﾞｰﾄへ(非復帰)
014E C33701		JP	COPY		;
転送元ﾌｧｲﾙ終了まで継続へ

        ;	( 転送先ﾌｧｲﾙ閉鎖 )

0151 11D901	EOFILE:	LD	DE,DFCB		;
転送先FCB基準ﾎﾟｲﾝﾀ取得
0154 CD6E01		CALL	CLOSE		;
転送先ﾌｧｲﾙ閉鎖(ｸﾛｰｽﾞ)
0157 21BA01		LD	HL,WRPROT	;
書き込み禁止文字列基準ﾎﾟｲﾝﾀ取得
015A 3C			INC	A		;
成功(0)/失敗(-1)検査
015B CC6101		CALL	Z,FINIS		;
失敗で書き込み禁止表示後ﾘﾌﾞｰﾄへ(非復帰)

        ;	( ｺﾋﾟｰ操作完了表示/ﾌﾟﾛｸﾞﾗﾑ終了 )

015E 11CB01		LD	DE,NORMAL	;
ｺﾋﾟｰ完了文字列基準ﾎﾟｲﾝﾀ取得

        ;	(( 対応文字列表示/ﾘﾌﾞｰﾄ ))

0161 0E09	FINIS:	LD	C,PRINTF	;
文字列表示機能番号取得
0163 CD0500		CALL	BDOS		;
対応文字列表示
0166 C30500		JP	BOOT		;
ﾘﾌﾞｰﾄへ

        ;	( BDOS機能ｻﾌﾞﾙｰﾁﾝ(BDOSから直接復帰) )

0169 0E0F	OPEN:	LD	C,OPENF		;
ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)機能番号取得
016B C30500		JP	BDOS		;
ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)処理後呼び出し元へ復帰へ
        ;

016E 0E10	CLOSE:	LD	C,CLOSEF	;
ﾌｧｲﾙ閉鎖(ｸﾛｰｽﾞ)機能番号取得
0170 C30500		JP	BDOS		;
ﾌｧｲﾙ閉鎖(ｸﾛｰｽﾞ)処理後呼び出し元へ復帰へ
        ;

0173 0E13	DELETE:	LD	C,DELETEF	;
ﾌｧｲﾙ削除機能番号取得
0175 C30500		JP	BDOS		;
ﾌｧｲﾙ削除後呼び出し元へ復帰へ
        ;

0178 0E14	READ:	LD	C,READF		;
順次読み込み機能番号取得
017A C30500		JP	BDOS		;
順次読み込み後呼び出し元へ復帰へ
        ;

017D 0E15	WRITE:	LD	C,WRITEF	;
順次書き込み機能番号取得
017F C30500		JP	BDOS		;
順次書き込み後呼び出し元へ復帰へ
        ;

0182 0E16	MAKE:	LD	C,MAKEF		;
ﾌｧｲﾙ作成機能番号取得
0184 C30500		JP	BDOS		;
ﾌｧｲﾙ作成後呼び出し元へ復帰へ

        ;	( ｺﾝｿｰﾙ表示文字列 )

0187 4E6F20736F	NOFILE:	DB	'No source file$'

0196 4E6F206469	NODIR:	DB	'No directory space$'

01A9 4F7574206F	SPACE:	DB	'Out of data space$'

01BA 5772697465	WRPROT:	DB	'Write protected?$'

01CB 436F707920	NORMAL:	DB	'Copy complete$'

        ;	( 変数領域 )

01D9		DFCB	DS	32		;
転送先FCB
01F9 =		DFCBCR	EQU	DFCB+32		;
現ﾚｺｰﾄﾞ番号
        ;
01F9			DS	16*2		;
16段分ﾛｰｶﾙ ｽﾀｯｸ領域
        STACK:

0219		END

この特定ﾌﾟﾛｸﾞﾗﾑでの各種簡単化に注意してください。 最初に、曖昧参照を含む無効なﾌｧｲﾙ名に対する検査がありません。 この状態はASCIIの?について005CH位置から始まる32ﾊﾞｲﾄの既定領域を走査することにより検知できます。 検査はﾌｧｲﾙ名が含まれていることも保証すべきです(空白(ｽﾍﾟｰｽ)に対する005DHと006DH位置からの検査)。 最後に、転送元と転送先のﾌｧｲﾙ名が異なることを保証すべきです。 速度の向上は各読み込み操作でより多くのﾃﾞｰﾀをﾊﾞｯﾌｧすることにより得られます。 例えば0006H位置からFBASEを取得することによりﾒﾓﾘ容量を決め、ﾃﾞｰﾀ ﾊﾞｯﾌｧに対して残りの部分全体を使用することができます。 この場合、ﾌﾟﾛｸﾞﾗﾏは各読み込み前に連続する次の128ﾊﾞｲﾄ領域へ単にDMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽを設定します。 転送先ﾌｧｲﾙへの書き込みで、DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽはﾊﾞｯﾌｧの始めに設定され、各ﾚｺｰﾄﾞが転送先ﾌｧｲﾙへの転送で(ﾊﾞｯﾌｧの)終わりへ向け128ﾊﾞｲﾄ分増加されます。


付録 5.4 ﾌｧｲﾙ ﾀﾞﾝﾌﾟ ﾌﾟﾛｸﾞﾗﾑ例

次のﾌｧｲﾙ ﾀﾞﾝﾌﾟ ﾌﾟﾛｸﾞﾗﾑは直前の項で与えられた簡単なｺﾋﾟｰ ﾌﾟﾛｺﾞﾗﾑより僅かに多く複雑です。 このﾀﾞﾝﾌﾟ ﾌﾟﾛｸﾞﾗﾑはCCP命令行で指定した入力ﾌｧｲﾙを読み、各ﾚｺｰﾄﾞの内容を16進数形式でｺﾝｿｰﾙに表示します。 このﾀﾞﾝﾌﾟ ﾌﾟﾛｸﾞﾗﾑが入口でCCPのｽﾀｯｸを保存して、ﾛｰｶﾙ領域にｽﾀｯｸを設定し、CCPへ直接復帰する前にCCPのｽﾀｯｸを再設定(復帰)するこに注意してください。 従ってこのﾀﾞﾝﾌﾟ ﾌﾟﾛｸﾞﾗﾑは処理の最後でｳｫｰﾑ ﾌﾞｰﾄを実行しません。

        ; ﾌｧｲﾙ ﾀﾞﾝﾌﾟ ﾌﾟﾛｸﾞﾗﾑ (入力ﾌｧｲﾙを読み16進数表示)
        ;

        ; Copyright (C) 1975,1976,1977,1978 DIGITAL RESEARCH

0100			ORG	100H

0005 =		BDOS	EQU	0005H		;
BDOS移行入口
0001 =		CONS	EQU	1		;
ｺﾝｿｰﾙ入力機能番号
0002 =		TYPEF	EQU	2		;
ｺﾝｿｰﾙ出力機能番号
0009 =		PRINTF	EQU	9		;
文字列表示機能番号
000B =		BRKF	EQU	11		;
ｺﾝｿｰﾙ入力状態取得機能番号
000F =		OPENF	EQU	15		;
ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)機能番号
0014 =		READF	EQU	20		;
順次読み込み機能番号
        ;

005C =		FCB	EQU	005CH		;
既定ﾌｧｲﾙ制御領域(FCB)基準ｱﾄﾞﾚｽ
0080 =		BUFF	EQU	0080H		;
既定転送ﾊﾞｯﾌｧ基準ｱﾄﾞﾚｽ

        ;	( ｺﾝｿｰﾙ制御ｺｰﾄﾞ )

000D =		CR	EQU	0DH		;
ｶｰｿﾙ復帰(ｷｬﾘｯｼﾞ ﾘﾀｰﾝ)
000A =		LF	EQU	0AH		;
ｶｰｿﾙ改行(ﾗｲﾝ ﾌｨｰﾄﾞ)

        ;	( ﾌｧｲﾙ制御領域(FCB)定義 )

005C =		FCBDN	EQU	FCB+0		;
ﾄﾞﾗｲﾌﾞ番号(1)
005D =		FCBFN	EQU	FCB+1		;
ﾌｧｲﾙ名(8)
0065 =		FCBFT	EQU	FCB+9		;
ﾌｧｲﾙ形式名(3)
0068 =		FCBEX	EQU	FCB+12		;
拡張番号(1)
006B =		FCBRC	EQU	FCB+15		;
ｴﾝﾄﾘ内ﾚｺｰﾄﾞ数(1)
007C =		FCBCR	EQU	FCB+32		;
現(次)ﾚｺｰﾄﾞ番号(1)
007D =		FCBLN	EQU	FCB+33		;
FCB最終位置+1

0100 210000		LD	HL,0		;
0値取得
0103 39			ADD	HL,SP		;
現ｽﾀｯｸ ﾎﾟｲﾝﾀ値取得
0104 221502		LD	(OLDSP),HL	;
現ｽﾀｯｸ ﾎﾟｲﾝﾀ値保存
0107 315702		LD	SP,STKTOP	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化(ﾛｰｶﾙ ｽﾀｯｸ設定)
010A CDC101		CALL	SETUP		;
対象ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)
010D FEFF		CP	-1		;
成功(0)/失敗(-1)検査
010F C21B01		JP	NZ,OPENOK	;
成功で分岐

        ;	( 対象ﾌｧｲﾙ不在、ｴﾗｰ表示後ﾌﾟﾛｸﾞﾗﾑ終了 )

0112 11F301		LD	DE,OPNMSG	;
不在ｴﾗｰ文字列基準ﾎﾟｲﾝﾀ取得
0115 CD9C01		CALL	ERR		;
不在ｴﾗｰ表示
0118 C35101		JP	FINIS		;
後処理後CCPへ復帰へ
        ;

011B 3E80	OPENOK:	LD	A,128		;
初期ｵﾌｾｯﾄ下位(+128)値取得
011D 321302		LD	(IBP),A		;
ﾊﾞｯﾌｧ ｵﾌｾｯﾄ下位初期化
0120 210000		LD	HL,0		;
位置ｶｳﾝﾀ初期化

        ;	( ｱﾄﾞﾚｽ,ﾊﾞｲﾄ列表示/中止,終了検査 )

0123 E5		GLOOP:	PUSH	HL		;
位置ｶｳﾝﾀ一時保存
0124 CDA201		CALL	GNB		;
次の1ﾊﾞｲﾄ取得
0127 E1			POP	HL		;
位置ｶｳﾝﾀ復帰
0128 DA5101		JP	C,FINIS		;
ﾌｧｲﾙ終了で後処理後CCPへ復帰へ
        ;

012B 47			LD	B,A		;
対応ﾊﾞｲﾄ値を一時保存

        ;	(( ｱﾄﾞﾚｽ表示 ))

012C 7D			LD	A,L		;
位置ｶｳﾝﾀ下位取得
012D E60F		AND	0FH		;
16ﾊﾞｲﾄ境界か検査
012F C24401		JP	NZ,NONUM	;
16ﾊﾞｲﾄ境界以外で分岐
        ;

0132 CD7201		CALL	CRLF		;
ｺﾝｿｰﾙ復帰改行
0135 CD5901		CALL	BREAK		;
中止検査
0138 0F			RRCA			;
有(1)/無(0)検査
0139 DA5101		JP	C,FINIS		;
中止要請有りで後処理後CCPへ復帰へ
        ;

013C 7C			LD	A,H		;
位置ｶｳﾝﾀ上位取得
013D CD8F01		CALL	PHEX		;
ｱﾄﾞﾚｽ上位16進表示
0140 7D			LD	A,L		;
位置ｶｳﾝﾀ下位取得
0141 CD8F01		CALL	PHEX		;
ｱﾄﾞﾚｽ下位16進表示

        ;	( ﾊﾞｲﾄ16進表示 )

0144 23		NONUM:	INC	HL		;
位置ｶｳﾝﾀ進行(+1)
0145 3E20		LD	A,' '		;
空白(ｽﾍﾟｰｽ)ｺｰﾄﾞ取得
0147 CD6501		CALL	PCHAR		;
空白表示
014A 78			LD	A,B		;
対応ﾊﾞｲﾄ値復帰
014B CD8F01		CALL	PHEX		;
対応ﾊﾞｲﾄ16進表示
014E C32301		JP	GLOOP		;
ﾌｧｲﾙ終了まで継続へ

        ;	( ﾌﾟﾛｸﾞﾗﾑ終了、CCPへ復帰 )

0151 CD7201	FINIS:	CALL	CRLF		;
ｺﾝｿｰﾙ復帰改行
0154 2A1502		LD	HL,(OLDSP)	;
開始時ｽﾀｯｸ ﾎﾟｲﾝﾀ値取得
0157 F9			LD	SP,HL		;
開始時ｽﾀｯｸ ﾎﾟｲﾝﾀ値復帰
0158 C9			RET			;
CCPの呼び出し元へ復帰

        ;	* ｻﾌﾞﾙｰﾁﾝ *

        ;	( 中止検査(ｺﾝｿｰﾙ入力) )

0159 E5		BREAK:	PUSH	HL		;
HLﾚｼﾞｽﾀ一時保存
015A D5			PUSH	DE		;
DEﾚｼﾞｽﾀ一時保存
015B C5			PUSH	BC		;
BCﾚｼﾞｽﾀ一時保存
015C 0E0B		LD	C,BRKF		;
ｺﾝｿｰﾙ入力状態取得機能番号
015E CD0500		CALL	BDOS		;
ｺﾝｿｰﾙ入力状態取得(A=0:なし)
0161 C1			POP	BC		;
BCﾚｼﾞｽﾀ復帰
0162 D1			POP	DE		;
DEﾚｼﾞｽﾀ復帰
0163 E1			POP	HL		;
HLﾚｼﾞｽﾀ復帰
0164 C9			RET			;
呼び出し元へ復帰

        ;	( ｺﾝｿｰﾙ1文字表示 )

0165 E5		PCHAR:	PUSH	HL		;
HLﾚｼﾞｽﾀ一時保存
0166 D5			PUSH	DE		;
DEﾚｼﾞｽﾀ一時保存
0167 C5			PUSH	BC		;
BCﾚｼﾞｽﾀ一時保存
0168 0E02		LD	C,TYPEF		;
ｺﾝｿｰﾙ出力機能番号取得
016A 5F			LD	E,A		;
対象文字ｺｰﾄﾞ指定
016B CD0500		CALL	BDOS		;
ｺﾝｿｰﾙ1文字(ﾊﾞｲﾄ)出力
016E C1			POP	BC		;
BCﾚｼﾞｽﾀ復帰
016F D1			POP	DE		;
DEﾚｼﾞｽﾀ復帰
0170 E1			POP	HL		;
HLﾚｼﾞｽﾀ復帰
0171 C9			RET			;
呼び出し元へ復帰

        ;	( ｺﾝｿｰﾙ ｶｰｿﾙ復帰改行 )

0172 3E0D	CRLF:	LD	A,CR		;
ｶｰｿﾙ復帰ｺｰﾄﾞ取得
0174 CD6501		CALL	PCHAR		;
ｺﾝｿｰﾙ ｶｰｿﾙ復帰
0177 3E0A		LD	A,LF		;
ｶｰｿﾙ改行ｺｰﾄﾞ取得
0179 CD6501		CALL	PCHAR		;
ｺﾝｿｰﾙ ｶｰｿﾙ改行
017C C9			RET			;
呼び出し元へ復帰

        ;	(( 下位ﾆﾌﾞﾙ16進表示 ))

017D E60F	PNIB:	AND	0FH		;
上位ﾆﾌﾞﾙ解除
017F FE0A		CP	10		;
9未満、10以上検査
0181 D28901		JP	NC,P10		;
10以上で分岐
        ;

0184 C630		ADD	'0'		;
9未満で'0'～'9'文字ｺｰﾄﾞ変換
0186 C38B01		JP	PRN		;
対応文字表示後呼び出し元へ復帰へ
        ;

0189 C637	P10:	ADD	A,'A'-10	;
10以上で'A'～'F'文字ｺｰﾄﾞ変換
018B CD6501	PRN:	CALL	PCHAR		;
対応文字表示
018E C9			RET			;
呼び出し元へ復帰

        ;	( ﾊﾞｲﾄ値16進2桁表示 )

018F F5		PHEX:	PUSH	AF		;
Aﾚｼﾞｽﾀ値一時保存
0190 0F			RRCA			;
(÷2)上位ﾆﾌﾞﾙを下位位置へ移動(÷16)
0191 0F			RRCA			;
(÷4)
0192 0F			RRCA			;
(÷6)
0193 0F			RRCA			;
(÷16)
0194 CD7D01		CALL	PNIB		;
上位ﾆﾌﾞﾙ16進2桁表示
0197 F1			POP	AF		;
Aﾚｼﾞｽﾀ値復帰
0198 CD7D01		CALL	PNIB		;
下位ﾆﾌﾞﾙ16進2桁表示
019B C9			RET			;
呼び出し元へ復帰

        ;	( ｴﾗｰ文字列表示 )

019C 0E09	ERR:	LD	C,PRINTF	;
文字列表示機能番号取得
019E CD0500		CALL	BDOS		;
ｴﾗｰ文字列表示
01A1 C9			RET			;
呼び出し元へ復帰

        ;	( 次の1ﾊﾞｲﾄ取得 )

01A2 3A1302	GNB:	LD	A,(IBP)		;
ﾊﾞｯﾌｧ ｵﾌｾｯﾄ下位取得
01A5 FE80		CP	128		;
ﾊﾞｯﾌｧ最終ﾊﾞｲﾄ済みか検査
01A7 C2B301		JP	NZ,GO		;
未完で分岐

        ;	(( 新規ﾚｺｰﾄﾞ読み込み ))

01AA CDCE01		CALL	DISKR		;
ﾌｧｲﾙ1ﾚｺｰﾄﾞ順次読み込み
01AD B7			OR	A		;
成功(0)/失敗(-1)検査
01AE CAB301		JP	Z,GO		;
成功で分岐

        ;	(( ﾌｧｲﾙ終了で終了ﾌﾗｸﾞ(C)設定後復帰 ))

01B1 37			SCF			;
終了(ｷｬﾘｰ)ﾌﾗｸﾞ設定
01B2 C9			RET			;
終了ﾌﾗｸﾞ(C)と共に呼び出し元へ復帰

        ;	(( ﾊﾞｯﾌｧから1ﾊﾞｲﾄ取得 ))

01B3 5F		GO:	LD	E,A		;
ﾊﾞｯﾌｧ ｵﾌｾｯﾄ下位設定
01B4 1600		LD	D,0		;
上位に0設定
01B6 3C			INC	A		;
次ｵﾌｾｯﾄ値取得(+1)
01B7 321302		LD	(IBP),A		;
ｵﾌｾｯﾄ下位更新保存
01BA 218000		LD	HL,BUFF		;
既定転送ﾊﾞｯﾌｧ基準ｱﾄﾞﾚｽ取得
01BD 19			ADD	HL,DE		;
対応ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ取得
01BE 7E			LD	A,(HL)		;
対応ﾊﾞｲﾄ取得
01BF B7			OR	A		;
終了(ｷｬﾘｰ)ﾌﾗｸﾞ解除
01C0 C9			RET			;
呼び出し元へ復帰

        ;	( 対象ﾌｧｲﾙﾌｧｲﾙ開始(ｵｰﾌﾟﾝ) )

01C1 AF		SETUP:	XOR	A		;
0値取得
01C2 327C00		LD	(FCBCR),A	;
現ﾚｺｰﾄﾞ位置初期化(=0)
01C5 115C00		LD	DE,FCB		;
対象ﾌｧｲﾙFCB基準ﾎﾟｲﾝﾀ取得
01C8 0E0F		LD	C,OPENF		;
ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)機能番号取得
01CA CD0500		CALL	BDOS		;
対象ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)
01CD C9			RET			;
呼び出し元へ復帰(A=-1:失敗)

        ;	( ﾌｧｲﾙ1ﾚｺｰﾄﾞ順次読み込み )

01CE E5		DISKR:	PUSH	HL		;
HLﾚｼﾞｽﾀ一時保存
01CF D5			PUSH	DE		;
DEﾚｼﾞｽﾀ一時保存
01D0 C5			PUSH	BC		;
BCﾚｼﾞｽﾀ一時保存
01D1 115C00		LD	DE,FCB		;
対象ﾌｧｲﾙFCB基準ﾎﾟｲﾝﾀ取得
01D4 0E14		LD	C,READF		;
順次読み込み機能番号取得
01D6 CD0500		CALL	BDOS		;
対象ﾌｧｲﾙ1ﾚｺｰﾄﾞ順次読み込み
01D9 C1			POP	BC		;
BCﾚｼﾞｽﾀ復帰
01DA D1			POP	DE		;
DEﾚｼﾞｽﾀ復帰
01DB E1			POP	HL		;
HLﾚｼﾞｽﾀ復帰
01DC C9			RET			;
呼び出し元へ復帰

        ;	* 定数領域 *

01DD 46494C4520	SIGNON:	DB	'FILE DUMP VERSION 1.4$'

01F3 0D0A4E4F20	OPNMSG:	DB	CR,LF,'NO INPUT FILE PRESENT ON DISK$'

        ;	* 変数領域

0213		IBP	DS	2		;
ﾚｺｰﾄﾞ ﾊﾞｯﾌｧ ｵﾌｾｯﾄ ﾎﾟｲﾝﾀ
0215		OLDSP	DS	2		;
開始時ｽﾀｯｸ ﾎﾟｲﾝﾀ値
        ;

0217			DS	32*2		;
32段分ﾛｰｶﾙ ｽﾀｯｸ領域
        STKTOP:

0257			END


付録 5.5 不順(ﾗﾝﾀﾞﾑ)ｱｸｾｽ ﾌﾟﾛｸﾞﾗﾑ例

本項は不順(ﾗﾝﾀﾞﾑ)ｱｸｾｽ操作の広範囲な例を含みます。 以下で示したﾌﾟﾛｸﾞﾗﾑはﾀｰﾐﾅﾙからの命令でﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞを読み書きする単純な機能を実行します。 このﾌﾟﾛｸﾞﾗﾑが作成され、ｱｾﾝﾌﾞﾙされてRAMDOM.COMと名付けられたﾌｧｲﾙに配置されると、CCPﾚﾍﾞﾙの命令
RANDOM X.DAT
は試験ﾌﾟﾛｸﾞﾗﾑを開始します。 ﾌﾟﾛｸﾞﾗﾑは X.DAT 名でﾌｧｲﾙを検索し、見つけると入力のためｺﾝｿｰﾙに指示を続けます。 見つからなければ指示が与えられる前にﾌｧｲﾙが作成されます。 各指示は次の形式を採り、
next command?
続いて操作者入力、ｷｬﾘｯｼﾞ ﾘﾀｰﾝが続きます。 入力命令は次の形式を採り、
nWnRQ
n は0～65535範囲の整数値、W , R , Q は各々ﾗﾝﾀﾞﾑ書き込み、ﾗﾝﾀﾞﾑ読み込み、処理終了に対応する簡素化命令文字です。 W 命令が発給されると、RANDOMﾌﾟﾛｸﾞﾗﾑは次の指示を出します。
type data:
その後操作者は127文字までと続くｷｬﾘｯｼﾞ ﾘﾀｰﾝの入力により応答します。 RANDOMﾌﾟﾛｸﾞﾗﾑは X.DAT 内のﾚｺｰﾄﾞ n にその文字列を書きます。 R 命令が発給されると、RANDOMﾌﾟﾛｸﾞﾗﾑはﾚｺｰﾄﾞ番号 n を読み、その文字列をｺﾝｿｰﾙに表示します。 Q 命令が発給されると、 X.DAT ﾌｧｲﾙは閉じられ、ﾌﾟﾛｸﾞﾗﾑはCCPへ復帰します。 簡潔さのため、ｴﾗｰ ﾒｯｾｰｼﾞは
error, try again.
だけです。

ﾌﾟﾛｸﾞﾗﾑは入力ﾌｧｲﾙが開かれるか作成される初期化部で始まり、続いて個別命令を解釈するﾗﾍﾞﾙREADYで回り続けます。 005CHのFCBと0080Hの既定ﾊﾞｯﾌｧが全てのﾃﾞｨｽｸ操作に使用されます。 DFCBと呼ばれる入力行処理部の主体を含む利用ｻﾌﾞﾙｰﾁﾝがその後に続きます。 この特殊ﾌﾟﾛｸﾞﾗﾑはﾗﾝﾀﾞﾑ ｱｸｾｽ処理の要素を示し、更なるﾌﾟﾛｸﾞﾗﾑ開発の基礎として使用できます。

        ; CP/M 2.0用ﾗﾝﾀﾞﾑ ｱｸｾｽ ﾌﾟﾛｸﾞﾗﾑ例

0100			ORG	100H		;
TPA基準位置

0000 =		REBOOT	EQU	0000H		;
ｼｽﾃﾑ ﾘﾌﾞｰﾄ入口
0005 =		BDOS	EQU	0005H		;
BDOS移行入口
        ;

0001 =		CONINP	EQU	1		;
ｺﾝｿｰﾙ入力機能番号
0002 =		CONOUT	EQU	2		;
ｺﾝｿｰﾙ出力機能番号
0009 =		PSTRING	EQU	9		;
文字列表示機能番号
000A =		RSTRING	EQU	10		;
ｺﾝｿｰﾙ行入力機能番号
000C =		VERSION	EQU	12		;
ﾊﾞｰｼﾞｮﾝ番号取得機能番号
000F =		OPENF	EQU	15		;
ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)機能番号
0010 =		CLOSEF	EQU	16		;
ﾌｧｲﾙ閉鎖(ｸﾛｰｽﾞ)機能番号
0016 =		MAKEF	EQU	22		;
ﾌｧｲﾙ作成機能番号
0021 =		READR	EQU	33		;
不順(ﾗﾝﾀﾞﾑ)読み込み機能番号
0022 =		WRITER	EQU	34		;
不順(ﾗﾝﾀﾞﾑ)書き込み機能番号
        ;

005C =		FCB	EQU	005CH		;
既定ﾌｧｲﾙ制御領域(FCB)基準ｱﾄﾞﾚｽ
007D =		RANREC	EQU	FCB+33		;
ﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ位置
007F =		RANOVF	EQU	FCB+35		;
ﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ最上位(ｵｰﾊﾞｰﾌﾛｰ)
        ;

0080 =		BUFF	EQU	0080H		;
既定転送ﾊﾞｯﾌｧ基準ｱﾄﾞﾚｽ
        ;

000D =		CR	EQU	0DH		;
ｶｰｿﾙ復帰(ｷｬﾘｯｼﾞ ﾘﾀｰﾝ)
000A =		LF	EQU	0AH		;
ｶｰｿﾙ改行(ﾗｲﾝ ﾌｨｰﾄﾞ)

0100 31BD02		LD	SP,STACK	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化

        ;	( CP/Mﾊﾞｰｼﾞｮﾝ検査 )

0103 0E0C		LD	C,VERSION	;
ﾊﾞｰｼﾞｮﾝ番号取得機能番号取得
0105 CD0500		CALL	BDOS		;
CP/Mﾊﾞｰｼﾞｮﾝ番号取得
0108 FE20		CP	20H		;
ﾊﾞｰｼﾞｮﾝ2.0以降か検査
010A D21601		JP	NC,VERSCK	;
ﾊﾞｰｼﾞｮﾝ2.0以降で分岐

        ;	(( 不正ﾊﾞｰｼﾞｮﾝ表示、ﾌﾟﾛｸﾞﾗﾑ終了 ))

010D 111B02		LD	DE,BADVER	;
不正ﾊﾞｰｼﾞｮﾝ文字列基準ﾎﾟｲﾝﾀ取得
0110 CDDA01		CALL	PRINT		;
不正ﾊﾞｰｼﾞｮﾝ表示
0113 C30000		JP	REBOOT		;
ﾘﾌﾞｰﾄへ(ﾌﾟﾛｸﾞﾗﾑ終了)

        ;	( ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ) )

0116 0E0F	VERSCK:	LD	C,OPENF		;
ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)機能番号取得
0118 115C00		LD	DE,FCB		;
対象ﾌｧｲﾙFCB基準ﾎﾟｲﾝﾀ取得
011B CD0500		CALL	BDOS		;
対象ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ)
011E 3C			INC	A		;
成功(0)/失敗(-1)検査
011F C23701		JP	NZ,READY	;
成功で分岐

        ;	( 不在でﾌｧｲﾙ作成 )

0122 0E16		LD	C,MAKEF		;
ﾌｧｲﾙ作成機能番号取得
0124 115C00		LD	DE,FCB		;
対象ﾌｧｲﾙFCB基準ﾎﾟｲﾝﾀ取得
0127 CD0500		CALL	BDOS		;
対象ﾌｧｲﾙ作成
012A 3C			INC	A		;
成功(0)/失敗(-1)検査
012B C23701		JP	NZ,READY	;
成功で分岐

        ;	(( 空きなし表示、ﾌﾟﾛｸﾞﾗﾑ終了 ))

012E 113A02		LD	DE,NOSPC	;
空きなし文字列基準ﾎﾟｲﾝﾀ取得
0131 CDDA01		CALL	PRINT		;
空きなし表示
0134 C30000		JP	REBOOT		;
ﾘﾌﾞｰﾄへ(ﾌﾟﾛｸﾞﾗﾑ終了)

        ;	( 命令行取得/解析/実行 )

0137 CDE501	READY:	CALL	READCM		;
ｺﾝｿｰﾙから命令行取得
013A 227D00		LD	(RANREC),HL	;
FCBに指定ﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ番号設定
013D 217F00		LD	HL,RANOVF	;
FCBﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ最上位ﾊﾞｲﾄ位置ﾎﾟｲﾝﾀ取得
0140 3600		LD	(HL),0		;
FCBﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ最上位ﾊﾞｲﾄ初期化
0142 FE51		CP	'Q'		;
終了命令か検査
0144 C25601		JP	NZ,NOTQ		;
終了命令以外で次検査へ分岐

        ;	* Q: 終了命令、ﾌｧｲﾙ閉鎖、ﾌﾟﾛｸﾞﾗﾑ終了 *

0147 0E10		LD	C,CLOSEF	;
ﾌｧｲﾙ閉鎖(ｸﾛｰｽﾞ)機能番号取得
0149 115C00		LD	DE,FCB		;
対象ﾌｧｲﾙFCB基準ﾎﾟｲﾝﾀ取得
014C CD0500		CALL	BDOS		;
対象ﾌｧｲﾙ閉鎖(ｸﾛｰｽﾞ)
014F 3C			INC	A		;
成功(0)/失敗(-1)検査
0150 CAB901		JP	Z,ERROR		;
失敗でｴﾗｰ表示後再試行へ
        ;

0153 C30000		JP	REBOOT		;
成功でﾘﾌﾞｰﾄへ(ﾌﾟﾛｸﾞﾗﾑ終了)

        ;	( 書き込み命令検査 )

0156 FE52	NOTQ:	CP	'W'		;
書き込み命令か検査
0158 C28901		JP	NZ,NOTW		;
書き込み命令以外で次検査へ分岐

        ;	* W: ﾗﾝﾀﾞﾑ書き込み処理 *

015B 114D02		LD	DE,DATMSG	;
ﾃﾞｰﾀ入力要請文字列基準ﾎﾟｲﾝﾀ取得
015E CDDA01		CALL	PRINT		;
ﾃﾞｰﾀ入力要請表示
0161 0E7F		LD	C,128-1		;
最大文字(ﾊﾞｲﾄ)数ｶｳﾝﾀ初期化
0163 218000		LD	HL,BUFF		;
既定転送ﾊﾞｯﾌｧ基準ｱﾄﾞﾚｽ取得

        ;	( ﾊﾞｯﾌｧへ文字(ﾊﾞｲﾄ)取得/設定 )

0166 C5		RLOOP:	PUSH	BC		;
ﾊﾞｲﾄ数ｶｳﾝﾀ一時保存
0167 E5			PUSH	HL		;
ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ一時保存
0168 CDC201		CALL	GETCHR		;
ｺﾝｿｰﾙから1文字(ﾊﾞｲﾄ)取得
016B E1			POP	HL		;
ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ復帰
016C C1			POP	BC		;
ﾊﾞｲﾄ数ｶｳﾝﾀ復帰
016D FE0D		CP	CR		;
行終了検査
016F CA7801		JP	Z,ERLOOP	;
行終了(CR)で分岐

        ;	(( 通常文字、ﾊﾞｯﾌｧ設定 ))

0172 77			LD	(HL),A		;
対応ﾊﾞｲﾄをﾊﾞｯﾌｧへ設定
0173 23			INC	HL		;
ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ進行(+1)
0174 0D			DEC	C		;
最大ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
0175 C26601		JP	NZ,RLOOP	;
終了ｺｰﾄﾞ入力まで継続へ

        ;	(( 終了ｺｰﾄﾞ ))

0178 3600	ERLOOP:	LD	(HL),0		;
終了子をﾊﾞｯﾌｧへ設定

        ;	( 1ﾚｺｰﾄﾞ ﾗﾝﾀﾞﾑ書き込み )

017A 0E22		LD	C,WRITER	;
不順(ﾗﾝﾀﾞﾑ)書き込み機能番号取得
017C 115C00		LD	DE,FCB		;
対応ﾌｧｲﾙFCB基準ﾎﾟｲﾝﾀ取得
017F CD0500		CALL	BDOS		;
対応ﾌｧｲﾙ不順(ﾗﾝﾀﾞﾑ)書き込み
0182 B7			OR	A		;
成功(0)/失敗(0以外)検査
0183 C2B901		JP	NZ,ERROR	;
失敗でｴﾗｰ表示後再試行へ
        ;

0186 C33701		JP	READY		;
成功で再び指示入力へ

        ;	( 読み込み命令検査 )

0189 FE52	NOTW:	CP	'R'		;
読み込み命令か検査
018B C2B901		JP	NZ,ERROR	;
読み込み命令以外でｴﾗｰ表示後再試行へ

        ;	* R: ﾗﾝﾀﾞﾑ読み込み処理 *

018E 0E21		LD	C,READR		;
不順(ﾗﾝﾀﾞﾑ)読み込み機能番号取得
0190 115C00		LD	DE,FCB		;
対応ﾌｧｲﾙFCB基準ﾎﾟｲﾝﾀ取得
0193 CD0500		CALL	BDOS		;
対応ﾌｧｲﾙ不順(ﾗﾝﾀﾞﾑ)読み込み
0196 B7			OR	A		;
成功(0)/失敗(0以外)検査
0197 C2B901		JP	NZ,ERROR	;
失敗でｴﾗｰ表示後再試行へ

        ;	( 読み込みﾚｺｰﾄﾞ ｺﾝｿｰﾙ表示 )

019A CDCF01		CALL	CRLF		;
ｺﾝｿｰﾙ ｶｰｿﾙ復帰改行
019D 0E80		LD	C,128		;
最大文字(ﾊﾞｲﾄ)数ｶｳﾝﾀ初期化
019F 218000		LD	HL,BUFF		;
既定転送ﾊﾞｯﾌｧ基準ｱﾄﾞﾚｽ取得
        ;

01A2 7E		WLOOP:	LD	A,(HL)		;
対応文字(ﾊﾞｲﾄ)取得
01A3 23			INC	HL		;
ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ進行(+1)
01A4 E67F		AND	7FH		;
ﾊﾟﾘﾃｨ ﾋﾞｯﾄ解除
01A6 CA3701		JP	Z,READY		;
終了(=00H)で再び指示入力へ
        ;

01A9 C5			PUSH	BC		;
ﾊﾞｲﾄ数ｶｳﾝﾀ一時保存
01AA E5			PUSH	HL		;
ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ一時保存
01AB FE20		CP	' '		;
制御/文字ｺｰﾄﾞ判定
01AD D4C801		CALL	NC,PUTCHR	;
文字ならｺﾝｿｰﾙ表示
01B0 E1			POP	HL		;
ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ復帰
01B1 C1			POP	BC		;
ﾊﾞｲﾄ数ｶｳﾝﾀ復帰
01B2 0D			DEC	C		;
最大文字(ﾊﾞｲﾄ)数ｶｳﾝﾀ減数(-1)
01B3 C2A201		JP	NZ,WLOOP	;
最大数か終了まで継続へ
        ;

01B6 C33701		JP	READY		;
最大数で再び指示入力へ

        ;	( ｴﾗｰ表示後再試行へ )

01B9 115A02	ERROR:	LD	DE,ERRMSG	;
ｴﾗｰ再試行文字列基準ﾎﾟｲﾝﾀ取得
01BC CDDA01		CALL	PRINT		;
ｴﾗｰ再試行表示
01BF C33701		JP	READY		;
再試行へ

        ;	( ｺﾝｿｰﾙから1文字(ﾊﾞｲﾄ)取得 )

01C2 0E01	GETCHR:	LD	C,CONINP	;
ｺﾝｿｰﾙ入力機能番号取得
01C4 CD0500		CALL	BDOS		;
ｺﾝｿｰﾙから1文字(ﾊﾞｲﾄ)入力
01C7 C9			RET			;
呼び出し元へ復帰

        ;	( ｺﾝｿｰﾙへ1文字(ﾊﾞｲﾄ)表示 )

01C8 0E02	PUTCHR:	LD	C,CONOUT	;
ｺﾝｿｰﾙ出力機能番号取得
01CA 5F			LD	E,A		;
対応ｺｰﾄﾞ指定
01CB CD0500		CALL	BDOS		;
ｺﾝｿｰﾙへ1文字(ﾊﾞｲﾄ)出力
01CE C9			RET			;
呼び出し元へ復帰

        ;	( ｺﾝｿｰﾙ ｶｰｿﾙ復帰改行 )

01CF 3E0D	CRLF:	LD	A,CR		;
ｶｰｿﾙ復帰ｺｰﾄﾞ取得
01D1 CDC801		CALL	PUTCHR		;
ｺﾝｿｰﾙ ｶｰｿﾙ復帰
01D4 3E0A		LD	A,LF		;
ｶｰｿﾙ改行ｺｰﾄﾞ取得
01D6 CDC801		CALL	PUTCHR		;
ｺﾝｿｰﾙ ｶｰｿﾙ改行
01D9 C9			RET			;
呼び出し元へ復帰

        ;	( ｺﾝｿｰﾙ文字列表示 )

01DA D5		PRINT:	PUSH	DE		;
対応文字列基準ﾎﾟｲﾝﾀ一時保存
01DB CDCF01		CALL	CRLF		;
ｺﾝｿｰﾙ ｶｰｿﾙ復帰改行
01DE D1			POP	DE		;
対応文字列基準ﾎﾟｲﾝﾀ復帰
01DF 0E09		LD	C,PSTRING	;
文字列表示機能番号取得
01E1 CD0500		CALL	BDOS		;
対応文字列ｺﾝｿｰﾙ表示
01E4 C9			RET			;
呼び出し元へ復帰

        ;	( ｺﾝｿｰﾙから命令行取得 )

01E5 116C02	READCM:	LD	DE,PROMPT	;
命令指示文字列基準ﾎﾟｲﾝﾀ取得
01E8 CDDA01		CALL	PRINT		;
命令指示表示
01EB 0E0A		LD	C,RSTRING	;
ｺﾝｿｰﾙ行入力機能番号取得
01ED 117B02		LD	DE,CONBUF	;
命令行ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
01F0 CD0500		CALL	BDOS		;
ｺﾝｿｰﾙから命令行入力

        ;	( 命令行解析 )

01F3 210000		LD	HL,0		;
ﾚｺｰﾄﾞ番号初期化(=0)
01F6 117D02		LD	DE,CONLIN	;
命令ﾊﾞｯﾌｧ入力文字先頭ﾎﾟｲﾝﾀ取得
01F9 1A		READC:	LD	A,(DE)		;
対応文字(ﾊﾞｲﾄ)取得
01FA 13			INC	DE		;
命令ﾊﾞｯﾌｧ文字列ﾎﾟｲﾝﾀ進行(+1)
01FB B7			OR	A		;
命令行終了検査
01FC C8			RET	Z		;
命令行終了で呼び出し元へ復帰

        ;	(( 数値/文字判定 ))

01FD D630		SUB	'0'		;
ﾊﾞｲﾅﾘ値に仮変換
01FF FE0A		CP	10		;
数値/文字判定
0201 D21302		JP	NC,ENDRD	;
数値以外で分岐

        ;	(( ﾚｺｰﾄﾞ番号数値処理 ))

0204 29			ADD	HL,HL		;
直前までの値を×2
0205 4D			LD	C,L		;
×2値下位を一時保存
0206 44			LD	B,H		;
×2値上位を一時保存
0207 29			ADD	HL,HL		;
直前までの値を×4
0208 29			ADD	HL,HL		;
直前までの値を×8
0209 09			ADD	HL,BC		;
直前までの値を×10(×8＋×2)
020A 85			ADD	A,L		;
今回値加算
020B 6F			LD	L,A		;
合算値下位保存
020C D2F901		JP	NC,READC	;
下位からの桁上がりなしで継続へ
        ;

020F 24			INC	H		;
下位からの桁上がりで上位+1
0210 C3F901		JP	READC		;
行終了まで処理継続へ

        ;	(( 文字 ))

0213 C630	ENDRD:	ADD	'0'		;
文字ｺｰﾄﾞ復帰
0215 FE61		CP	'a'		;
小文字/大文字判定
0217 D8			RET	C		;
大文字で呼び出し元へ復帰
        ;

0218 E65F		AND	01011111B	;
小文字を大文字に変換
021A C9			RET			;
呼び出し元へ復帰

        ;	* 文字列定義 *

021B 736F727279	BADVER:	DB	'sorry, you need cp/m version 2$'

023A 6E6F206469	NOSPC:	DB	'no directory space$'

024D 7479706520	DATMSG:	DB	'type datas: $'

025A 6572726F72	ERRMSG:	DB	'error, try again.$'

026C 6E65787420	PROMPT:	DB	'next command? $'

        ;	* 一般定数と変数 *

027B 21		CONBUF:	DB	CONLEN		;
命令行ﾊﾞｯﾌｧ最大文字(ﾊﾞｲﾄ)数
027C		CONSIZ	DS	1		;
命令行ﾊﾞｯﾌｧ入力文字(ﾊﾞｲﾄ)数
027D		CONLIN	DS	32		;
命令行ﾊﾞｯﾌｧ入力文字列(最大32ﾊﾞｲﾄ)
0021 =		CONLEN	EQU	$-CONSIZ

        ;

029D			DS	16*2		;
16段ﾛｰｶﾙ ｽﾀｯｸ領域
        STACK:

02BD			END

主な改良はその操作でこの特定ﾌﾟﾛｸﾞﾗﾑを強化し得ます。 実際、いくつかの作業でこのﾌﾟﾛｸﾞﾗﾑは簡単なﾃﾞｰﾀﾍﾞｰｽ管理ｼｽﾃﾑに発展できます。 例えば、128ﾊﾞｲﾄの標準ﾚｺｰﾄﾞ容量との仮定をﾚｺｰﾄﾞ内の任意領域に構成できます。 GETKEYと呼ばれるﾌﾟﾛｸﾞﾗﾑは最初に順次ﾌｧｲﾙを読み、操作者により定義した特定領域を引き出すように発展できます。 例えば命令

GETKEY NAMES.DAT LASTNAME 10 20
はﾃﾞｰﾀﾍﾞｰｽ ﾌｨﾙ NAMES.DAT を読み、位置10から始まり位置20で終わる各ﾚｺｰﾄﾞから LASTNAME 領域の引き出しを引き起こします。 GETKEYはﾌｧｲﾙ内の16ﾋﾞｯﾄ ﾚｺｰﾄﾞ番号位置に対して各特定 LASTNAME 領域から成るﾃｰﾌﾞﾙをﾒﾓﾘ内に構築します。 GETKEYﾌﾟﾛｸﾞﾗﾑはその後この表を並び替え、ﾚｺｰﾄﾞ番号に従うそれらのｱﾙﾌｧﾍﾞｯﾄ順の LASTNAME 領域の一覧表のLASTNAME.KEYと呼ぶ新規ﾌｧｲﾙを書きます。 この一覧表は情報修復用語で逆索引と呼ばれます。

ﾌﾟﾛｸﾞﾗﾏが並び替えたｷｰ ﾌｧｲﾙをﾒﾓﾘ内へ読むために上で示したﾌﾟﾛｸﾞﾗﾑをQUERYのように改名したとすると、その命令行は

QUERY NAMES.DAT LASTNAME.KEY
のようかもしれません。

番号を読む代わりにQUERYﾌﾟﾛｸﾞﾗﾑは NAMES.DAT ﾃﾞｰﾀﾍﾞｰｽ内を捜すための特定ｷｰであるｱﾙﾌｧﾍﾞｯﾄ文字列を読みます。 LASTNAME.KEY一覧表が並び替えされているため、電話帳で名前を探すのと同様にﾊﾞｲﾅﾘ検索を実行することにより素早く特定の入口を捜せます。 初めに一覧表の両端でその間の中間点で入口を捜し、不一致ならば次の検索について上半分と下半分のどちらかに分割します。 これで捜す項目に素早く到達し、対応するﾚｺｰﾄﾞ番号を見つけるでしょう。 上で示したﾌﾟﾛｸﾞﾗﾑ内で行われたとすれば直ぐにこのﾚｺｰﾄﾞを取得しｺﾝｿｰﾙに表示すべきです。

大きな作業のいくつかで上で示した128ﾊﾞｲﾄ ﾚｺｰﾄﾞと違う固定の群容量を許すことができます。 これはﾚｺｰﾄﾞ番号の経路とﾚｺｰﾄﾞ内のﾊﾞｲﾄ ｵﾌｾｯﾄを保持することにより成し遂げられます。 群容量が判ると適切な群を含むうﾚｺｰﾄﾞをﾗﾝﾀﾞﾑにｱｸｾｽし、群容量が尽くまでﾚｺｰﾄﾞを順次読み、郡の開始点を補います。

最後に、HARDYとLAURELの間のLASTNAME、および45未満のAGEのようないくつかの関係を満たすﾚｺｰﾄﾞの組を計算するﾌﾞｰﾙ表現(式)を許すことによりQUERYをかなり改善できます。 この記載に合致するﾚｺｰﾄﾞを全て表示します。 最後に一覧表がﾒﾓﾘ内への適合に大きくなりすぎる場合、ﾃﾞｨｽｸからのﾗﾝﾀﾞﾑなｷｰ ﾌｧｲﾙ ｱｸｾｽでも上手くいきます。


付録 5.6 ｼｽﾃﾑ機能一覧

機能番号 | 機能名 | 引数 | 戻値
0 (00H) | ｼｽﾃﾑ ﾘｾｯﾄ | なし | なし
1 (01H) | ｺﾝｿｰﾙ入力 | なし | A=ASCII文字
2 (02H) | ｺﾝｿｰﾙ出力 | E=文字ｺｰﾄﾞ | なし
3 (03H) | ﾘｰﾀﾞ入力 | なし | A=ASCII文字
4 (04H) | ﾊﾟﾝﾁ出力 | E=文字ｺｰﾄﾞ | なし
5 (05H) | ﾘｽﾄ出力 | E=文字ｺｰﾄﾞ | なし
6 (06H) | 直接ｺﾝｿｰﾙ入出力 | E=0FFH(入力) | A=文字ｺｰﾄﾞ
 |  | E=0FEH(状態取得) | A=状態ｺｰﾄﾞ
 |  | E=文字ｺｰﾄﾞ | なし
7 (07H) | I/Oﾊﾞｲﾄ取得 | なし | A=I/Oﾊﾞｲﾄ値
8 (08H) | I/Oﾊﾞｲﾄ設定 | E=I/Oﾊﾞｲﾄ値 | なし
9 (09H) | 文字列表示 | DE=文字列先頭ｱﾄﾞﾚｽ | なし
10 (0AH) | ｺﾝｿｰﾙ行入力 | DE=ﾊﾞｯﾌｧ先頭ｱﾄﾞﾚｽ | ﾊﾞｯﾌｧにｺﾝｿｰﾙ入力行文字列
11 (0BH) | ｺﾝｿｰﾙ状態取得 | なし | A=有(-1)/無(0)
12 (0CH) | ﾊﾞｰｼﾞｮﾝ番号取得 | なし | HL=ﾊﾞｰｼﾞｮﾝ番号
13 (0DH) | ﾃﾞｨｽｸ ｼｽﾃﾑ ﾘｾｯﾄ | なし | なし
14 (0EH) | ﾃﾞｨｽｸ選択 | E=選択ﾃﾞｨｽｸ番号 | なし
15 (0FH) | ﾌｧｲﾙ開始(ｵｰﾌﾟﾝ) | DE=FCB先頭ｱﾄﾞﾚｽ | A=ﾃﾞｨﾚｸﾄﾘ ｺｰﾄﾞ/不在(-1)
16 (10H) | ﾌｧｲﾙ閉鎖 | DE=FCB先頭ｱﾄﾞﾚｽ | A=ﾃﾞｨﾚｸﾄﾘ ｺｰﾄﾞ/不在(-1)
17 (11H) | 初回検索 | DE=FCB先頭ｱﾄﾞﾚｽ | A=ﾃﾞｨﾚｸﾄﾘ ｺｰﾄﾞ/不在(-1)
18 (12H) | 次回検索 | なし | A=ﾃﾞｨﾚｸﾄﾘ ｺｰﾄﾞ/不在(-1)
19 (13H) | ﾌｧｲﾙ削除 | DE=FCB先頭ｱﾄﾞﾚｽ | A=ﾃﾞｨﾚｸﾄﾘ ｺｰﾄﾞ/不在(-1)
20 (14H) | 順次読み込み | DE=FCB先頭ｱﾄﾞﾚｽ | A=成(0)/否(非0)
21 (15H) | 順次書き込み | DE=FCB先頭ｱﾄﾞﾚｽ | A=成(0)/否(非0)
22 (16H) | ﾌｧｲﾙ作成 | DE=FCB先頭ｱﾄﾞﾚｽ | A=ﾃﾞｨﾚｸﾄﾘ ｺｰﾄﾞ/空無(-1)
23 (17H) | ﾌｧｲﾙ名変更 | DE=FCB先頭ｱﾄﾞﾚｽ | A=ﾃﾞｨﾚｸﾄﾘ ｺｰﾄﾞ/不在(-1)
24 (18H) | 登録ﾍﾞｸﾀ取得 | なし | HL=登録ﾍﾞｸﾀ(注)
25 (19H) | 現ﾃﾞｨｽｸ番号取得 | なし | A=現ﾃﾞｨｽｸ番号
26 (1AH) | DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ設定 | DE=DMA(転送ﾊﾞｯﾌｧ)先頭ｱﾄﾞﾚｽ | なし
27 (1BH) | 配置区画ｱﾄﾞﾚｽ取得 | なし | HL=配置区画基準ｱﾄﾞﾚｽ(注)
28 (1CH) | ﾃﾞｨｽｸ書き込み保護設定 | なし | なし
29 (1DH) | 読み込み専用ﾍﾞｸﾀ取得 | なし | HL=R/Oﾍﾞｸﾀ値(注)
30 (1EH) | ﾌｧｲﾙ属性設定 | DE=FCB先頭ｱﾄﾞﾚｽ | A=ﾃﾞｨﾚｸﾄﾘ ｺｰﾄﾞ
31 (1FH) | ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ取得 | なし | HL=DPB先頭ｱﾄﾞﾚｽ
32 (20H) | 使用者番号取得/設定 | E=0FFH(取得) | A=現使用者番号
 |  | E=0～15(設定) | なし
33 (21H) | 不順(ﾗﾝﾀﾞﾑ)読み込み | DE=FCB先頭ｱﾄﾞﾚｽ | A=成(0)/否(非0)
34 (22H) | 不順(ﾗﾝﾀﾞﾑ)書き込み | DE=FCB先頭ｱﾄﾞﾚｽ | A=成(0)/否(非0)
35 (23H) | ﾌｧｲﾙ容量取得 | DE=FCB先頭ｱﾄﾞﾚｽ | FCBﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ領域の設定
36 (24H) | ﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ設定 | DE=FCB先頭ｱﾄﾞﾚｽ | FCBﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ領域の設定
37 (25H) | ﾄﾞﾗｲﾌﾞ ﾘｾｯﾄ | DE=ﾄﾞﾗｲﾌﾞ ﾍﾞｸﾀ(ﾋﾞｯﾄ値) | A=0
38 (26H) | ｱｸｾｽ ﾄﾞﾗｲﾌﾞ | 未ｻﾎﾟｰﾄ
39 (27H) | 空きﾄﾞﾗｲﾌﾞ | 未ｻﾎﾟｰﾄ
40 (28H) | 00Hでの不順(ﾗﾝﾀﾞﾑ)書き込み | DE=FCB先頭ｱﾄﾞﾚｽ | A=成(0)/否(非0)

(注) 戻値のHLはB(=H)A(=L)にも返ることに注意してください。


付録 6.1 はじめに

標準CP/MｼｽﾃﾑはIntel MDS800ﾏｲｸﾛ ｺﾝﾋﾟｭｰﾀ開発ｼｽﾃﾑでの操作を仮定しますが、ﾊｰﾄﾞｳｪｱ動作環境を定義する特定ｻﾌﾞﾙｰﾁﾝ群を変えられるように設計されています。

標準CP/M 2が単密度ﾌﾛｯﾋﾟｰ ﾃﾞｨｽｸ用に設定されているとは言え、領域変更機能は単一ﾄﾞﾗｲﾌﾞ ﾐﾆﾃﾞｨｽｸから高容量ﾊｰﾄﾞﾃﾞｨｽｸ ｼｽﾃﾑまで広い幅のﾃﾞｨｽｸ 補助ｼｽﾃﾑへの適合を許します。 後続の簡単な改造手順は最低限の編集とﾃﾞﾊﾞｯｸﾞのﾂｰﾙが利用でき、最初に単密度ﾌﾛｯﾋﾟｰ ﾃﾞｨｽｸ用に設定されると仮定されます。 以前の版のCP/Mが利用可能ならば、この改造手順はかなり軽減されます。 後者の場合、ｼｽﾃﾑ生成手順を再吟味し、非標準ﾃﾞｨｽｸ ｼｽﾃﾑ用のｼｽﾃﾑ変更を検討する後の項目へ飛べるかもしれません。

非装置依存を達成するため、CP/Mは3つの別個な部分に分けられます。

  • BIOSは環境に依存する基本I/Oｼｽﾃﾑです。
  • BDOSはﾊｰﾄﾞｳｪｱ設定に依存しない基本ﾃﾞｨｽｸ ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑです。
  • CCPはBDOSを使用するｺﾝｿｰﾙ命令(ｺﾏﾝﾄﾞ) ﾌﾟﾛｾｯｻです。

これらの部分でBIOSだけが特定ﾊｰﾄﾞｳｪｱに依存します。 このﾊｰﾄﾞｳｪｱと残りのCP/M部分間用に改造したｲﾝﾀｰﾌｪｰｽを提供する新しいBIOSを供給するために配布版CP/Mを補修できます。 この資料はCP/Mに新規BIOSを補修するための段階手順を提供します。

CP/M 2の全てのﾃﾞｨｽｸ依存部分はCP/M 2で提供されるﾃﾞｨｽｸ定義ﾏｸﾛ ﾗｲﾌﾞﾗﾘを使用して自動的に、または手動ｺｰﾄﾞ化のどちらかで常駐ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸをBIOS内に配置されます。 最終使用者は最大有効ﾃﾞｨｽｸ数、開始と終了ｾｸﾀ番号、ﾃﾞｰﾀ配置区画容量、論理ﾃﾞｨｽｸの最大拡張値、ﾃﾞｨﾚｸﾄﾘ容量情報、予約ﾄﾗｯｸ値の指定だけが必要です。 ﾏｸﾛは適切なﾃｰﾌﾞﾙを生成するためにこの情報を使用し、ﾃｰﾌﾞﾙはCP/M 2動作中の使用で参照します。 基本の128ﾊﾞｲﾄ ﾃﾞｰﾀ単位の整数倍のｾｸﾀ容量を組み立てまたは分解を補助する分解情報が提供され、ｼｽﾃﾑ変更ﾏﾆｭｱﾙはより大きなｾｸﾀ容量を利用するために分解情報を使用する一般目的ｻﾌﾞﾙｰﾁﾝを含みます。 ﾃｰﾌﾞﾙ駆動ﾃﾞｰﾀ ｱｸｾｽ手法とのこれらのｻﾌﾞﾙｰﾁﾝの使用はCP/M 2を万能ﾃﾞｰﾀ管理ｼｽﾃﾑにします。

ﾌｧｲﾙ拡張は各論理拡張が16Kﾊﾞｲﾄのﾃﾞｰﾀを含む512までの論理ﾌｧｲﾙ拡張の提供により達成されます。 CP/M 2は構築されますが、1つのﾃﾞｨﾚｸﾄﾘに対応して128Kﾊﾞｲﾄのﾃﾞｰﾀ量が1つの物理拡張によりｱﾄﾞﾚｽ指定されるため、ﾃﾞｨﾚｸﾄﾘ空間を利用する間、以前の版との互換性を維持します。 CP/Mが最初にｺﾝﾋﾟｭｰﾀ ｼｽﾃﾑへ仕立てられるならば、新しいBIOSはいくつかの簡単なｿﾌﾄｳｪｱ開発と試験が必要です。 標準BIOSは追補Aで一覧され、改造版用の見本として使用できます。 追補Bで与えられる骨子版BIOSは修正したBIOSの基礎として取り扱えます。

BIOSに加えてｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑをﾒﾓﾘ内に持って来るGETSYSと呼ぶ簡単なﾒﾓﾘ ﾛｰﾀﾞを書かなければなりません。 CP/M内に新BIOSを補修するためにCP/Mの変更版をﾃﾞｨｽｸに戻して配置するPUTSYS呼ぶGETSYSの反対を書かなければなりません。 PUTSYSはﾃﾞｨｽｸ読み込み命令をﾃﾞｨｽｸ書き込み命令に変更することによりGETSYSから得ることができます。 GETSYSとPUTSYSﾌﾟﾛｸﾞﾗﾑの骨子例は追補Cで一覧され、6.4節で説明されます。

CP/Mｼｽﾃﾑを自動的に設定するために、追補Aと追補Dで一覧され、CP/Mと共に提供されるのと同様なｺｰﾙﾄﾞ ｽﾀｰﾄ ﾛｰﾀﾞも供給しなければなりません。 ｺｰﾙﾄﾞ ｽﾀｰﾄ ﾛｰﾀﾞの骨子形態はﾛｰﾀﾞ見本として使用される追補Eで与えられます。

  • 6.2 第1段階ｼｽﾃﾑ再生成
  • 6.3 第2段階ｼｽﾃﾑ再生成


付録 6.2 第一段階ｼｽﾃﾑ再生成

CP/Mｼｽﾃﾑの補修手順は以下で与えられます。 各段階でのｱﾄﾞﾚｽ参照は16進数修飾を示すHと共に示され、20K CP/Mｼｽﾃﾑに対して与えられます。 より大きなCP/Mｼｽﾃﾑに対しては後続するﾒﾓﾘ容量-20Kに等しい+bで示され、各ｱﾄﾞﾚｽに付加されます。 様々な標準的なﾒﾓﾘ容量でのbは表6-1.で一覧されます。

表 6-1. 標準的なﾒﾓﾘ容量値
ﾒﾓﾘ容量 | 値
24K | b = 24K-20K = 4K = 1000H
32K | b = 32K-20K = 12K = 3000H
40K | b = 40K-20K = 20K = 5000H
48K | b = 48K-20K = 28K = 7000H
56K | b = 56K-20K = 36K = 9000H
62K | b = 62K-20K = 42K = A800H
64K | b = 64K-20K = 44K = B000H

標準配布版CP/Mは20K CP/Mｼｽﾃﾑで動作用に設定されていることに注意してください。 従って最初に20K CP/Mｼｽﾃﾑを持って来て、その後に実際のﾒﾓﾘ容量に設定しなければなりません(6.3節参照)。

CP/Mｼｽﾃﾑを補修するために次の段階に従ってください。

  1. 6.4節を読み、ﾃﾞｨｽｸの最初の2ﾄﾗｯｸをﾒﾓﾘ内に読むGETSYSﾌﾟﾛｸﾞﾗﾑを書いてください。 ﾃﾞｨｽｸからのﾌﾟﾛｸﾞﾗﾑは3380H位置での開始に設定されなければなりません。 GETSYSは追補Cで示されるように0100H位置(TPAの基準位置)での開始にｺｰﾄﾞ化されています。
  2. 空白ﾃﾞｨｽｸをﾒﾓﾘ内に読むことによりGETSYSﾌﾟﾛｸﾞﾗﾑを試験し、GETSYSﾌﾟﾛｸﾞﾗﾑによりどの方法でもﾃﾞｨｽｸが変更されてしまわずにﾃﾞｰﾀが正しく読めるように見えるかを検査してください。
  3. GETSYSが3380Hで始まるCP/M(実際のｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑは128ﾊﾞｲﾄ後ろの3400Hで始まる)を取得/設定するかを見るために初期化したCP/Mﾃﾞｨｽｸを使用してGETSYSﾌﾟﾛｸﾞﾗﾑを走らせてください。
  4. 6.4節を読み、PUTSYSﾌﾟﾛｸﾞﾗﾑを書いてください。 これはﾃﾞｨｽｸの最初の2ﾄﾗｯｸに3380Hで始まるﾒﾓﾘを書き戻します。 PUTSYSﾌﾟﾛｸﾞﾗﾑは追補Cで示されるように0100Hに配置されるべきです。
  5. 空白の未初期化ﾃﾞｨｽｸを使用し、最初の2ﾄﾗｯｸへﾒﾓﾘの一部を書くことによりPUTSYSﾌﾟﾛｸﾞﾗﾑを試験(実行後、ﾒﾓﾘをｸﾘｱし、GETSYSを使用して読み戻す)してください。 このﾌﾟﾛｸﾞﾗﾑがﾃﾞｨｽｸ上のCP/M変更に使用されるため、PUTSYSを完全に試験してください。
  6. 追補Aで与えられる配布版BIOSについて6.5節、6.6節、6.7節を学び、改造した環境に対して同じ機能を実行する簡易版を書いてください。 見本として追補Bで与えられるﾌﾟﾛｸﾞﾗﾑを使用してください。 改造した新BIOSをCBIOSと呼びます。 この段階では簡単なｺﾝｿｰﾙ入出力と単一ﾄﾞﾗｲﾌﾞでの基本ﾃﾞｨｽｸ操作だけを実装してください。
  7. ｺﾝｿｰﾙ入出力とﾃﾞｨｽｸ読み書きを適切に実行することを保証するためにCBIOSを完全に試験してください。 全ての読み書きで指定したﾄﾗｯｸとｾｸﾀが正しいことを検査し、読み込み動作中にﾃﾞｨｽｸ書き込み動作が起きないのを保証することに注意してください。 これらの検査をしないことは補修後に初期化したCP/Mｼｽﾃﾑの破壊を引き起こすかもしれません。
  8. 6.5節での表6-3.を参照し、BIOSが4A00H～4FFFH位置間に配置されることに注意してください。 GETSYSを使用してCP/Mｼｽﾃﾑを読み、第6段階で開発され、第7段階で試験されたCBIOSによりBIOS領域を置き換えてください。 この置換はﾒﾓﾘ内で行われます。
  9. 補修したCP/Mのﾒﾓﾘ ｲﾒｰｼﾞを試験用空白ﾃﾞｨｽｸの最初の2ﾄﾗｯｸに配置するためにPUTSYSを使用してください。
  10. 試験ﾃﾞｨｽｸから複写したﾒﾓﾘ ｲﾒｰｼﾞを持って来てﾒﾓﾘ内の3380Hに戻すためにGETSYSを使用し、正しく戻し設定されていることを保証するために検査してください(可能ならば取得/設定前にﾒﾓﾘを1で消去してください。)。 設定成功で4A00H位置のｺｰﾙﾄﾞ開始ｺｰﾄﾞへ分岐してください。 ｺｰﾙﾄﾞ開始ﾙｰﾁﾝは0ﾍﾟｰｼﾞを初期化し、その後CBIOSを呼ぶBDOS、BODSを呼ぶ3400H位置のCCPへ飛びます。 CCPはﾄﾗｯｸ2の16ｾｸﾀを読むことをCBIOSに求め、そしてCP/Mはｼｽﾃﾑ指示子A>を表示します。

    障害に出会ったなら、CBIOSの追跡やﾌﾞﾚｰｸﾎﾟｲﾝﾄを利用できる何らかのﾃﾞﾊﾞｯｸﾞ設備を使用してください。

  11. 第10段階の完了でCP/Mは命令入力に対してｺﾝｿｰﾙで指示します。 ﾃﾞｨｽｸ書き込み操作を試験するために次を入力してください。
    SAVE 1 X.COM
    全ての命令はｷｬﾘｯｼﾞ ﾘﾀｰﾝ(Enter)が後続しなければなりません。 CP/Mは各種ﾃﾞｨｽｸ ｱｸｾｽ後に別の指示子で応答します。
    A>
    これが行われない場合、ﾃﾞｨｽｸ書き込み機能をﾃﾞﾊﾞｯｸﾞし、再試行してください。
  12. DIR
    の入力によりﾃﾞｨﾚｸﾄﾘ命令を試験してください。 CP/Mは
    A:X       COM
    で応答します。
  13. ERA X.COM
    の入力により削除命令を試験してください。

    CP/Mは指示子で応答します。 今やこれは完全な機能のためにﾌﾞﾄｽﾄﾗｯﾌﾟ ﾛｰﾀﾞを必要とするだけのｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑです。

  14. GETSYSと同様にﾌﾞｰﾄｽﾄﾗｯﾌﾟ ﾛｰﾀﾞを書き、(配布ﾃﾞｨｽｸではなく、再び試験ﾃﾞｨｽｸを使用して)PUTSYSを使用し、ﾄﾗｯｸ0のｾｸﾀ1に配置してください。 ﾌﾞｰﾄｽﾄﾗｯﾌﾟ動作のより多くの情報については6.5節と6.8節をご覧ください。
  15. 第11, 12, 13段階の実行によりｲﾝｽﾄｰﾙしたﾌﾞｰﾄﾛｰﾀﾞを含む新規試験ﾃﾞｨｽｸを再検査してください。 これら試験の完了でCTRL-Cを入力してください。 ｼｽﾃﾑはｼｽﾃﾑをﾘﾌﾞｰﾄするｳｫｰﾑ ｽﾀｰﾄを実行し、指示子を表示します。
  16. この時点で試験ﾃﾞｨｽｸ上の改造したCP/Mｼｽﾃﾑは多分良品版です。 試験ﾃﾞｨｽｸからCP/Mを取得/設定するためにGETSYSを使用してください。 試験ﾃﾞｨｽｸを取り出し、配布ﾃﾞｨｽｸまたは適法なｺﾋﾟｰをﾄﾞﾗｲﾌﾞに配置して、配布版を改造版に置き換えるためにPUTSYSを使用してください。 補修が保証されない場合、この段階はDigital Researchから得られたｼｽﾃﾑを破壊するため、この置換を行ってはなりません。
  17. 修正したCP/Mを取得/設定し、
    DIR
    を入力することにより試験してください。 CP/Mは初期化したﾃﾞｨｽｸ上で提供されるﾌｧｲﾙの一覧で応答します。 DDT.COMﾌｧｲﾙはﾃﾞﾊﾞｯｶﾞ用のﾒﾓﾘ ｲﾒｰｼﾞです。 新ﾃﾞｨｽｸが読み込み専用の場合を除いて、ﾃﾞｨｽｸが取り外されて他のﾃﾞｨｽｸで置き換えられる時、常にCP/Mｼｽﾃﾑを(CTRL-Cで足る)ﾘﾌﾞｰﾄしなければならないことに今から注意してください。
  18. DDT
    の入力によりﾃﾞﾊﾞｯｶﾞを取得/設定して試験してください。 操作手順については第4章をご覧ください。
  19. 更なるCBIOS修正をする前にｴﾃﾞｨﾀ(第2章参照)とｱｾﾝﾌﾞﾗ(第3章参照)の使用を練習してください。 ED、ASM、DDTを使用し、GETSYS、PUTSYS、CBIOSﾌﾟﾛｸﾞﾗﾑを記録、試験してください。 元のﾃﾞｨｽｸのﾊﾞｯｸｱｯﾌﾟ ｺﾋﾟｰを得るために或るﾃﾞｨｽｸから他のﾃﾞｨｽｸへｾｸﾀ単位の複写を行うCOPYﾌﾟﾛｸﾞﾗﾑを作成し、試験してください。 CP/Mｼｽﾃﾑを複写するとき、法的責務を指示するCP/M承諾同意書を読んでください。 COPYﾌﾟﾛｸﾞﾗﾑで作成した各ｺﾋﾟｰ上に次の著作権通知を配置してください。
    Copyright (c), 1976 Digital Research
  20. 必要ならば、ﾊﾟﾝﾁ、ﾘｰﾀﾞ用拡張機能、登録ﾒｯｾｰｼﾞを含め、追加ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞ用設備を追加するためにCBIOSを修正してください。 これらの変更は6.3節での再生成手順の参照またはGETSYSとPUTSYSﾌﾟﾛｸﾞﾗﾑとで作ることができます。
改造したCP/Mｼｽﾃﾑの良品ｺﾋﾟｰを直ぐに持つべきです。 CP/MのCBIOS部分は使用者が所有していますが、修正版は法律上複写できません。

ｼｽﾃﾑがCP/M使用者間の非適法なｿﾌﾄｳｪｱ転送を許す他の全てのCP/Mｼｽﾃﾑとのﾌｧｲﾙ互換性を持つままなことに注意されるべきです。


付録 6.3 第2段階ｼｽﾃﾑ生成

一旦ｼｽﾃﾑが走行すると、次の段階は希望するﾒﾓﾘ容量に対してCP/Mを設定することです。 通常、ﾒﾓﾘ ｲﾒｰｼﾞは最初にMOVCPM(ｼｽﾃﾑ再配置)ﾌﾟﾛｸﾞﾗﾑで生成され、その後で名付けられたﾃﾞｨｽｸ ﾌｧｲﾙ内に配置されます。 このﾃﾞｨｽｸ ﾌｧｲﾙはその後ﾃﾞﾊﾞｯｶﾞとｼｽﾃﾑ生成ﾌﾟﾛｸﾞﾗﾑ(第1章参照)の使用で取得/設定、検査、補修されます。

CBIOSとBOOTはIntel HEX形式でCBIOSとBOOT用のｺｰﾄﾞを含むCBIOS.HEXとBOOT.HEXと呼ぶﾌｧｲﾙを生成するのにEDの使用で修正され、ASMの使用でｱｾﾝﾌﾞﾙされます。

希望したﾒﾓﾘ容量用に設定したCP/Mのﾒﾓﾘ ｲﾒｰｼﾞをTPA内に得るため、

MOVCPM xx *
命令を入力してください。 xx は10進数のKﾊﾞｲﾄ単位のﾒﾓﾘ容量で、例えば32Kﾊﾞｲﾄに対しては32です。 この応答は次のとおりです。
CONSTRUCTING xxK CP/M VERS 2.0
READY FOR "SYSGEN" OR
"SAVE 34 CPMxx.COM"
TPA内のCP/Mのｲﾒｰｼﾞは要求したﾒﾓﾘ容量用に設定されます。 このﾒﾓﾘ ｲﾒｰｼﾞは位置0900H～227FHで、現在、BOOTは0900H、CCPは0980H、BDOSは1180Hで始まり、BIOSは1F80Hからです。 このﾒﾓﾘ ｲﾒｰｼﾞが標準MDS800用BIOSとそのBOOTを持つことに注意してください。 直ぐこのﾒﾓﾘ ｲﾒｰｼﾞをﾌｧｲﾙ内に保存することが必要で、その結果CBIOSとBOOTを補修できます。
SAVE 34 CPMxx.COM
MOVCPMにより生成したﾒﾓﾘ ｲﾒｰｼﾞはTPAの空き領域内に設定されるため負の偏差により相殺され、より高いﾒﾓﾘでのCP/M動作とのｲﾝﾀｰﾌｪｰｽできません。 このﾒﾓﾘ ｲﾒｰｼﾞはDDT下で後続して取得/設定し、ｼｽﾃﾑの新規生成に対する準備で検査または変更できます。 DDTは
DDT CPMxx.COM	(DDT読み込み/設定後CP/Mｲﾒｰｼﾞ読み込み)
DDTは以下で応答すべきです。
NEXT PC
2300 0100
-		(DDTの指示子)
ﾒﾓﾘ ｲﾒｰｼﾞの0900H～227FH部分を調べるために逆ｱｾﾝﾌﾞﾘ表示命令を与えることができます。 けれどもﾒﾓﾘ ｲﾒｰｼﾞ内のどの特定ｱﾄﾞﾚｽを探すためにも、実際のｱﾄﾞﾚｽを探すためにCP/Mｱﾄﾞﾚｽに負の偏差を加えなければならないことに注意してください。 ﾄﾗｯｸ0, ｾｸﾀ1は0900H位置に取得/設定され(使用者は0900H～097FHでｺｰﾙﾄﾞ開始ﾛｰﾀﾞを探すべき)、ﾄﾗｯｸ0, ｾｸﾀ2は0980H(これはCCPの基準ｱﾄﾞﾚｽ)に取得/設定のようにCP/Mｼｽﾃﾑ全体が取得/設定されます。 例えば20KｼｽﾃﾑでのCCPはCP/Mでｱﾄﾞﾚｽ3400Hに存在しますが、SYSGENﾌﾟﾛｸﾞﾗﾑにより0980Hのﾒﾓﾘ内に配置されます。 従って負の偏差は 3400H + n = 0980H または n = 0980H - 3400Hを満足するnにより示されます。 n = D580Hと2の補数での仮定は3400H + D580H = 10980H = 0980H(ｵｰﾊﾞｰﾌﾛｰは無視)により検査できます。 より大きなｼｽﾃﾑに対して満足するnは以下です。
(3400H + b) + n = 980H または
n = 980H - (3400H + b) または
n = D580H - b
代表的なCP/Mｼｽﾃﾑに対するnの値は以下で与えられます。

表 6-2. CP/Mｼｽﾃﾑに対する代表値
ﾒﾓﾘ容量 | 偏差 b | 負の偏差 n
20K | 0000H | D580H - 0000H = D580H
24K | 1000H | D580H - 1000H = C580H
32K | 3000H | D580H - 3000H = A580H
40K | 5000H | D580H - 5000H = 8580H
48K | 7000H | D580H - 7000H = 6580H
56K | 9000H | D580H - 9000H = 4580H
62K | A800H | D580H - A800H = 2D80H
64K | B000H | D580H - B000H = 2580H

20KｼｽﾃﾑでDDT下で取得/設定したﾒﾓﾘ ｲﾒｰｼﾞ内のｱﾄﾞﾚｽxの配置を求める場合、最初に

Hx,n	(16進数での加算と減算)
を入力してください。 するとDDTはx + n(加算)とx - n(減算)の値で応答します。 DDTにより表示された最初の数値がｺｰﾄﾞまたはﾃﾞｰﾀを配置したﾒﾓﾘ内の実際のﾒﾓﾘ ｱﾄﾞﾚｽです。 例えば次のDDT命令
H3400,D580
は加算値としてDDT下のﾒﾓﾘ ｲﾒｰｼﾞ内に配置されたCCPｱﾄﾞﾚｽ0980Hを生成します。

(4A00H + b) - nに配置されたBIOS部分を逆ｱｾﾝﾌﾞﾙするにはL命令を入力してください。 実際のｱﾄﾞﾚｽ1F80Hの生成にはH命令を使用します。 従ってこの逆ｱｾﾝﾌﾞﾘ命令は次のとおりです。

L1F80
CBOOTとCBIOSﾙｰﾁﾝの補修のため、これは直ぐに必要です。 BOOTはﾒﾓﾘ ｲﾒｰｼﾞ内の0900Hにあります。 実際に取得/設定したｱﾄﾞﾚｽがnなら、偏差(m)を計算するために次の命令を入力してください。
H900,n	(取得/設定ｱﾄﾞﾚｽから目的ｱﾄﾞﾚｽを減算)
命令の応答でDDTにより表示された2番目の数値が求めた偏差(m)です。 例えばBOOTが0080Hで実行する場合、
H900,80
命令は
0980  0880	(16進数での加算値と減算値)
を生成します。 従って偏差(m)は0880Hになります。 BOOTを読み込むには次の命令を与えてください。
ICBOOT.HEX	CBOOT.HEXﾌｧｲﾙ入力指定)
Rm		(偏差(m:0900H-n)でCBOOT読み込み)
次の命令でCBOOTを調べてください。
L900
元の版のCBIOSがある1F80H領域を調べることによりCBIOS置換の準備が出来ており、そして次を入力してください。
ICBIOS.HEX	(CBIOS.HEXﾌｧｲﾙ読み込み準備)
CBIOSは20K CP/Mｼｽﾃﾑ内に統合され、従って4A00H位置から始まるとの仮定です。 DDT下のﾒﾓﾘ ｲﾒｰｼﾞ内にCBIOSを正しく配置するために、このHEXﾌｨﾙを読み込み/設定する時に20Kｼｽﾃﾑに対する負の偏差nを加えなければなりません。 これは次の入力により成し遂げられます。
RD580	(偏差D580Hでﾌｧｲﾙ読み込み)
読み込み完了で正しく取得/設定されたことを保証するためにCBIOSが取得/設定された領域を(L1F80命令の使用で)再調査してください。 変更が満足なら、CTRL-CまたはG0命令の使用でDDTから復帰してください。

次のやり取りで示されるように補修したﾒﾓﾘ ｲﾒｰｼﾞの置換のためﾃﾞｨｽｸ(補修が確実になるまで試験ﾃﾞｨｽｸを使用)に戻すにはSYSGENが使用されます。

SYSGEN
SYSGENﾌﾟﾛｸﾞﾗﾑ開始
SYSGEN VERSION 2.0
SYSGEN開始ﾒｯｾｰｼﾞ
SOURCE DRIVE NAME
(OR RETURN TO SKIP)
ｼｽﾃﾑが既にﾒﾓﾘ内にあるのでCP/M読み込み操作を飛ばすためにRETURN(Enter)で応答してください。
DESTINATION DRIVE NAME
(OR RETURN TO REBOOT)
Bﾄﾞﾗｲﾌﾞのﾃﾞｨｽｸに新ｼｽﾃﾑを書くためにBで応答してください。
DESTINATION ON B
THEN TYPE RETURN
Bﾄﾞﾗｲﾌﾞに記録用ﾃﾞｨｽｸを配置し、RETURN(Enter)を押下してください。
FUNCTION COMPLETE
DESTINATION DRIVE NAME
(OR RETURN TO REBOOT)

Aﾄﾞﾗｲﾌﾞに記録用ﾃﾞｨｽｸを配置し、新設定のCP/Mｼｽﾃﾑを持って来るためにｺｰﾙﾄﾞ ﾌﾞｰﾄを実行してください。

新CP/MｼｽﾃﾑはH試験され、承諾同意書で指示されたように次のDigital Research著作権通知がﾃﾞｨｽｸに配置されます。

Copyright (c), 1977 Digital Research


付録 6.4 GETSYSとPUTSYSﾌﾟﾛｸﾞﾗﾑ見本

次のﾌﾟﾛｸﾞﾗﾑは6.1節と6.2節で参照されるGETSYSとPUTSYS用ﾌｧｰﾑｳｪｱを提供します。 指示ｾｸﾀの読み書きのためにRDSECとWRSECｻﾌﾞﾙｰﾁﾝを挿入しなければなりません。

ﾘｽﾄ 6-1. GETSYSﾌﾟﾛｸﾞﾗﾑ
; GETSYSﾌﾟﾛｸﾞﾗﾑ -- ﾄﾗｯｸ0と1を3380Hのﾒﾓﾘに読み込み
; ﾚｼﾞｽﾀ	使用目的
; A	(汎用ﾚｼﾞｽﾀ)
; B	ﾄﾗｯｸ番号(O,1)
; C	ｾｸﾀ番号(1,2,～,26)
; DE	(汎用ﾚｼﾞｽﾀ対)
; HL	設定ﾒﾓﾘ ｱﾄﾞﾚｽ
; SP	ｽﾀｯｸ ｱﾄﾞﾚｽ

START:	LD	SP,3380H	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化(ﾛｰｶﾙ領域)
    LD	HL,3380H	;
設定ﾒﾓﾘ基準ｱﾄﾞﾚｽ取得
    LD	B,0		;
ﾄﾗｯｸ番号初期化(=0)
RDTL:	LD	C,1		;
ｾｸﾀ番号初期化(=1)
RDSL:	CALL	RDSEC		;
1ｾｸﾀ読み込み(使用者供給ｻﾌﾞﾙｰﾁﾝ)
    LD	DE,128		;
ﾊﾞｲﾄ数/1ｾｸﾀ取得
    ADD	HL,DE		;
ﾒﾓﾘ ｱﾄﾞﾚｽ進行(+128)
    INC	C		;
ｾｸﾀ番号進行(+1)
    LD	A,C		;
ｾｸﾀ番号複写
    CP	26+1		;
最終ｾｸﾀ完了検査
    JP	C,RDSL		;
ｾｸﾀ26完了まで継続へ

; ここに次ﾄﾗｯｸへの移動を書く

    INC	B		;
ﾄﾗｯｸ番号進行(+1)
    LD	A,B		;
ﾄﾗｯｸ番号複写
    CP	1+1		;
最終ﾄﾗｯｸ完了検査
    JP	C,RDTL		;
ﾄﾗｯｸ1完了まで継続へ

; 使用者供給ﾃﾞｨｽｸ読み込みｻﾌﾞﾙｰﾁﾝ
; 入力: B:ﾄﾗｯｸ番号 C:ｾｸﾀ番号 HL:ﾒﾓﾘ ｱﾄﾞﾚｽ

RDSEC:	PUSH	BC		;
BCﾚｼﾞｽﾀ一時保存
    PUSH	HL		;
HLﾚｼﾞｽﾀ一時保存
;

;***********************************************

; この位置でﾃﾞｨｽｸ1ｾｸﾀ読み込み実行
; ｴﾗｰが起きたならﾗﾍﾞﾙ"START"へ分岐
;***********************************************

;

    POP	HL		;
HLﾚｼﾞｽﾀ復帰
    POP	BC		;
BCﾚｼﾞｽﾀ復帰
    RET			;
呼び出し元へ復帰

    END	START

このﾌﾟﾛｸﾞﾗﾑは目的の参照については追補Bで一覧され、原点0100Hの仮定でｱｾﾝﾌﾞﾙされます。 ﾌﾟﾛｸﾞﾗﾑがﾊﾟﾈﾙのｽｨｯﾁを通して入力されなければならないなら、ﾘｽﾄの左で一覧される16進数機械語ｺｰﾄﾞが有用かもしれません。

追補Cで示されるように、PUTSYSﾌﾟﾛｸﾞﾗﾑは上で与えられるGETSYSﾌﾟﾛｸﾞﾗﾑで少しの操作だけを変更することによりGETSYSから構築できます。 HLﾚｼﾞｽﾀ ﾍﾟｱは次に書く転送ｱﾄﾞﾚｽになり、これらのﾚｼﾞｽﾀの動作はこのﾌﾟﾛｸﾞﾗﾑ内で変更してはいけません。 RDSECｻﾌﾞﾙｰﾁﾝは、HLのｱﾄﾞﾚｽからのﾃﾞｰﾀがBﾚｼﾞｽﾀで与えられたﾄﾗｯｸのCﾚｼﾞｽﾀで与えられたｾｸﾀに書かれる、違う機能を実行するWRSECｻﾌﾞﾙｰﾁﾝに置き換えられます。 追補Cで示されるように、試験、開発段階中の単一ﾌﾟﾛｸﾞﾗﾑ内でGETSYSとPUTSYSの組み合わせは度々有用です。


付録 6.5 ﾃﾞｨｽｸ構造

標準配布版CP/Mについてのｾｸﾀ割り当ては参照目的用にここで与えられます。 最初のｾｸﾀは任意選択のｿﾌﾄｳｪｱ ﾌﾞｰﾄ領域を含みます(次表参照)。 ﾃﾞｨｽｸ制御器は多分ﾄﾗｯｸ0のｾｸﾀ1を指定位置(多分0000H)のﾒﾓﾘ内に持ってくるために設定されます。 BOOTと呼ばれるこのｾｸﾀのﾌﾟﾛｸﾞﾗﾑは残りのｾｸﾀを3400H+bで始まるﾒﾓﾘ内に持ってくる責務があります。 この場合、ﾄﾗｯｸ0のｾｸﾀ2から3400H+b位置にﾌﾟﾛｸﾞﾗﾑを取得/設定します。

例のようにIntel MDS800ﾊｰﾄﾞｳｪｱ ｺｰﾙﾄﾞ開始ﾛｰﾀﾞはﾄﾗｯｸ0のｾｸﾀ1を絶対ｱﾄﾞﾚｽ3000H内に持ってきます。 このｾｸﾀの設定で3000H位置へ制御が移り、ﾄﾗｯｸ0の残りとﾄﾗｯｸ1全部を3400H+bで始まるﾒﾓﾘ内に取得/設定することによりﾌﾞｰﾄｽﾄﾗｯﾌﾟ動作が始まります。 このﾌﾞｰﾄｽﾄﾗｯﾌﾟ ﾛｰﾀﾞが非MDS環境で少ししか使用されないとは言え、ﾌﾞｰﾄ動作のいくつかが使用者のｺｰﾙﾄﾞ開始ﾛｰﾀﾞで重複されなければならないため、それを調べるために有用です。

表 6-3. CP/Mﾃﾞｨｽｸ ｾｸﾀ割り当て
ﾄﾗｯｸ | ｾｸﾀ | ﾍﾟｰｼﾞ番号 | ﾒﾓﾘ ｱﾄﾞﾚｽ | CP/M部署名
00 | 01 |  | (ﾌﾞｰﾄ ｱﾄﾞﾚｽ) | ｺｰﾙﾄﾞ開始ﾛｰﾀﾞ
00 | 02 | 00 | 3400H + b | CCP
 | 03 |  | 3480H + b
 | 04 | 01 | 3500H + b
 | 05 |  | 3580H + b
 | 06 | 02 | 3600H + b
 | 07 |  | 3680H + b
 | 08 | 03 | 3700H + b
 | 09 |  | 3780H + b
 | 10 | 04 | 3800H + b
 | 11 |  | 3880H + b
 | 12 | 05 | 3900H + b
 | 13 |  | 3980H + b
 | 14 | 06 | 3A00H + b
 | 15 |  | 3A80H + b
 | 16 | 07 | 3B00H + b
 | 17 |  | 3B80H + b
00 | 18 | 08 | 3C00H + b | BDOS
 | 19 |  | 3C80H + b
 | 20 | 09 | 3D00H + b
 | 21 |  | 3D80H + b
 | 22 | 10 | 3E00H + b
 | 23 |  | 3E80H + b
 | 24 | 11 | 3F00H + b
 | 25 |  | 3F80H + b
 | 26 | 12 | 4000H + b
01 | 01 |  | 4080H + b
 | 02 | 13 | 4100H + b
 | 03 |  | 4180H + b
 | 04 | 14 | 4200H + b
 | 05 |  | 4280H + b
 | 06 | 15 | 4300H + b
 | 07 |  | 4380H + b
 | 08 | 16 | 4400H + b
 | 09 |  | 4480H + b
 | 10 | 17 | 4500H + b
 | 11 |  | 4580H + b
 | 12 | 18 | 4600H + b
 | 13 |  | 4680H + b
 | 14 | 19 | 4700H + b
 | 15 |  | 4780H + b
 | 16 | 20 | 4800H + b
 | 17 |  | 4880H + b
 | 18 | 21 | 4900H + b
 | 19 |  | 4980H + b
01 | 20 | 22 | 4A00H + b | BIOS
 | 21 |  | 4A80H + b
 | 22 | 23 | 4B00H + b
 | 23 |  | 4B80H + b
 | 24 | 24 | 4C00H + b
 | 25 |  | 4C80H + b
 | 26 | 25 | 4D00H + b


付録 6.6 BIOS移行点

ｺｰﾙﾄﾞ開始ﾛｰﾀﾞとBDOSからBIOSへの移行点は以下で詳述されます。 BIOSへの移行は以下で示されるように4A00H+bに配置されたｼﾞｬﾌﾟ ﾍﾞｸﾀを通ります。 追補Aと追補Bをご覧ください。 このｼﾞｬﾝﾌﾟ ﾍﾞｸﾀは個別BIOSｻﾌﾞﾙｰﾁﾝへﾌﾟﾛｸﾞﾗﾑ制御を送る一連の17のｼﾞｬﾝﾌﾟ命令です。 BIOSのｻﾌﾞﾙｰﾁﾝはCP/Mの再設定中に或る機能が空かも(それらは単一のRET命令を含むかも)しれませんが、その入口はｼﾞｬﾝﾌﾟ ﾍﾞｸﾀ内に存在しなければなりません。

4A00H+bでのｼﾞｬﾝﾌﾟ ﾍﾞｸﾀは以下で示される形式を採り、個別のｼﾞｬﾝﾌﾟ ｱﾄﾞﾚｽは左で与えられます。

ﾘｽﾄ 6-2. BIOS移行点
4A00H+b	JP	BOOT	;
ｺｰﾙﾄﾞ開始ﾛｰﾄﾞからここへ訪れる
4A03H+b	JP	WBOOT	;
ｳｫｰﾑ開始ﾛｰﾄﾞからここへ訪れる
4A06H+b	JP	CONST	;
ｺﾝｿｰﾙ文字有無検査
4A09H+b	JP	CONIN	;
ｺﾝｿｰﾙ入力文字読み込み
4A0CH+b	JP	CONOUT	;
ｺﾝｿｰﾙ出力文字書き込み
4A0FH+b	JP	LIST	;
ﾘｽﾄ出力文字書き込み
4A12H+b	JP	PUNCH	;
ﾊﾟﾝﾁ装置へ文字書き込み
4A15H+b	JP	READER	;
ﾘｰﾀﾞ装置から読み込み
4A18H+b	JP	HOME	;
選択ﾃﾞｨｽｸでﾄﾗｯｸ0へ移動
4A1BH+b	JP	SELDSK	;
ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞ選択
4A1EH+b	JP	SETTRK	;
ﾄﾗｯｸ番号設定
4A21H+b	JP	SETSEC	;
ｾｸﾀ番号設定
4A24H+b	JP	SETDMA	;
DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ設定
4A27H+b	JP	READ	;
選択ｾｸﾀ読み込み
4A2AH+b	JP	WRITE	;
選択ｾｸﾀ書き込み
4A2DH+b	JP	LISTST	;
ﾘｽﾄ状態取得
4A30H+b	JP	SECTRAN	;
ｾｸﾀ変換ｻﾌﾞﾙｰﾁﾝ

各ｼﾞｬﾝﾌﾟ ｱﾄﾞﾚｽは以下で略述されるように指定機能を実行する特定ｻﾌﾞﾙｰﾁﾝに対応します。 これらはｼﾞｬﾝﾌﾟ ﾃｰﾌﾞﾙで、BOOT と WBOOT 呼び出しの結果のｼｽﾃﾑ再初期化、CONST, CONIN, CONOUT, LIST, PUNCH, READER, LISTST 呼び出しにより実行される単純な文字入出力、HOME, SELDSK, SETTRK, SETSEC, SETDMA, READ, WRITE, SECTRAN 呼び出しにより実行されるﾃﾞｨｽｸ入出力の3つの主な分野です。

全ての単純な文字入出力は最上位(ﾊﾟﾘﾃｨ)ﾋﾞｯﾄが0に設定の大文字と小文字のASCIIで実行されると仮定されます。 入力装置に対するﾌｧｲﾙ終了状態はASCIIのCTRL-Z(1AH)により与えられます。 周辺装置はCP/Mで論理装置として見え、BIOSで物理装置に割り当てられます。

操作のためにBDOSはCONST, CONIN, CONOUT ｻﾌﾞﾙｰﾁﾝだけが必要です。 LIST, PUNCH, READER はPIPで使用され得ますが、BDOSでは使用されません。 加えて LISTST は印刷ｽﾌﾟｰﾙ利用のDESPOOLによってのみ使用されます。 従って初期版CBIOSは残りのASCII装置について空のｻﾌﾞﾙｰﾁﾝを持つことができます。

次の一覧は書く装置の特性を記述します。

  • ｺﾝｿｰﾙ(CONSOLE)は CONST, CONIN, CONOUT を通してｱｸｾｽされ、操作者との通信する基本的に相互にやり取りするｺﾝｿｰﾙです。 一般的にCONSOLEはCRTやﾃﾚﾀｲﾌﾟのような装置です。
  • ﾘｽﾄ(LIST)は基本的に表出し装置です。 使用者のｼｽﾃﾑに存在するなら、普通それはﾌﾟﾘﾝﾀやﾃﾚﾀｲﾌﾟのようなﾊｰﾄﾞ ｺﾋﾟｰ装置です。
  • ﾊﾟﾝﾁ(PUNCH)は基本的にﾃｰﾌﾟ打ち抜き装置です。 存在するなら、通常それは高速紙ﾃｰﾌﾟ ﾊﾟﾝﾁｬやﾃﾚﾀｲﾌﾟです。
  • ﾘｰﾀﾞ(READER)は基本的に単純な光ﾘｰﾀﾞやﾃﾚﾀｲﾌﾟのようなﾃｰﾌﾟ読み取り装置です。

1つの周辺装置は同時にLIST, PUNCH, READER装置として割り当てることができます。 LIST, PUNCH, READER装置として周辺装置が割り当てられない場合、PIPや或る他の使用者ﾌﾟﾛｸﾞﾗﾑによりその装置がｱｸｾｽされる場合にｼｽﾃﾑが停止しないようにCBIOSは適切なｴﾗｰ ﾒｯｾｰｼﾞを与えます。 代わりに、PUNCHとLISTﾙｰﾁﾝは単に直ぐ戻ることができ、READERﾙｰﾁﾝは既にﾌｧｲﾙの終了を示すためにAﾚｼﾞｽﾀの1AH(CTRL-Z)と共に戻ることができます。

柔軟性を付加するために物理装置の再割り当てを許すIOBYTE機能を任意選択で実装できます。 IOBYTE機能はCP/M処理中に変更できる論理装置-物理装置の配置を作成します。1.6.1節 STAT命令をご覧ください。

Intel標準に対応するIOBYTE機能の定義は次のとおりです。 ﾒﾓﾘ内の単一位置は特定の時に有効な論理装置-物理装置の配置を定義するIOBYTEと呼ばれる現在位置0003Hのﾒﾓﾘ内の単一位置が保持されます。 この配置は次図で示されるようにCONSOLE, READER, PUNCH, LISTと呼ばれる各々2ﾋﾞｯﾄの4つの明確な領域にIOBYTEを分けることにより実行されます。

図 6-1. IOBYTE領域
IOBYTE
(0003H)
MSB LSB
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
LIST | PUNCH | READER | CONSOLE

各領域の値は各論理装置の割り当てた転送元または転送先を定義する0～3範囲になり得ます。 表6-4.は各領域に割り当て得る値を与えます。

表 6-4. IOBYTE領域の意味
領域 | 値 | 意味
CONSOLE 領域 (ﾋﾞｯﾄ1,0) | 0 | CONSOLEはｺﾝｿｰﾙ/ﾌﾟﾘﾝﾀ装置(TTY:)に割り当てられます。
 | 1 | CONSOLEはCRT(CRT:)に割り当てられます。
 | 2 | 一群動作(BAT:): CONSOLE入力としてREADER、CONSOLE出力としてLIST装置を使用。
 | 3 | 使用者定義ｺﾝｿｰﾙ装置(UC1:)
READER 領域 (ﾋﾞｯﾄ3,2) | 0 | READERはﾃﾚﾀｲﾌﾟ装置(TTY:)
 | 1 | READERは高速ﾘｰﾀﾞ装置(PTR:)
 | 2 | 使用者定義ﾘｰﾀﾞ装置1(UR1:)
 | 3 | 使用者定義ﾘｰﾀﾞ装置2(UR2:)
PUNCH 領域 (ﾋﾞｯﾄ5,4) | 0 | PUNCHはﾃﾚﾀｲﾌﾟ装置(TTY:)
 | 1 | PUNCHは高速ﾊﾟﾝﾁ装置(PTP:)
 | 2 | 使用者定義ﾊﾟﾝﾁ装置1(UP1:)
 | 3 | 使用者定義ﾊﾟﾝﾁ装置2(UP2:)
LIST 領域 (ﾋﾞｯﾄ7,6) | 0 | LISTはﾃﾚﾀｲﾌﾟ装置(TTY:)
 | 1 | LISTはCRT措置(CRT:)
 | 2 | LISTはﾗｲﾝ ﾌﾟﾘﾝﾀ装置(LPT:)
 | 3 | 使用者定義ﾘｽﾄ装置(UL1:)

IOBYTEの実装は任意選択で、CBIOSの構成にだけ有効です。 物理装置へのｱｸｾｽを許すPIPと論理-物理割り当ての作成または表示を許すSTATを除き、CP/Mのｼｽﾃﾑ ﾌﾟﾛｸﾞﾗﾑはIOBYTEを使用しません(とは言え、それらは0003H位置のIOBYTEの存在を黙認します)。 より多くの情報については1.6節をご覧ください。 IOBYTEを実装するどの場合でも、基本的なCBIOSが完全に実装されて検査されるまで省略されるべきで、その後に便宜を増加するためにIOBYTEを付加すべきです。

ﾃﾞｨｽｸ入出力はｱｸｾｽのためのﾃﾞｨｽｸ番号、特定ﾃﾞｨｽｸでのﾄﾗｯｸとｾｸﾀ、入出力操作に伴うDMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽの設定での様々なﾃﾞｨｽｸ ｱｸｾｽ ｻﾌﾞﾙｰﾁﾝ呼び出しの手順を通して実行されます。READまたはWRITE機能が呼び出されます。

ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞを選択するためにSELDSKが単独で度々呼ばれ、後続の操作に対して他のﾄﾞﾗｲﾌﾞを選択する前に選択したﾃﾞｨｽｸにいくつかの読み込みまたは書き込み操作が続きます。 同様にDMA(転送ﾊﾞﾌｧ)ｱﾄﾞﾚｽを設定するために単独呼び出しされるかもしれず、DMAｱﾄﾞﾚｽが変更される前に選択したDMAｱﾄﾞﾚｽで様々な読み込みまたは書き込み呼び出しが続きます。 ﾄﾗｯｸとｾｸﾀのｻﾌﾞﾙｰﾁﾝは常にREADまたはWRITE操作が実行される前に呼ばれます。

READとWRITEﾙｰﾁﾝはｴﾗｰ状態をBDOSに報告する前に各種再試行(10回が標準)を実行すべきです。 BDOSにｴﾗｰ状態が返ると、使用者にｴﾗｰを報告します。 HOMEｻﾌﾞﾙｰﾁﾝは制御器の特性に依存してﾄﾗｯｸ0への移動を実際に実行するかもしれませんし、しないかもしれません。 次の操作に対してﾄﾗｯｸ0が選択されてしまっていることが重要な点で、丁度引数0でのSETTRKと同じやり方で度々取り扱われます。

次表は各BIOS移行点ｻﾌﾞﾙｰﾁﾝの正確な責務を記述します。
表 6-5. BIOS機能
機能名 | 機能
BOOT | BOOT移行点はｺｰﾙﾄﾞ開始ﾛｰﾀﾞから制御を得、最初の版で省略できる登録ﾒｯｾｰｼﾞの送出を含む基本ｼｽﾃﾑ初期化に対して責任があります。 IOBYTE機能が実装されるならば、この時点で設定されなければなりません。 WBOOTにより設定される様々なｼｽﾃﾑ ﾊﾟﾗﾒｰﾀが初期化されなければならず、更なる処理のために制御は3400H+bのCCPに移されます。 Aﾄﾞﾗｲﾌﾞを選択するためにCﾚｼﾞｽﾀは0に設定されなければならないことに注意してください。
WBOOTWBOOTはｳｫｰﾑ ﾌﾞｰﾄが起きると制御を得ます。 ｳｫｰﾑ ﾌﾞｰﾄは使用者ﾌﾟﾛｸﾞﾗﾑが0000H位置へ分岐またはCPUが前面ﾊﾟﾈﾙからﾘｾｯﾄされると必ず実行されます。 CP/MｼｽﾃﾑはAﾄﾞﾗｲﾌﾞの最初の2ﾄﾗｯｸから読み込み/設定されなければなりませんが、BIOSまたは補修が完了されていればCBIOSを含みません。 ｼｽﾃﾑ ﾊﾟﾗﾒｰﾀは次のように初期化されなければなりません。

0000H～0002H | ｳｫｰﾑ ﾌﾞｰﾄ用に JP WBOOT (000H: JP 4A03H+b)を設定してください。
0003H | CBIOSで実装されるなら、IOBYTEの初期値を設定してください。
0004H | 上位ﾆﾌﾞﾙ=現使用者番号、下位ﾆﾌﾞﾙ=現ﾄﾞﾗｲﾌﾞ番号
0005H～0007H | 一時ﾌﾟﾛｸﾞﾗﾑ用のCP/Mへの基本移行点である JP BDOS (0005H: JP 3C06H+b)を設定してください。

ﾍﾟｰｼﾞ0使用の完全な詳細については6.9節を参照してください。 初期化完了でWBOOTﾌﾟﾛｸﾞﾗﾑはｼｽﾃﾑを再開するために3400H+bのCCPへ分岐しなければなりません。 CCPへの移行でCﾚｼﾞｽﾀはｼｽﾃﾑ初期化後に選択するﾄﾞﾗｲﾌﾞ番号を設定されます。 WBOOTﾙｰﾁﾝはﾒﾓﾘ内の4番地を読み、CﾚｼﾞｽﾀでCCPに渡した正当なﾄﾞﾗｲﾌﾞかを照合すべきです。

CONST | 現在割り当てられたｺﾝｿｰﾙ装置の状態を採取し、文字が読まれるために用意されていればAﾚｼﾞｽﾀに0FFHを、ｺﾝｿｰﾙの文字が用意されていなければAﾚｼﾞｽﾀに00Hを返すべきです。
CONIN | 次のｺﾝｿｰﾙ文字がAﾚｼﾞｽﾀ内に読まれ、ﾊﾟﾘﾃｨ(最上位)ﾋﾞｯﾄが0に設定されます。 ｺﾝｿｰﾙの文字が用意されていなければ復帰する前に文字が入力されるまで待ってください。
CONOUT | 文字はCﾚｼﾞｽﾀからｺﾝｿｰﾙ出力装置に送られます。 文字は最上位のﾊﾟﾘﾃｨ ﾋﾞｯﾄが0に設定されたASCIIです。 (TI Silent700ﾀｰﾐﾅﾙのように)ｺﾝｿｰﾙ装置が行の終わりで或る時間間隔を必要とする場合、ｷｬﾘｯｼﾞ ﾘﾀｰﾝまたはﾗｲﾝ ﾌｨｰﾄﾞで時間待ちを含める必要があるかもしれません。 ｺﾝｿｰﾙ装置に妙な動きでの反応(例えばCTRL-ZはLear-Sieglerﾀｰﾐﾅﾙで画面消去)を引き起こす制御文字を取り除くことができます。
LIST | 文字はCﾚｼﾞｽﾀから現在割り当てられたﾘｽﾄ装置に送られます。 文字はﾊﾟﾘﾃｨ ﾋﾞｯﾄが0のASCIIです。
PUNCH | 文字はCﾚｼﾞｽﾀから現在割り当てられたﾊﾟﾝﾁ装置に送られます。 文字はﾊﾟﾘﾃｨ ﾋﾞｯﾄが0のASCIIです。
READER | 次の文字が現在割り当てられたﾘｰﾀﾞ装置からﾊﾟﾘﾃｨ無し(最上位ﾋﾞｯﾄは0でなければなりません)でAﾚｼﾞｽﾀ内に読まれます。 ﾌｧｲﾙ終了状態はASCIIのCTRL-Z(1AH)を返すことにより報告されます。
HOME | 現在選択したﾃﾞｨｽｸのﾃﾞｨｽｸ ﾍｯﾄﾞはﾄﾗｯｸ0位置に移動されます。 制御器がﾄﾞﾗｲﾌﾞからのﾄﾗｯｸ0ﾌﾗｸﾞへのｱｸｾｽを許すなら、ﾍｯﾄﾞはﾄﾗｯｸ0ﾌﾗｸﾞが検出されるまで段移動されます。 制御器がこの機能をｻﾎﾟｰﾄしないなら、HOME呼び出しは引数0のSETTRK呼び出しに変換されます。
SELDSKCﾚｼﾞｽﾀで与えられたﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞは更なる操作のために選択され、CﾚｼﾞｽﾀはAﾄﾞﾗｲﾌﾞが0, Bﾄﾞﾗｲﾌﾞが1, 同様にPﾄﾞﾗｲﾌﾞが15までです(標準配布版CP/Mは4ﾄﾞﾗｲﾌﾞをｻﾎﾟｰﾄします)。 各ﾃﾞｨｽｸの選択でSELDSKは6.10節で記述され、ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞと呼ばれる16ﾊﾞｲﾄ慮域の基準ｱﾄﾞﾚｽをHLに返さなければなりません。 標準ﾌﾛｯﾋﾟｰ ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞについてはﾍｯﾀﾞ内容と関連ﾃｰﾌﾞﾙが変わらないため、見本のCBIOSに含まれるﾌﾟﾛｸﾞﾗﾑ部分がこの操作を自動的に実行します。

不在ﾄﾞﾗｲﾌﾞの選択を試みた場合、SELDSKはｴﾗｰ指示子としてHL=0000Hを返します。 SELDSKが各呼び出しでﾍｯﾀﾞ ｱﾄﾞﾚｽを返さなければならないとは言え、最後に実行する何れかのﾃﾞｨｽｸ入出力を除いてﾃﾞｨｽｸ選択は度々起き、また多くの制御器が新規ﾄﾞﾗｲﾌﾞを選択する前に現在のﾃﾞｨｽｸ ﾍｯﾄﾞを引き上げるため、入出力機能(移動、読み、書き)が実際に実行されるまで物理的なﾃﾞｨｽｸ選択を延期することが推奨され得ます。 これは過度のﾉｲｽﾞ量とﾃﾞｨｽｸを弱らせる原因になります。 これがｺｰﾙﾄﾞまたはｳｫｰﾑ ﾌﾞｰﾄのためにﾄﾞﾗｲﾌﾞ選択の初回発生なら、Eﾚｼﾞｽﾀの最下位ﾋﾞｯﾄは0です。

SETTRK | BCﾚｼﾞｽﾀは現在選択されたﾄﾞﾗｲﾌﾞで後続するﾃﾞｨｽｸ ｱｸｾｽのためのﾄﾗｯｸ番号を含みます。 今選択されたﾄﾗｯｸへ移動するか、実際に起きる次の読み書きまで移動を遅らせるかが選べます。 BCﾚｼﾞｽﾀは標準ﾌﾛｯﾋﾟｰ ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞについては有効なﾄﾗｯｸ番号に対応する0～76範囲の値を、非標準のﾃﾞｨｽｸ補助ｼｽﾃﾑについては0～65535の値を取り得ます。
SETSEC | BCﾚｼﾞｽﾀは現在選択されたﾄﾞﾗｲﾌﾞで後続するﾃﾞｨｽｸ ｱｸｾｽのための1～26のｾｸﾀ番号を含みます。 BCﾚｼﾞｽﾀ内のｾｸﾀ番号はSECTRANから返された番号と同じです。 この情報を制御器にこの時点で送るか、または読み書き操作が起こるまでｾｸﾀ選択を遅らせるかを選べます。
SETDMA | BCﾚｼﾞｽﾀは後続する読み書き操作のためのDMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽを含みます。 例えばSETDMAが呼ばれる時にB=00H, C=80Hなら、SETDMAを引き起こす次の呼び出しまで、後続する全読み込み操作はそれらのﾃﾞｰﾀを0080H～00FFH内に読み、後続する全書き込み操作は0080H～00FFHからそれらのﾃﾞｰﾀを得ます。 初期DMAｱﾄﾞﾚｽは0080Hと仮定されます。 制御器が実際にDMA(直接ﾒﾓﾘ ｱｸｾｽ)をｻﾎﾟｰﾄする必要はありません。 例えば全てのﾃﾞｰﾀ転送が入出力ﾎﾟｰﾄを通すなら、CBIOSは読み書き操作中のﾒﾓﾘ ﾊﾞｯﾌｧに対し、選択したDMAｱﾄﾞﾚｽで始まる128ﾊﾞｲﾄの領域を使用して構築されます。
READﾄﾞﾗｲﾌﾞが選択、ﾄﾗｯｸが設定、DMAｱﾄﾞﾚｽが指定されてしまっているとの仮定で、READｻﾌﾞﾙｰﾁﾝはこれらのﾊﾟﾗﾒｰﾀを基準とした1ｾｸﾀの読み込みを試み、Aﾚｼﾞｽﾀに次の結果ｺｰﾄﾞを返します。

0 | ｴﾗｰなし
1 | 回復不能ｴﾗｰ状態発生

現在、CP/Mは復帰ｺｰﾄﾞとして0または非0値だけで応答します。 その時にAﾚｼﾞｽﾀ内の値が0なら、CP/Mはそのﾃﾞｨｽｸ操作が正しく完了されたと仮定します。 ｴﾗｰが起きる場合、CBIOSはそのｴﾗｰが回復可能かどうか確かめるために最低10回の再試行を試みるべきです。 ｴﾗｰが報告されると、BDOSは BDOS ERR ON x: BAD SECTOR. ﾒｯｾｰｼﾞを表示します。 操作者はその後にｴﾗｰを無視するためにｷｬﾘｯｼﾞ ﾘﾀｰﾝか、または中止するためのCTRL-Cの押下を選択します。

WRITE | ﾃﾞｰﾀは現在選択されたDMAｱﾄﾞﾚｽから現在選択されたﾄﾞﾗｲﾌﾞ、ﾄﾗｯｸ、ｾｸﾀに書かれます。 ﾌﾛｯﾋﾟｰ ﾃﾞｨｽｸについては、他のCP/Mｼｽﾃﾑとの互換性を維持するためにﾃﾞｰﾀが非削除(nondeleted)ﾃﾞｰﾀとして標されるべきです。 ｴﾗｰ回復は上記のように試み、READで与えられた結果ｺｰﾄﾞがAﾚｼﾞｽﾀで返されます。
LISTST | DESPOOL動作中のｺﾝｿｰﾙ応答を改善するため、DESPOOLﾌﾟﾛｸﾞﾗﾑにより使用されるﾘｽﾄ装置の準備状況を返します。 ﾘｽﾄ装置が文字を受け入れる準備が出来ていなければAﾚｼﾞｽﾀに値00Hが、文字がﾌﾟﾘﾝﾀに送れるならば0FFHが返されます。 このﾘｽﾄ状態が実装されないなら、値00Hが返されるべきです。
SECTRAN論理→物理ｾｸﾀ変換はCP/Mの全体に渡る応答を改善するために実行されます。 標準CP/Mｼｽﾃﾑは各論理読み込み操作間で6物理ｾｸﾀが飛ばされるｽｷｭｰ値6で出荷されます。 このｽｷｭｰ値は次のｾｸﾀがない場合を除いて、殆どのﾌﾟﾛｸﾞﾗﾑに対してｾｸﾀ間のﾊﾞｯﾌｧへ読み込みに充分な時間を許します。 高速なﾌﾟﾛｾｯｻ、ﾒﾓﾘ、ﾃﾞｨｽｸ補助ｼｽﾃﾑを使用する特定のｺﾝﾋﾟｭｰﾀで、このｽｷｭｰ値は全体応答の改善のために変更されるかもしれません。 けれども使用者はｽｷｭｰ値6を使用するｺﾝﾋﾟｭｰﾀ ｼｽﾃﾑの内外での情報転送に関して単密度IBM互換版のCP/Mを保持すべきです。

一般的にSECTRANはBCﾚｼﾞｽﾀでの0からの相対論理ｾｸﾀ番号とDEﾚｼﾞｽﾀでの変換ﾃｰﾌﾞﾙ ｱﾄﾞﾚｽを受け取ります。 このｾｸﾀ番号は変換ﾃｰﾌﾞﾙ内の指標として使用され、HLﾚｼﾞｽﾀ内の物理ｾｸﾀ番号に帰着します。 標準ｼｽﾃﾑについてのﾃｰﾌﾞﾙと指標ｺｰﾄﾞはCBIOS内で提供され、変更の必要はありません。


付録 6.7 BIOS見本

追補Bで示されるﾌﾟﾛｸﾞﾗﾑは最初のBIOSに対する基礎として扱えます。 絶対に必要ならば、このBIOSに最も簡単な機能が仮定される結果、前面ﾊﾟﾈﾙを通しての入力ができます。 CONST, CONIN, CONOUT, READT, WRITEｻﾌﾞﾙｰﾁﾝに対して、このｻﾌﾞﾙｰﾁﾝ内にｺｰﾄﾞの挿入と変更をしなければなりません。 これらの領域内への使用者追加ｺｰﾄﾞ用に格納場所が予約されます。 BIOSに対する0ﾍﾟｰｼﾞで予約した記録領域(6.9節参照)はこのﾌﾟﾛｸﾞﾗﾑで使用され、希望するならROM内に実装できます。

一旦動作すれば、この骨子版は初期登録ﾒｯｾｰｼﾞの表示とより良いｴﾗｰ回復の実行のために増強できます。 LIST, PUNCH, READER用のｻﾌﾞﾙｰﾁﾝは空きを埋め、IOBYTE機能が実装できます。


付録 6.8 ｺｰﾙﾄﾞ開始ﾛｰﾀﾞ見本

追補Eで示されるﾌﾟﾛｸﾞﾗﾑはｺｰﾙﾄﾞ開始ﾛｰﾀﾞ用の基礎として扱えます。 ﾃﾞｨｽｸ読み込み機能は使用者により供給されなければならず、このﾌﾟﾛｸﾞﾗﾑはともかく0000H番地からに設定されなければなりません。 補修ｺｰﾄﾞ用に空間が予約され、ｺｰﾙﾄﾞ開始ﾛｰﾀﾞ用に必要とした保存場所の総量は128ﾊﾞｲﾄです。

結局、このﾛｰﾀﾞをﾃﾞｨｽｸの最初のｾｸﾀ(ﾄﾗｯｸ0と1)に準備し、ｼｽﾃﾑ起動で自動的にﾒﾓﾘ内へ設定することを制御器にさせたいかもしれません。 代わりにｺｰﾙﾄﾞ開始ﾛｰﾀﾞはCP/Mｼｽﾃﾑの及ばないROM内に配置できます。 この場合、より高いｱﾄﾞﾚｽでﾌﾟﾛｸﾞﾗﾑを始めることと、このﾛｰﾀﾞへ分岐するｼｽﾃﾑ起動での命令へ飛ぶｷｰ入力が必要です。 同様のｳｫｰﾑ開始はWBOOTが制御を得るためにこのｷｰ入力操作の必要がなく、従ってﾃﾞｨｽｸから自動的にｼｽﾃﾑを持って来ます。 骨子ｺｰﾙﾄﾞ開始ﾛｰﾀﾞは最小のｴﾗｰ回復を持ち、後の版で強化されるかもしれません。


付録 6.9 0ﾍﾟｰｼﾞの予約領域

0000H～00FFH位置間のﾒﾓﾘの0ﾍﾟｰｼﾞはCP/M処理中に使用されるｺｰﾄﾞとﾃﾞｰﾀの各種部分を含みます。 ｺｰﾄﾞとﾃﾞｰﾀ領域は次表で与えられます。

表 6-6. 0ﾍﾟｰｼﾞの予約領域
位置 | 内容
0000H～0002H | ｳｫｰﾑ開始入口位置4A03H+bへのｼﾞｬﾝﾌﾟ命令を含みます。 これは単純なﾌﾟﾛｸﾞﾗﾑでの再開(JP 0000H)または前面ﾊﾟﾈﾙからの手動再開を許します。
0003H～0003H | 使用者のCBIOSに任意で含めたIntel標準IOBYTEを含みます。(6.6節参照)
0004H | 上位ﾆﾌﾞﾙに現在の使用者番号、下位ﾆﾌﾞﾙに現既定ﾄﾞﾗｲﾌﾞ番号(0=A,～,15=P)
0005H～0007H | BDOSへのｼﾞｬﾝﾌﾟ命令を含み、2つの目的を扱います。 JP 0005H は5.2節で記述されるようにBDOSへの基本的な入口を提供し、LD HL,(0006H) はHLﾚｼﾞｽﾀ対に命令のｱﾄﾞﾚｽ部を持って来ます。 この値はCCPが上書き使用されると仮定する場合のCP/Mにより使用されるﾒﾓﾘの下限ｱﾄﾞﾚｽです。 DDTﾌﾟﾛｸﾞﾗﾑはﾃﾞﾊﾞｯｸﾞ動作でﾒﾓﾘ容量の減少を反映するためにこのｱﾄﾞﾚｽ部を変更します。
0008H～0027H | RST 1～5 の割り込み位置1～5 (未使用)
0030H～0037H | RST 6 の割り込み位置6 (現在未使用、予約)
0038H～003AH | RST 7 の割り込み位置7 : ﾃﾞﾊﾞｯｸﾞ動作でﾌﾞﾚｰｸ ﾎﾟｲﾝﾄが設定された時にDDTまたはSIDへのｼﾞｬﾝﾌﾟ命令を含みますが、CP/Mで他には使用されません。
003BH～003FH | 現在未使用、予約
0040H～004FH | この16ﾊﾞｲﾄ領域はCBIOSでの記録用に予約されていますが、配布版CP/Mで何らかの目的に使用されていません。
0050H～005BH | 現在未使用、予約
005CH～007CH | この既定ﾌｧｲﾙ制御領域(FCB)はCCPにより一時ﾌﾟﾛｸﾞﾗﾑ用に生成されます。
007DH～007FH | 任意使用既定ﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ番号
0080H～00FFH | 既定128ﾊﾞｲﾄ ﾃﾞｨｽｸ ﾊﾞｯﾌｧで、一時ﾌﾟﾛｸﾞﾗﾑがCCP下で読み込み/設定される時に命令行で満たされもします。

この情報はCP/Mｼｽﾃﾑ下の標準動作用の設定ですが、一時ﾌﾟﾛｸﾞﾗﾑでBDOSの機能が必要とされない場合、一時ﾌﾟﾛｸﾞﾗﾑにより上書きされ得ます。

例えば特定のﾌﾟﾛｸﾞﾗﾑが単純な入出力だけを実行し、0番地から実行を開始しなければならない場合、読み込み/設定時に制御を得、標準CP/M機能を使用する小さなﾒﾓﾘ移動ﾌﾟﾛｸﾞﾗﾑを最初にTPAへ読み込み/設定できます。 このﾒﾓﾘ移動ﾌﾟﾛｸﾞﾗﾑは全ての一時ﾌﾟﾛｸﾞﾗﾑの始めと仮定される0100H番地からの制御を得なければなりません。 この移動ﾌﾟﾛｸﾞﾗﾑはその後ﾒﾓﾘ ｲﾒｰｼﾞ全体を0番地に移し、設定したﾒﾓﾘの開始ｱﾄﾞﾚｽに制御を渡せます。

BIOSが上書きされるか、またはｳｫｰﾑ開始移行点を含む0番地が上書きされると、操作者はｺｰﾙﾄﾞ開始手順でﾒﾓﾘ内にCP/Mｼｽﾃﾑを持って来なければなりません。


付録 6.10 ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾃｰﾌﾞﾙ

BIOSに含められるﾃｰﾌﾞﾙはCP/Mで使用されるﾃﾞｨｽｸ補助ｼｽﾃﾑの特定特性を記述します。 これらのﾃｰﾌﾞﾙは追補BのCBIOS見本で示されるように手動ｺｰﾄﾞ化、または追補Fで示されるようにDISKDEFﾏｸﾛ ﾗｲﾌﾞﾗﾘを使用する自動生成のどちらかができます。 ここでの目的はこれらのﾃｰﾌﾞﾙの要素を説明することです。

一般的に各ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞはﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞについての情報を含み、或るBDOS操作用の記録領域を提供する関連した(16ﾊﾞｲﾄの)ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞを持ちます。 各ﾄﾞﾗｲﾌﾞに対するﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞの形式は図6-2.で示され、各要素はﾜｰﾄﾞ(16ﾋﾞｯﾄ)値です。

図 6-2. ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞの形式
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ
XLT | 0000 | 0000 | 0000 | DIRBUF | DPB | CSV | ALV
16B | 16B | 16B | 16B | 16B | 16B | 16B | 16B

ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞの各要素の意味は表6-7.で詳述されます。

表 6-7. ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ要素
要素 | 意味
XLT | 特定ﾃﾞｨｽｸに対してこれが使用される場合の論理→物理変換ﾍﾞｸﾀのｱﾄﾞﾚｽ、またはｾｸﾀ変換が行われない場合(従って論理と物理ｾｸﾀ番号は同じ)は0000H値です。 同じｾｸﾀ ｽｷｭｰ値のﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞは同じ変換ﾃｰﾌﾞﾙを共用します。
0000 | BDOS内使用のための記録値で、初期値は重要ではありません。
DIRBUF | BDOS内でのﾃﾞｨﾚｸﾄﾘ操作用の128ﾊﾞｲﾄ記録領域のｱﾄﾞﾚｽです。 全てのﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ(DPH)は同じ記録領域を指示します。
DPB | このﾄﾞﾗｲﾌﾞ用のﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸのｱﾄﾞﾚｽです。 同じﾃﾞｨｽｸ特性のﾄﾞﾘｱﾌﾞは同じﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸを指示します。
CSV | ﾃﾞｨｽｸ変更に対してｿﾌﾄｳｪｱ検査用に使用される記録領域のｱﾄﾞﾚｽです。 このｱﾄﾞﾚｽはDPH毎に異なります。
ALV | ﾃﾞｨｽｸ記録割り当て情報を保つためにBDOSにより使用される記録領域のｱﾄﾞﾚｽです。 このｱﾄﾞﾚｽはDPH毎に異なります。

ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞ n が与えられると、DPHはﾄﾞﾗｲﾌﾞ0に対応する16ﾊﾞｲﾄの列が最初で、ﾄﾞﾗｲﾌﾞn-1に対応する列が最後のﾃｰﾌﾞﾙに整列されます。 次図でﾗﾍﾞﾙBPBASEはこのDPHﾃｰﾌﾞﾙの基準ｱﾄﾞﾚｽを定義します。

図 6-3. ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ ﾃｰﾌﾞﾙ
DPBASE:

    DW	XLT00, 0000, 0000, 0000, DIRBUF, DBP00, CSV00, ALV00	;
0
    DW	XLT01, 0000, 0000, 0000, DIRBUF, DBP01, CSV01, ALV01	;
1
(この間同様に)
    DW	XLTn-1,0000, 0000, 0000, DIRBUF, DBPn-1,CSVn-1,ALVn-1	;
n-1

SELDSKｻﾌﾞﾙｰﾁﾝの責務は選択したﾄﾞﾗｲﾌﾞに対するDPHの基準ｱﾄﾞﾚｽを返すことです。 次の動作手順はﾃｰﾌﾞﾙ ｱﾄﾞﾚｽを返し、選択したﾄﾞﾗｲﾌﾞが不在の場合は0000Hを返します。

    NDISKS	EQU	4	;
ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞ数
～
                ;
選択ﾃﾞｨｽｸはBCで与えられる。

SELDSK:	LD	HL,0000H	;
ｴﾗｰ ｺｰﾄﾞ仮設定
    LD	A,C		;
指定ﾄﾞﾗｲﾌﾞ番号取得
    CP	NDISKS		;
有効/無効検査
    RET	NC		;
無効(≧4)でｴﾗｰ ｺｰﾄﾞと共に呼び出し元へ復帰
;

    LD	L,C		;
ﾄﾞﾗｲﾌﾞ番号下位複写
    LD	H,B		;
ﾄﾞﾗｲﾌﾞ番号上位複写
    ADD	HL,HL		;
(×2)16ﾊﾞｲﾄ単位に変更(×16)
    ADD	HL,HL		;
(×4)
    ADD	HL,HL		;
(×8)
    ADD	HL,HL		;
(×16)
    LD	DE,DPBASE	;
DPHﾃｰﾌﾞﾙ先頭ｱﾄﾞﾚｽ取得
    ADD	HL,DE		;
対応DPH基準ｱﾄﾞﾚｽ取得
    RET			;
DPH基準ｱﾄﾞﾚｽと共に呼び出し元へ復帰

XLT00～XLTn-1の変換ﾍﾞｸﾀはBIOS内の何処か別の場所に配置され、論理ｾｸﾀ番号0を物理ｾｸﾀ番号1のように単純に1対1に対応します。 各ﾄﾞﾗｲﾌﾞに対するﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸ(DPB)はより複雑です。 一般形をとる図6-4.で示されるように各特定DPBは1つ以上のDPHによりｱﾄﾞﾚｽ指定されます。

図 6-4. ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸ形式
SPT | BSH | BLM | EXM | DSM | DRM | AL0 | AL1 | CKS | OFF
16B | 8B | 8B | 8B | 16B | 16B | 8B | 8B | 16B | 16B

8Bまたは16Bで示されるように以下の領域を示す各々はﾊﾞｲﾄまたはﾜｰﾄﾞ値です。

次の領域略名は図6-4.で使用されます。

  • SPTはｾｸﾀ総数/1ﾄﾗｯｸです。
  • BSHはﾃﾞｰﾀ配置区画容量を決めるﾃﾞｰﾀ配置区画ｼﾌﾄ数です。
  • BLMはﾃﾞｰﾀ配置区画ﾏｽｸ(2BSH-1)です。
  • EXMはﾃﾞｰﾀ配置区画容量とﾃﾞｨｽｸ区画数により決められる拡張ﾏｽｸです。
  • DSMはﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞの総記録容量を決めます。
  • DRMはこのﾄﾞﾗｲﾌﾞに記録できるﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ総数を決めます。
  • AL0とAL1は予約ﾃﾞｨﾚｸﾄ区画を決めます。
  • CKSはﾃﾞｨﾚｸﾄﾘ検査ﾍﾞｸﾀの容量です。
  • OFFは(論理)ﾃﾞｨｽｸの始めからの予約ﾄﾗｯｸ数です。

BSHとBLMはDPBに記入しないﾃﾞｰﾀ配置区画容量(BLS)を決めます。 設計者がBLSに対する値を選択したとすれば、BSHとBLMの値は表6-8.で示されます。

表 6-8. BSHとBLM値
BLS | BSH | BLM
1,024 | 3 | 7
2,048 | 4 | 15
4,096 | 5 | 31
8,192 | 6 | 63
16,384 | 7 | 127

全ての値は10進数です。 表6-9.で示されるようにEXMの値はBLSと、DSM値が256未満か256以上のどちらかの両方に依存します。

表 6-9. EXM値
BLS | EXM値
 | DSM<256 | DSM>255
1,024 | 0 | N/A
2,048 | 1 | 0
4,096 | 3 | 1
8,192 | 7 | 3
16,384 | 15 | 7

DSM値はこの特定ﾄﾞﾗｲﾌﾞによりｻﾎﾟｰﾄされるBLS単位で計った最大ﾃﾞｰﾀ配置区画番号です。 (DSM+1から)の結果はﾄﾞﾗｲﾌﾞにより保持される総ﾊﾞｲﾄ数で、物理ﾃﾞｨｽｸの容量内でなければならず、予約ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ ﾄﾗｯｸは数えません。

DRMはﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ総数-1の16ﾋﾞｯﾄ値です。 AL0とAL1の値はこのDRMにより決められます。 AL0とAL1値は図6-5.で示されるように併せて16ﾋﾞｯﾄ列と見なすことができます。

図 6-5. AL0とAL1
AL0 |  |  |  |  |  |  |  | AL1
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15

位置00はAL0と記されたﾊﾞｲﾄの最上位ﾋﾞｯﾄに対応し、15はAL1と記されたﾊﾞｲﾄの最下位ﾋﾞｯﾄに対応します。 各ﾋﾞｯﾄはﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ数に対してﾃﾞｰﾀ配置区画を予約し、従ってﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘに対して合計16区画の割り当てを許します(ﾋﾞｯﾄは00で始めを指定され、位置15まで右に満たされます)。 各ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘは32ﾊﾞｲﾄを占有し、次表に帰着します。

表 6-10. BLS対ｴﾝﾄﾘ数
BLS | 内包ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ数
1,024 | 32
2,048 | 64
4,096 | 128
8,192 | 256
16,384 | 512

従ってDRM=127(128ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ)でBLS=1024なら、配置区画当り32ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘで、4つの予約区画が必要です。 この場合、AL0の上位4ﾋﾞｯﾄが設定(=1)され、結果はAL0=0F0HとAL1=00Hです。

CKS値は次のように決められます。 ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞのﾒﾃﾞｨｱが可搬(ﾘﾑｰﾊﾞﾌﾞﾙ)なら、CKS=(DRM+1)/4で、DRMは最終ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ番号です。 ﾒﾃﾞｨｱが固定なら、CKS=0に設定します(この場合ﾃﾞｨﾚｸﾄﾘ ﾚｺｰﾄﾞは検査されない)。

最後にOFF領域は物理ﾃﾞｨｽｸの始めで飛び越すﾄﾗｯｸ数を決めます。 この値はSETTRKが呼ばれる時に必ず自動的に加えられ、予約したｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ ﾄﾗｯｸの飛び越し、または大きなﾃﾞｨｽｸをより小さな領域(ﾊﾟｰﾃｨｼｮﾝ)に分割するための機構として使用できます。

DPBの吟味を完全にするため、各種DPHはそれらのﾄﾞﾗｲﾌﾞ特性が同一なら、同じDPBをｱﾄﾞﾚｽ指定することができます。 加えて、BDOSはSELDSK機能が実施される時に必ず自身のﾛｰｶﾙ領域にDPB値を複写するので、新規ﾄﾞﾗｲﾌﾞが指定されるとき、DPHで単にﾎﾟｲﾝﾀを変更することによりDPBは動的に変更できます。

特定ﾃﾞｨｽｸに対するDPHに戻り、2つのｱﾄﾞﾚｽ値CSVとALVが残ります。 両ｱﾄﾞﾚｽはBIOSに続く未初期化のﾒﾓﾘ領域を参照します。 この領域は各ﾄﾞﾗｲﾌﾞに対して独立でなければならず、各領域の容量はDPB内の値により決められます。

CSVによりｱﾄﾞﾚｽ指定される領域の容量はこの特定ﾄﾞﾗｲﾌﾞに対してﾃﾞｨﾚｸﾄﾘ検査情報を保持するに充分なCKSﾊﾞｲﾄです。 CKS=(DRM+1)/4なら、ﾃﾞｨﾚｸﾄﾘ検査使用のために(DRM+1)/4ﾊﾞｲﾄを予約しなければなりません。 CKS=0なら、保存場所は予約されません。

ALVによりｱﾄﾞﾚｽ指定される領域の容量はこの特定ﾃﾞｨｽｸに対して許された最大配置区画数により決められ、(DSM/8)+1として計算されます。

追補Bで示されるCBIOSは標準単密度8ｲﾝﾁ ﾄﾞﾗｲﾌﾞに対するこれらのﾃｰﾌﾞﾙの例を実際に示します。 このﾌﾟﾛｸﾞﾗﾑを調べ、上で与えられた定義と表値を比較することが有用かもしれません。

B-A_Skeletal_CBIOS.htm F-CP-M_Disk_Definition_Library.htm


付録 6.11 DISKDEF ﾏｸﾛ ﾗｲﾌﾞﾗﾘ

(追補Fで示される)DISKDEFと呼ぶﾏｸﾛ ﾗｲﾌﾞﾗﾘはﾃｰﾌﾞﾙ作成手順を大幅に簡素化します。 利用者はMACﾏｸﾛ ｱｾﾝﾌﾞﾗにｱｸｾｽしなければならず、勿論DISKDEF機能を使用するために、と同時にこのﾏｸﾛ ﾗｲﾌﾞﾗﾘは全てのCP/M 2配布ﾃﾞｨｽｸに含められます。

BIOSのﾃﾞｨｽｸ定義は次の一連のﾏｸﾛ行から成ります。

    MACLIB	DISKDEF

    DISKS	n
    DISKDEF	0,～
    DISKDEF	1,～
    ～
    DISKDEF	n-1

    ENDEF
MACLIB 行はBIOSと同じﾃﾞｨｽｸで DISKDEF.LIB をMACの内部ﾃｰﾌﾞﾙ内に読み込みます。 続く DISKS ﾏｸﾛ呼び出しは使用者のｼｽﾃﾑで設定すべきﾄﾞﾗｲﾌﾞ数を指定し、n は1～16範囲の整数です。 その後に続く一連の DISKDEF ﾏｸﾛ呼び出しは各論理ﾃﾞｨｽｸの特性を定義し、0～n-1が論理ﾄﾞﾗｲﾌﾞA～Pに対応します。 DISKS と DISKDEF ﾏｸﾛは6.10節で記述に従って決まったﾃﾞｰﾀ ﾃｰﾌﾞﾙを生成し、従ってBIOSの非実行部分、一般的にはBIOSｼﾞｬﾝﾌﾟ ﾃｰﾌﾞﾙ直後に配置されなければなりません。

BIOSの残りの部分は後続のDISKDEFﾏｸﾛとEND行の直前のENDEFﾏｸﾛ呼び出しで定義されます。 ENDEF(End of Diskdef)ﾏｸﾛはBIOSの上位ﾒﾓﾘに配置される必要な未初期化のRAM領域を生成します。

DISKDEFは次の形式を採ります。

    DISKDEF	dn,fsc,lsc,[skf],bls dks,dir,cks,ofs,[0]
  • dn は0～n-1の論理ﾃﾞｨｽｸ番号です。
  • fsc は最初の物理ｾｸﾀ番号(0または1)です。
  • lsc は最後のｾｸﾀ番号です。
  • skf は任意選択のｾｸﾀ ｽｷｭｰ値です。
  • bls はﾃﾞｰﾀ配置区画容量です。
  • dks はﾃﾞｨｽｸの配置区画数です。
  • dir はﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ数です。
  • cks は検査されるﾃﾞｨﾚｸﾄﾘのﾁｪｯｸｻﾑ容量です。
  • ofs は論理ﾄﾗｯｸ0に対するﾄﾗｯｸ偏移です。
  • [0] は任意選択1.4互換ﾌﾗｸﾞです。

dn 値はこのDISKDEF ﾏｸﾛの実施で定義されるﾄﾞﾗｲﾌﾞ番号です。 fsc ﾊﾟﾗﾒｰﾀは異なるｾｸﾀ番号付けのｼｽﾃﾑに対する清算で、通常0または1です。 lsc はﾃﾞｨｽｸの最終ｾｸﾀ番号です。 存在するなら、skf ﾊﾟﾗﾒｰﾀはｾｸﾀ ｽｷｭｰ値を定義し、ｽｷｭｰに従ったｾｸﾀ変換ﾃｰﾌﾞﾙを作成するために使用されます。

ｾｸﾀ数が256未満ならば、1ﾊﾞｲﾄのﾃｰﾌﾞﾙが作成され、さもなければ変換ﾃｰﾌﾞﾙの各要素は2ﾊﾞｲﾄを占有します。 skf ﾊﾟﾗﾒｰﾀが省略されるか、または0と等しい場合、変換ﾃｰﾌﾞﾙは作成されません。

bls ﾊﾟﾗﾒｰﾀは各配置区画に割り当てるﾊﾞｲﾄ数を指定し、1024, 2048, 4096, 8192, 16384の値を採ります。 普通、ﾃﾞｨﾚｸﾄﾘ参照がより少なくなり、論理的に繋がったﾃﾞｰﾀ ﾚｺｰﾄﾞが物理的にﾃﾞｨｽｸに近づくので、性能はより大きな配置区画で増加します。 更に各ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘはより大きなﾃﾞｰﾀをｱﾄﾞﾚｽ指定し、BIOSの常駐RAM空間は減じられます。

dks ﾊﾟﾗﾒｰﾀはbls 単位での総ﾃﾞｨｽｸ容量を指定します。 ここでbls =2048、dks =1000なら、総ﾃﾞｨｽｸ容量は2,048,000(2M)ﾊﾞｲﾄです。 dks が256以上なら、配置区画容量 bls ﾊﾟﾗﾒｰﾀは1024以上でなければなりません。 dir の値はﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘの総数で、望まれれば255を越えるかもしれません。

cks ﾊﾟﾗﾒｰﾀは各ﾃﾞｨﾚｸﾄﾘ走査で検査するためのﾃﾞｨﾚｸﾄﾘ項目数を決め、ｼｽﾃﾑ動作中のﾃﾞｨｽｸ変更の検出のため、内部的に使用され、ｺｰﾙﾄﾞまたはｳｫｰﾑ開始での介在は起きません。 この状態が検知されると、CP/Mはﾃﾞｰﾀが後で破壊されないようにそのﾃﾞｨｽｸを読み込み専用に標します。

ﾌﾛｯﾋﾟｰ ﾃﾞｨｽｸ補助ｼｽﾃﾑの場合のように途中で容易に変更される時の cks と dir値は直前の記述での状態のようです。 ﾃﾞｨｽｸが恒久的に配置されるならば、再開始を除いてﾃﾞｨｽｸ変更の可能性が低いため、cks の値は代表的には0です。

ofs 値はこの特定ﾄﾞﾗｲﾌﾞがｱﾄﾞﾚｽ指定される時に飛び越すﾄﾗｯｸ数を決め、付加的なｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ領域の予約、または単一大容量物理ﾄﾞﾗｲﾌﾞでの多くの論理ﾄﾞﾗｲﾌﾞの偽装に使用できます。 最後に、[0] ﾊﾟﾗﾒｰﾀは1.4版でのﾌｧｲﾙ互換性が必要とされる時に含めれら、より高密度のﾃﾞｨｽｸに対して修正されます。 このﾊﾟﾗﾒｰﾀは以前版の場合でのように各ﾃﾞｨﾚｸﾄﾘ ﾚｺｰﾄﾞについて16Kだけが割り当てられることを保証します。 一般的にこのﾊﾟﾗﾒｰﾀは含められません。

利便性と節約のために特殊形式

    DISKDEF	i,j
は前で定義したﾄﾞﾗｲﾌﾞ j と同じ特性をﾄﾞﾗｲﾌﾞ i に与えます。 1.4版と互換性のある標準単密度4ﾄﾞﾗｲﾌﾞのｼｽﾃﾑは次のﾏｸﾛ実施を使用することで定義されます。
    DISKS	4
    DISKDEF	0,1,26,6,1024,243,64,2
    DISKDEF	1,0
    DISKDEF	2,0
    DISKDEF	3,0
    ～
    ENDEF
全てのﾃﾞｨｽｸは1～26までの番号の26ｾｸﾀ/1ﾄﾗｯｸ、各ｱｸｾｽ間で6ｾｸﾀ飛び越し、ﾃﾞｰﾀ配置区画1024ﾊﾞｲﾄ、ﾃﾞｨｽｸ総容量243Kﾊﾞｲﾄに対する243配置区画数、検査ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ数64、2つのｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ ﾄﾗｯｸの同じﾊﾟﾗﾒｰﾀを持ちます。

DISKS ﾏｸﾛはﾏｸﾛにより生成されたDPHﾃｰﾌﾞﾙ ｱﾄﾞﾚｽDPBASEから始まるn個のDPHを生成します。 各ﾃﾞｨｽｸ ﾍｯﾀﾞ(DPH)領域は上で記述したようにﾄﾞﾗｲﾌﾞで定義した各々に1対1に対応する16ﾊﾞｲﾄを含みます。 例えば4ﾄﾞﾗｲﾌﾞの標準ｼｽﾃﾑで、DISKS ﾏｸﾛは次の形式のﾃｰﾌﾞﾙを生成します。

DPBASE	EQU	$
DPH0:	DW	XLT0,0000H,0000H,0000H,DIRBUF,DPB0,CSV0,ALV0
DPH1:	DW	XLT0,0000H,0000H,0000H,DIRBUF,DPB0,CSV1,ALV1
DPH2:	DW	XLT0,0000H,0000H,0000H,DIRBUF,DPB0,CSV2,ALV2
DPH3:	DW	XLT0,0000H,0000H,0000H,DIRBUF,DPB0,CSV3,ALV3
DPH ﾗﾍﾞﾙは0～3の各ﾄﾞﾗｲﾌﾞのﾃｰﾌﾞﾙ ｱﾄﾞﾚｽの先頭を示す参照目的のために含められます。 DPH 内に含めれられた値は6.10節で詳細に記述されます。 検査と割り当てﾍﾞｸﾀのｱﾄﾞﾚｽは ENDEF ﾏｸﾛによりBIOSのｺｰﾄﾞとﾃｰﾌﾞﾙに続くRAM領域に生成されます。

skf (ｽｷｭｰ値)ﾊﾟﾗﾒｰﾀが省略または0に等しい場合、変換ﾃｰﾌﾞﾙが省略され、そのﾃﾞｨｽｸ用の DPH の XLT 位置に0000Hが挿入されます。 論理→物理変換を実行するための後続する呼び出しで、SECTRANはDE=0000Hの変換ﾃｰﾌﾞﾙ ｱﾄﾞﾚｽを受け取り、単にBCからの元の論理ｾｸﾀをHLﾚｼﾞｽﾀ対に返します。

変換ﾃｰﾌﾞﾙは skf ﾊﾟﾗﾒｰﾀが存在する場合に構築され、(非0000Hの)ﾃｰﾌﾞﾙ ｱﾄﾞﾚｽは対応する DPH 内に配置Ｓれます。 例えば次は DISKDEF ﾏｸﾛ呼び出しで標準ｽｷｭｰ値(skf =6)が指定される時に構築されます。

XLT0:	DB	1,7,13,19,25,5,11,17,23,3,9,15,21
    DB	2,8,14,20,26,6,12,18,24,4,10,16,22
後続の ENDEF ﾏｸﾛ呼び出しでいくつかの未初期化ﾃﾞｰﾀ領域が定義されます。 これらのﾃﾞｰﾀ領域はｺｰﾙﾄﾞ開始で読み込まれるBIOS部分に必要ありませんが、BIOSとﾒﾓﾘの最後の間で利用可能でなければなりません。 未初期化RAM領域の容量は ENDEF ﾏｸﾛにより生成された EQU 行により決められます。 標準4ﾄﾞﾗｲﾌﾞ ｼｽﾃﾑに対し、ENDEF ﾏｸﾛは次の EQU 行を生成するかもしれません。
4C72 =	BEGDAT	EQU	$	(ﾃﾞｰﾀ領域)
4DB0 =	ENDDAT	EQU	$
013C =	DATSIZ	EQU	$-BEGDAT
これは未初期化RAMが4C72H番地で始まり、4DB0H-1で終わり、013CHﾊﾞｲﾄ占有することを示します。 ｼｽﾃﾑが読み込まれた後でこれらのｱﾄﾞﾚｽが使用について自由なことを保証しなければなりません。

STATﾌﾟﾛｸﾞﾗﾑはﾄﾞﾗｲﾌﾞ情報を解くためにﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸをを使用するので、修正後にﾄﾞﾗｲﾌﾞ特性を検査するためにSTATﾌﾟﾛｸﾞﾗﾑが使用できます。

STAT d:DSK:
形式のSTAT命令は d ﾄﾞﾗｲﾌﾞ(d=A,～,P)に対するﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸを解き、次の値を表示します。
r: 128-byte record capacity
k: kilobyte drive capacity
d: 32-byte directory entries
c: checked directory entries
e: records/extent
b: records/block
s: sectors/track
t: reserved tracks
DISKDEFﾏｸﾛ実施の3つの例が対応するSTATﾊﾟﾗﾒｰﾀ値と共に以下で示されます。 最後の例は最大の8Mﾊﾞｲﾄ ｼｽﾃﾑを生成します。
    DISKDEF 0,1,58,,2048,256,128,128,2
r=4096, k=512, d=128, c=128, e=256, b=16, s=58, t=2
    DISKDEF 0,1,58,,2048,1024,300,0,2
r=16348, k=2048, d=300, c=0, e=128, b=16, s=58, t=2
    DISKDEF 0,1,58,,16348,512,128,128,2
r=65536, k=8192, d=128, c=128, e=1024, b=128, s=58, t=2


付録 6.12 ｾｸﾀの合成と分解

BIOS WRITE移行点への各呼び出しで、複数の基本128ﾊﾞｲﾄ単位のｾｸﾀ容量を持つ多くのﾃﾞｨｽｸ補助ｼｽﾃﾑに効率的なｾｸﾀの合成と分解を許す情報をCP/M BDOSは含みます。 ここでの目的は自動的に操作を実行するためのBDOS情報を使用してBIOS内に含めることができる汎用ｱﾙｺﾞﾘｽﾞﾑを示すことです。

WRITEへの各呼び出しでBDOSはCﾚｼﾞｽﾀで次の情報を提供します。

0 | 一般ｾｸﾀ書き込み
1 | ﾃﾞｨﾚｸﾄﾘ ｾｸﾀ書き込み
2 | 新規配置区画の先頭ｾｸﾀ書き込み

0の状態はﾗﾝﾀﾞﾑ動作ﾚｺｰﾄﾞの更新(書き込みが未割り当て区画の先頭以外のその他の時、または書き込みがﾃﾞｨﾚｸﾄﾘ領域内でない時)のように次の書き込み操作が以前に書かれた領域内の時に必ず起こります。 1の状態はﾃﾞｨﾚｸﾄﾘ領域内への書き込みが実行される時に起きます。 2の状態は新たに割り当てられたﾃﾞｰﾀ区画の先頭ﾚｺｰﾄﾞが書かれる時だけ起きます。 多くの場合、応用ﾌﾟﾛｸﾞﾗﾑは連なる複数の128ﾊﾞｲﾄ ｾｸﾀを読み書きし、従ってﾚｺｰﾄﾞ書き込み時に事前読み込み操作は無効にできるのでﾚｺｰﾄﾞの合成と分解時にどちらにも小さなｵｰﾊﾞｰﾍｯﾄﾞが伴われます。

追補Gは骨子形の合成と分解ｱﾙｺﾞﾘｽﾞﾑを示します。 このﾌｧｲﾙはCP/Mﾃﾞｨｽｸに含まれます。 一般的にこのｱﾙｺﾞﾘｽﾞﾑはﾎｽﾄ ﾃﾞｨｽｸのｾｸﾀ容量の中間ﾊﾞｯﾌｧを通すﾎｽﾄ ﾃﾞｨｽｸ上の読み込み操作でCP/Mｾｸﾀを写し取ります。 このﾌﾟﾛｸﾞﾗﾑを通して検索に伴うCP/Mｾｸﾀに関係する値と変数は接頭語がSEKで、一方ﾎｽﾄ ﾃﾞｨｽｸ ｼｽﾃﾑに関係したそれらは接頭語がHSTです。 追補Gの24行目から始まるEQU行はCP/Mとﾎｽﾄ ｼｽﾃﾑ間の割り当てを定義し、見本ﾎｽﾄ ｼｽﾃﾑ以外が含まれる場合、変更されなければなりません。

移行点BOOTとWBOOTは48行目から始まる初期化ｺｰﾄﾞを含まなければならず、一方移行点SELDSKは67行目の始めでｺｰﾄﾞを増やさなければなりません。 移行点SELDSKがﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ ｱﾄﾞﾚｽを計算して返すとは言え、それはこの場所でﾎｽﾄ ﾃﾞｨｽｸを物理的に選択しないことに注意してください(それはREADHSTまたはWRITEHSTで遅れて選択されます)。 加えてSETTRKとSETDMAは単に値を保存しますが、この場所で他のどんな動作もしません。 SECTRANは物理ｾｸﾀ番号を返す些細な機能を実行します。

本質的な移行点はREADとWRITEで、各々119行目と133行目で始まります。 これらのｻﾌﾞﾙｰﾁﾝが前のREADとWRITEに代わります。

実際の物理的な読みまたは書きは全ての値が用意されてしまったREADHSTまたはWRITEHSTのどちらか起き、HSTDSKはﾎｽﾄ ﾃﾞｨｽｸ番号、HSTTRKはﾎｽﾄ ﾄﾗｯｸ番号、HSTSECは物理ｾﾝﾀ番号への変換が必要かもしれないﾎｽﾄ ｾｸﾀ番号です。 HSTSIZ長のHSTBUFでﾊﾞｯﾌｧに対して完全なｾｸﾀの読みまたは書きを実行するためのｺｰﾄﾞをこの場所に挿入しなければなりません。 他の全ての写し取る機能はこのｱﾙｺﾞﾘｽﾞﾑにより実行されます。

特にこのｱﾙｺﾞﾘｽﾞﾑは元の128ﾊﾞｲﾄ ｾｸﾀ用に設定された80Mﾊﾞｲﾄのﾊｰﾄﾞ ﾃﾞｨｽｸを使用して検査され、ﾌｫｰﾏｯﾄした記録装置でおよそ35Mﾊﾞｲﾄを生み出します。 512ﾊﾞｲﾄ ﾎｽﾄ ｾｸﾀ用に設定したとき、全部に渡る応答での400%相当の改善と、使用可能な記録域が57Mﾊﾞｲﾄに増加しました。 この状態でこれらは未だ128ﾊﾞｲﾄ ｾｸﾀを維持する使用者ﾌﾟﾛｸﾞﾗﾑの利用でｾｸﾀ分解でのｵﾊﾞｰﾍｯﾄﾞの影響が表れません。 これは基本的に事前読み込み操作に対する必要性を無くすBDOSによって提供した情報のためです。


付録 追補A MDS基本I/Oｼｽﾃﾑ(BIOS)

     1			; CP/M 2.2用MDS-800 I/Oﾄﾞﾗｲﾊﾞ(単密度4ﾄﾞﾗｲﾌﾞ版)
     2			; Ver. 2.2 (1980年2月)
     3

     4	0016 =		VERS	EQU	22		;
ﾊﾞｰｼﾞｮﾝ2.2
     5

     6			; Copyright (C) 1980 DIGITAL RESEARCH
     7

     8	FFFF =		TRUE	EQU	-1		;
真値(0FFFFH)
     9	0000 =		FALSE	EQU	NOT TRUE	;
偽値(0000H)
    10	0000 =		TEST	EQU	FALSE		;
試験用BIOSならTRUE
    11

    12				IF	TEST

    13			BIAS	EQU	03400H		;
試験ｼｽﾃﾑでのCCP基準ｱﾄﾞﾚｽ
    14				ENDIF

    15				IF	NOT TEST

    16	0000 =		BIAS	EQU	0000H		;
再配置可能なCP/Mｼｽﾃﾑ生成用
    17				ENDIF

    18

    19	1600 =		PATCH	EQU	1600H

    20

    21	1600			ORG	PATCH

    22	0000 =		CPMB	EQU	$-PATCH		;
相対CCP基準位置
    23	0806 =		BDOS	EQU	806H+CPMB	;
相対BDOS基準位置(常駐部)
    24	1600 =		CPML	EQU	$-CPMB		;
CP/Mｼｽﾃﾑ長(ﾊﾞｲﾄ)
    25	002C =		NSECTS	EQU	CPML/128	;
CP/M用読み込みｾｸﾀ数
    26	0002 =		OFFSET	EQU	2		;
CP/Mで使用するﾃﾞｨｽｸ ﾄﾗｯｸ数
    27	0004 =		CDISK	EQU	0004H		;
ｳｫｰﾑ開始での最終登録ﾃﾞｨｽｸ値のｱﾄﾞﾚｽ
    28	0080 =		BUFF	EQU	0080H		;
既定転送ﾊﾞｯﾌｧｱﾄﾞﾚｽ
    29	000A =		RETRY	EQU	10		;
ｴﾗｰ前のﾃﾞｨｽｸ入出力最大再試行数
    30

    31			; 次の機能を実行
    32			; BOOT		ｺｰﾙﾄﾞ開始
    33			; WBOOT		ｳｫｰﾑ開始(I/Oﾊﾞｲﾄ保存)
    34			; (MDSに対するBOOTとWBOOTは同じです。)
    35			; CONST		ｺﾝｿｰﾙ状態取得(Aﾚｼﾞｽﾀ:有り=-1/無し=0
    36			; CONIN		ｺﾝｿｰﾙ文字入力(Aﾚｼﾞｽﾀに結果)
    37			; CONOUT	ｺﾝｿｰﾙ文字出力(Cﾚｼﾞｽﾀの文字)
    38			; LIST		ﾘｽﾄ出力(Cﾚｼﾞｽﾀの文字)
    39			; PUNCH		ﾊﾟﾝﾁ出力(Cﾚｼﾞｽﾀの文字)
    40			; READER	紙ﾃｰﾌﾟ ﾘｰﾀﾞ入力(Aﾚｼﾞｽﾀに結果)
    41			; HOME		ﾄﾗｯｸ0へ移動
    42			;

    43			; (次の呼び出しは後続のREADとWRITEの実行で使用されるMDSに対するI/Oﾊﾟﾗﾒｰﾀ部を設定します。)
    44			; SELDSK	Cﾚｼﾞｽﾀ(0,1,～)で与えられるﾃﾞｨｽｸを選択
    45			; SETTRK	後続のREAD/WRITEに対するﾄﾗｯｸ番号(0～76)を設定
    46			; SETSEC	後続のREAD/WRITEに対するﾄﾗｯｸ番号(1～26)を設定
    47			; SETDMA	後続のDMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽを設定(初期値0080H)
    48			;

    49			; (READとWRITEはI/Oﾊﾟﾗﾒｰﾀの設定を直前に呼び出すと仮定します。)
    50			; READ		TRACK/SECTORを予め設定したDMAｱﾄﾞﾚｽへ読みます。
    51			; WRITE		予め設定したDMAｱﾄﾞﾚｽからTRACK/SECTORに書きます。
    52

    53			;	( 個別ﾙｰﾁﾝ用ｼﾞｬﾝﾌﾟ ﾍﾞｸﾀ )
    54

    55	1600 C3B316		JP	BOOT

    56	1603 C3C316	WBOOTE:	JP	WBOOT

    57	1606 C36117		JP	CONST

    58	1609 C36417		JP	CONIN

    59	160C C36A17		JP	CONOUT

    60	160F C36D17		JP	LIST

    61	1612 C37217		JP	PUNCH

    62	1615 C37517		JP	READER

    63	1618 C37817		JP	HOME

    64	161B C37D17		JP	SELDSK

    65	161E C3A717		JP	SETTRK

    66	1621 C3AC17		JP	SETSEC

    67	1624 C3BB17		JP	SETDMA

    68	1627 C3C117		JP	READ

    69	162A C3CA17		JP	WRITE

    70	162D C37017		JP	LISTST		;
ﾘｽﾄ状態取得
    71	1630 C3B117		JP	SECTRAN

    72			;

    73			MACLIB	DISKDEF			;
ﾃﾞｨｽｸ定義ﾏｸﾛ ﾗｲﾌﾞﾗﾘ読み込み
    74			DISKS	4			;
ﾃﾞｨｽｸ数=4
    75	1633+=		DPBASE	EQU	$		;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ部基準ｱﾄﾞﾚｽ
    76	1633+82160000	DPH0:	DW	XLT0,0000H	;
変換ﾃｰﾌﾞﾙ ｱﾄﾞﾚｽ, BDOS記録域
    77	1637+00000000		DW	0000H,0000H	;
BDOS記録域, BDOS記録域
    78	163B+6E187316		DW	DIRBUF,DPB0	;
ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ ｱﾄﾞﾚｽ, ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部ｱﾄﾞﾚｽ
    79	163F+0D19EE18		DW	CSV0,ALV0	;
検査ﾍﾞｸﾀ ｱﾄﾞﾚｽ, 配置ﾍﾞｸﾀ ｱﾄﾞﾚｽ
    80	1643+82160000	DPH1:	DW	XLT1,0000H	;
(以下上記同様)
    81	1647+00000000		DW	0000H,0000H	;

    82	164B+6E187316		DW	DIRBUF,DPB1	;

    83	164F+3C191D19		DW	CSV1,ALV1	;

    84	1653+82160000	DPH2:	DW	XLT2,0000H	;

    85	1657+00000000		DW	0000H,0000H	;

    86	165B+6E187316		DW	DIRBUF,DPB2	;

    87	165F+6B194C19		DW	CSV2,ALV2	;

    88	1663+82160000	DPH3:	DW	XLT3,0000H	;

    89	1667+00000000		DW	0000H,0000H	;

    90	166B+6E187316		DW	DIRBUF,DPB3	;

    91	166F+9A197B19		DW	CSV3,ALV3	;

    92			DISKDEF	0,1,26,6,1024,243,64,64,OFFSET

    93	1673+=		DPB0	EQU	$		;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部基準ｱﾄﾞﾚｽ
    94	1673+1A00		DW	26		;
ｾｸﾀ数/1ﾄﾗｯｸ
    95	1675+03			DB	3		;
配置区画ｼﾌﾄ数
    96	1676+07			DB	7		;
配置区画ﾏｽｸ
    97	1677+00			DB	0		;
拡張ﾏｽｸ
    98	1678+F200		DW	242		;
配置区画単位ﾃﾞｨｽｸ容量-1
    99	167A+3F00		DW	63		;
最大ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ番号
   100	167C+C0			DB	192		;
ﾃﾞｨﾚｸﾄﾘ用予約配置区画0
   101	167D+00			DB	0		;
ﾃﾞｨﾚｸﾄﾘ用予約配置区画1
   102	167E+1000		DW	16		;
検査容量
   103	1680+0200		DW	2		;
予約ﾄﾗｯｸ数
   104	1682+=		XLT0	EQU	$		;
ｾｸﾀ変換ﾃｰﾌﾞﾙ基準ｱﾄﾞﾚｽ
   105	1682+01			DB	1		;
0
   106	1683+07			DB	7		;
1
   107	1684+0D			DB	13		;
2
   108	1685+13			DB	19		;
3
   109	1686+19			DB	25		;
4
   110	1687+05			DB	5		;
5
   111	1688+0B			DB	11		;
6
   112	1689+11			DB	17		;
7
   113	168A+17			DB	23		;
8
   114	168B+03			DB	3		;
9
   115	168C+09			DB	9		;
10
   116	168D+0F			DB	15		;
11
   117	168E+15			DB	21		;
12
   118	168F+02			DB	2		;
13
   119	1690+08			DB	8		;
14
   120	1691+0E			DB	14		;
15
   121	1692+14			DB	20		;
16
   122	1693+1A			DB	26		;
17
   123	1694+06			DB	6		;
18
   124	1695+0C			DB	12		;
19
   125	1696+12			DB	18		;
20
   126	1697+18			DB	24		;
21
   127	1698+04			DB	4		;
22
   128	1699+0A			DB	10		;
23
   129	169A+10			DB	16		;
24
   130	169B+16			DB	22		;
25
   131			DISKDEF	1,0			;
ﾄﾞﾗｲﾌﾞ1は0と同じ
   132	1673+=		DPB1	EQU	DPB0		;

   133	001F+=		ALS1	EQU	ALS0		;
配置区画ﾍﾞｸﾀ ﾃｰﾌﾞﾙ容量(ﾏｸﾛ内で値設定)
   134	0010+=		CSS1	EQU	CSS0		;
検査ﾍﾞｸﾀ ﾃｰﾌﾞﾙ容量(ﾏｸﾛ内で値設定)
   135	1682+=		XLT1	EQU	XLT0		;

   136			DISKDEF	2,0			;
ﾄﾞﾗｲﾌﾞ2は0と同じ
   137	1673+=		DPB2	EQU	DPB0		;

   138	001F+=		ALS2	EQU	ALS0		;
配置区画ﾍﾞｸﾀ ﾃｰﾌﾞﾙ容量(ﾏｸﾛ内で値設定)
   139	0010+=		CSS2	EQU	CSS0		;
検査ﾍﾞｸﾀ ﾃｰﾌﾞﾙ容量(ﾏｸﾛ内で値設定)
   140	1682+=		XLT2	EQU	XLT0		;

   141			DISKDEF	3,0			;
ﾄﾞﾗｲﾌﾞ3は0と同じ
   142	1673+=		DPB3	EQU	DPB0		;

   143	001F+=		ALS3	EQU	ALS0		;
配置区画ﾍﾞｸﾀ ﾃｰﾌﾞﾙ容量(ﾏｸﾛ内で値設定)
   144	0010+=		CSS3	EQU	CSS0		;
検査ﾍﾞｸﾀ ﾃｰﾌﾞﾙ容量(ﾏｸﾛ内で値設定)
   145	1682+=		XLT3	EQU	XLT0		;

   146			; ENDEFはｱｾﾝﾌﾞﾙの最後で起きます。
   147			;

   148			; ｺｰﾄﾞに関係しない最後の部分を除き、残りのｻﾌﾞﾙｰﾁﾝは特定動作環境用です。
   149			; Intel MDSと異なるどのｼｽﾃﾑについても変更されなければなりません。
   150

   151			; 次のｺｰﾄﾞはMDSﾓﾆﾀが0F800Hに存在し、このﾓﾆﾀ内の入出力ｻﾌﾞﾙｰﾁﾝを使用する仮定です。
   152			; MDSｼｽﾃﾑは4ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞを持つとの仮定でもあります。
   153

   154	00FD =		REVRT	EQU	0FDH		;
割り込み復帰ﾎﾟｰﾄ
   155	00FC =		INTC	EQU	0FCH		;
割り込みﾏｽｸ ﾎﾟｰﾄ
   156	00F3 =		ICON	EQU	0F3H		;
割り込み制御ﾎﾟｰﾄ
   157	007E =		INTE	EQU	01111110B	;
RST 7 (ﾓﾆﾀ),RST 0(ｳｫｰﾑ ﾌﾞｰﾄ)許可
   158

   159			;	MDSﾓﾆﾀ定義
   160

   161	F800 =		MON80	EQU	0F800H		;
MDSﾓﾆﾀ
   162	FF0F =		RMON80	EQU	0FF0FH		;
再始動MON80(ﾌﾞｰﾄ ｴﾗｰ)
   163	F803 =		CI	EQU	0F803H		;
ｺﾝｿｰﾙ文字Aﾚｼﾞｽﾀ入力
   164	F806 =		RI	EQU	0F806H		;
ﾘｰﾀﾞからAﾚｼﾞｽﾀ入力
   165	F809 =		CO	EQU	0F809H		;
Cﾚｼﾞｽﾀの文字ｺﾝｿｰﾙ出力
   166	F80C =		PO	EQU	0F80CH		;
Cﾚｼﾞｽﾀの文字ﾊﾟﾝﾁ装置出力
   167	F80F =		LO	EQU	0F80FH		;
Cﾚｼﾞｽﾀの文字ﾘｽﾄ装置出力
   168	F812 =		CSTS	EQU	0F812H		;
ｺﾝｿｰﾙ状態(-1/0)Aﾚｼﾞｽﾀ取得
   169

   170			;	ﾃﾞｨｽｸ用ﾎﾟｰﾄと命令
   171

   172	0078 =		BASE	EQU	78H		;
ﾃﾞｨｽｸ命令I/Oﾎﾟｰﾄ基準ｱﾄﾞﾚｽ
   173	0078 =		DSTAT	EQU	BASE		;
ﾃﾞｨｽｸ状態情報(入力)
   174	0079 =		RTYPE	EQU	BASE+1		;
結果種別(入力)
   175	007B =		RBYTE	EQU	BASE+3		;
結果ﾊﾞｲﾄ(入力)
   176			;

   177	0079 =		ILOW	EQU	BASE+1		;
IOPB下位ｱﾄﾞﾚｽ(出力)
   178	007A =		IHIGH	EQU	BASE+2		;
IOPB上位ｱﾄﾞﾚｽ(出力)
   179			;

   180	0004 =		READF	EQU	4H		;
読み出し命令
   181	0006 =		WRITF	EQU	6H		;
書き込み命令
   182	0003 =		RECAL	EQU	3H		;
ﾄﾞﾗｲﾌﾞ再校正命令
   183	0004 =		IORDY	EQU	4H		;
I/O操作完了検査ﾏｽｸ
   184

   185	000D =		CR	EQU	0DH		;
ｷｬﾘｯｼﾞ ﾘﾀｰﾝ
   186	000A =		LF	EQU	0AH		;
ﾗｲﾝ ﾌｨｰﾄﾞ
   187

   188	169C 0D0A0A	SIGNON:	DB	CR,LF,LF	;
xxK CP/M Vers y.y登録文字列
   189				IF	TEST

   190				DB	'32'		;
32K(試験BIOS時)
   191				ENDIF

   192				IF	NOT TEST

   193	169F 3030		DB	'00'		;
再配置時にﾒﾓﾘ容量を設定
   194				ENDIF

   195	16A1 6B2043502F		DB	'k CP/M vers '

   196	16AD 322E32		DB	VERS/10+'0','.',VERS MOD 10+'0'

   197	16B0 0D0A00		DB	CR,LF,0

   198

   199			;	* 登録ﾒｯｾｰｼﾞ表示とCCPへ移行(注: MDSは0003HのIOBYTEを初期化してﾌﾞｰﾄ) *
   200

   201	16B3 310001	BOOT:	LD	SP,BUFF+128	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化
   202	16B6 219C16		LD	HL,SIGNON	;
登録ﾒｯｾｰｼﾞ文字列基準ﾎﾟｲﾝﾀ取得
   203	16B9 CDD317		CALL	PRMSG		;
登録ﾒｯｾｰｼﾞ表示
   204	16BC AF			XOR	A		;
0値取得
   205	16BD 320400		LD	(CDISK),A	;
現Aﾄﾞﾗｲﾌﾞ設定
   206	16C0 C30F17		JP	GOCPM		;
CP/Mへ移行
   207

   208			;	* CP/M再読み込み(ｺｰﾙﾄﾞ ﾛｰﾀﾞが仮定されるﾄﾗｯｸ0,ｾｸﾀ1を飛ばし) *
   209

   210	16C3 318000	WBOOT:	LD	SP,BUFF		;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化(0080H～00FFHはDMA使用可)
   211			;

   212	16C6 0E0A		LD	C,RETRY		;
再試行ｶｳﾝﾀ初期化
   213	16C8 C5			PUSH	BC		;
再試行ｶｳﾝﾀ一時保存
   214			:

   215	16C9 010000	WBOOT0:	LD	BC,CPMB		;
ｼｽﾃﾑ開始ｱﾄﾞﾚｽ取得
   216	16CC CDBB17		CALL	SETDMA		;
ｼｽﾃﾑ開始ｱﾄﾞﾚｽをDMAｱﾄﾞﾚｽに設定
   217	16CF 0E00		LD	C,0		;
Aﾄﾞﾗｲﾌﾞ番号取得
   218	16D1 CD7D17		CALL	SELDSK		;
Aﾄﾞﾗｲﾌﾞ選択
   219	16D4 0E00		LD	C,0		;
開始ﾄﾗｯｸ番号取得
   220	16D6 CDA717		CALL	SETTRK		;
ﾄﾗｯｸ番号初期化(=0)
   221	16D9 0E02		LD	C,2		;
開始ｾｸﾀ番号取得
   222	16DB CDAC17		CALL	SETSEC		;
ｾｸﾀ番号初期化(=2)
   223

   224			;	( 連続ｾｸﾀ読み込み )
   225

   226	16DE C1			POP	BC		;
再試行ｶｳﾝﾀ復帰
   227	16DF 062C		LD	B,NSECTS	;
ｾｸﾀ数ｶｳﾝﾀ初期化
   228			;

   229	16E1 C5		RDSEC:	PUSH	BC		;
ｾｸﾀ数ｶｳﾝﾀと再試行ｶｳﾝﾀ一時保存
   230	16E2 CDC117		CALL	READ		;
対応ｾｸﾀ読み込み
   231	16E5 C24917		JP	NZ,BOOTER	;
失敗で分岐
   232			;

   233	16E8 2A6C18		LD	HL,(IOD)	;
現DMAｱﾄﾞﾚｽ値取得
   234	16EB 118000		LD	DE,128		;
ﾊﾞｲﾄ数/1ｾｸﾀ値取得
   235	16EE 19			ADD	HL,DE		;
DMAｱﾄﾞﾚｽ進行(+1ｾｸﾀ分)
   236	16EF 44			LD	B,H		;
DMAｱﾄﾞﾚｽ上位複写
   237	16F0 4D			LD	C,L		;
DMAｱﾄﾞﾚｽ下位複写
   238	16F1 CDBB17		CALL	SETDMA		;
次DMAｱﾄﾞﾚｽ設定
   239	16F4 3A6B18		LD	A,(IOS)		;
ｾｸﾀ番号取得
   240	16F7 FE1A		CP	26		;
ﾄﾗｯｸ内最終ｾｸﾀか検査
   241	16F9 DA0517		JP	C,RD1		;
最終ｾｸﾀ未満で分岐
   242			;

   243	16FC 3A6A18		LD	A,(IOT)		;
ﾄﾗｯｸ番号取得
   244	16FF 3C			INC	A		;
ﾄﾗｯｸ番号進行(+1)
   245	1700 4F			LD	C,A		;
ﾄﾗｯｸ番号指定
   246	1701 CDA717		CALL	SETTRK		;
次ﾄﾗｯｸ番号設定
   247	1704 AF			XOR	A		;
ﾄﾗｯｸ内先頭ｾｸﾀ番号-1値取得
   248	1705 3C		RD1:	INC	A		;
ｾｸﾀ番号進行(+1)
   249	1706 4F			LD	C,A		;
ｾｸﾀ番号指定
   250	1707 CDAC17		CALL	SETSEC		;
次ｾｸﾀ番号設定
   251	170A C1			POP	BC		;
ｾｸﾀ数ｶｳﾝﾀと再試行ｶｳﾝﾀ
   252	170B 05			DEC	B		;
ｾｸﾀ数ｶｳﾝﾀ減数(-1)
   253	170C C2E116		JP	NZ,RDSEC	;
ｾｸﾀ数分継続へ
   254

   255			;	( 既定転送ﾊﾞｯﾌｧ ｱﾄﾞﾚｽ初期化、RST 7,0許可 )
   256

   257	170F F3		GOCPM:	DI			;
全割り込み禁止
   258	1710 3E12		LD	A,12H		;
割り込み初期化命令取得
   259	1712 D3FD		OUT	(REVRT),A	;
割り込み回路復帰処置
   260	1714 AF			XOR	A		;
全ﾋﾞｯﾄOFF値取得
   261	1715 D3FC		OUT	(INTC),A	;
全割り込み禁止
   262	1717 3E7E		LD	A,INTE		;
RST7,0のみON値取得
   263	1719 D3FC		OUT	(INTC),A	;
RST7,0のみ許可
   264	171B AF			XOR	A		;
0値取得
   265	171C D3F3		OUT	(ICON),A	;
割り込み制御初期化
   266			;

   267	171E 018000		LD	BC,BUFF		;
既定転送ﾊﾞｯﾌｧ基準ｱﾄﾞﾚｽ取得
   268	1721 CDBB17		CALL	SETDMA		;
DMAｱﾄﾞﾚｽ初期化
   269

   270			;	( ﾓﾆﾀ、CP/Mへの入口設定 )
   271

   272	1724 3EC3		LD	A,JP		;
無条件分岐命令機械語ｺｰﾄﾞ取得
   273	1726 320000		LD	(0000H),A	;
0番地にJP命令設定
   274	1729 210316		LD	HL,WBOOTE	;
ｳｫｰﾑ ﾌﾞｰﾄ開始ｱﾄﾞﾚｽ取得
   275	172C 220100		LD	(0001H),HL	;
0番地にJP WBOOTへの分岐命令設定
   276	172F 320500		LD	(0005H),A	;
5番地にJP命令設定
   277	1732 210608		LD	HL,BDOS		;
BDOS基準ｱﾄﾞﾚｽ取得
   278	1735 220600		LD	(0006H),HL	;
5番地にJP BDOS命令設定
   279				IF	NOT TEST	;
RST7のMON80入口設定(DDTより変更されるかもしれない)
   280	1738 323800		LD	(7*8),A		;
RST7入口にJP命令設定
   281	173B 2100F8		LD	HL,MON80	;
MON80入口ｱﾄﾞﾚｽ取得
   282	173E 223900		LD	(7*8+1),HL	;
RST7位置にJP MAN80命令設定
   283				ENDIF

   284

   285			;	( IOBYTE保存、最終選択ﾃﾞｨｽｸ番号(Cﾚｼﾞｽﾀ)と共にCP/Mへ移行 )
   286

   287	1741 3A0400		LD	A,(CDISK)	;
最終登録ﾃﾞｨｽｸ番号取得
   288	1744 4F			LD	C,A		;
最終登録ﾃﾞｨｽｸ番号複写
   289	1745 FB			EI			;
全割り込み許可
   290	1746 C30000		JP	CPMB		;
CCPへ移行
   291

   292			;	( 失敗時再試行準備と最終的なｴﾗｰ表示 )
   293

   294	1749 C1		BOOTER:	POP	BC		;
再試行ｶｳﾝﾀ復帰
   295	174A 0D			DEC	C		;
再試行ｶｳﾝﾀ減数(-1)
   296	174B CA5217		JP	Z,BOOTE0	;
再試行数分終了で分岐
   297			;

   298	174E C5			PUSH	BC		;
再試行ｶｳﾝﾀ再保存
   299	174F C3C916		JP	WBOOT0		;
再試行実行へ
   300			;

   301	1752 215B17	BOOTE0:	LD	HL,BOTMSG	;
ﾌﾞｰﾄ(ﾓﾆﾀ)要請文字列基準ﾎﾟｲﾝﾀ取得
   302	1755 CDD317		CALL	PRMSG		;
ﾌﾞｰﾄ(ﾓﾆﾀ)要請表示
   303	1758 C30FFF		JP	RMON80		;
MDSﾓﾆﾀへ移行
   304			;

   305	175B 3F626F6F74	BOTMSG:	DB	'?boot',0

   306

   307			;	* ｺﾝｿｰﾙ状態をAﾚｼﾞｽﾀに取得 *
   308

   309	1761 C312F8	CONST:	JP	CSTS		;
同種MDS呼び出し後復帰へ
   310

   311			;	* Aﾚｼﾞｽﾀにｺﾝｿｰﾙ入力 *
   312

   313	1764 CD03F8	CONIN:	CALL	CI		;
同種MDS呼び出し
   314	1767 E67F		AND	7FH		;
ﾊﾟﾘﾃｨ ﾋﾞｯﾄ解除
   315	1769 C9			RET			;
呼び出し元へ復帰
   316

   317			;	* Cﾚｼﾞｽﾀの文字をｺﾝｿｰﾙ出力 *
   318

   319	176A C309F8	CONOUT:	JP	CO		;
同種MDS呼び出し後復帰へ
   320

   321			;	* Cﾚｼﾞｽﾀの文字をﾘｽﾄ装置へ出力 *
   322

   323	176D C30FF8	LIST:	JP	LO		;
同種MDS呼び出し後復帰へ
   324

   325			;	* ﾘｽﾄ状態取得 *
   326

   327	1770 AF		LISTST:	XOR	A		;
不可状態値取得
   328	1771 C9			RET			;
常時不可状態で呼び出し元へ復帰
   329

   330			;	* Cﾚｼﾞｽﾀの文字をﾊﾟﾝﾁ装置へ出力 *
   331

   332	1772 C30CF8	PUNCH:	JP	PO		;
同種MDS呼び出し後復帰へ
   333

   334			;	* Aﾚｼﾞｽﾀにﾘｰﾀﾞ装置入力 *
   335

   336	1775 C306F8	READER:	JP	RI		;
同種MDS呼び出し後復帰へ
   337

   338			;	* 原点位置移動(ﾄﾗｯｸ0への移動として扱い) *
   339

   340	1778 0E00	HOME:	LD	C,0		;
ﾄﾗｯｸ0番号取得
   341	177A C3A717		JP	SETTRK		;
ﾄﾗｯｸ番号設定後復帰へ
   342

   343			;	* Cﾚｼﾞｽﾀのﾃﾞｨｽｸ選択 *
   344

   345	177D 210000	SELDSK:	LD	H,0000H		;
ｴﾗｰ時用の不在ｺｰﾄﾞ仮取得
   346	1780 79			LD	A,C		;
指定ﾃﾞｨｽｸ番号取得
   347	1781 FE04		CP	NDISKS		;
範囲検査
   348	1783 D0			RET	NC		;
範囲外で不在ｺｰﾄﾞと共に復帰
   349			;

   350	1784 E602		AND	00000010B	;
ﾃﾞｨｽｸ ﾊﾞﾝｸ ﾌﾗｸﾞ(00H:ﾄﾞﾗｲﾌﾞ0,1 02H:ﾄﾞﾗｲﾌﾞ2,3)取得
   351	1786 326618		LD	(DBANK),A	;
ﾃﾞｨｽｸ ﾊﾞﾝｸ ﾌﾗｸﾞ保存
   352	1789 79			LD	A,C		;
指定ﾃﾞｨｽｸ番号取得
   353	178A E601		AND	00000001B	;
最下位ﾋﾞｯﾄのみ有効
   354	178C B7			OR	A		;
ﾄﾞﾗｲﾌﾞ0,2or1,3か検査
   355	178D CA9217		JP	Z,SETDRV	;
ﾊﾞﾝｸ内ﾄﾞﾗｲﾌﾞ0で分岐
   356			;

   357	1790 3E30		LD	A,00110000B	;
ﾊﾞﾝｸ内ﾄﾞﾗｲﾌﾞ1でﾄﾞﾗｲﾌﾞ1値取得
   358			;

   359	1792 47		SETDRV:	LD	B,A		;
ﾊﾞﾝｸ内ﾄﾞﾗｲﾌﾞ1/0値保存
   360	1793 216818		LD	HL,IOF		;
操作命令値ﾎﾟｲﾝﾀ取得
   361	1796 7E			LD	A,(HL)		;
直前の操作命令値取得
   362	1797 E6CF		AND	11001111B	;
ﾊﾞﾝｸ内ﾄﾞﾗｲﾌﾞ番号ﾋﾞｯﾄ解除
   363	1799 B0			OR	B		;
ﾊﾞﾝｸ内ﾄﾞﾗｲﾌﾞ番号ﾋﾞｯﾄ合成
   364	179A 77			LD	(HL),A		;
操作命令値更新保存
   365	179B 69			LD	L,C		;
指定ﾃﾞｨｽｸ番号取得
   366	179C 2600		LD	H,0		;
上位に0設定
   367	179E 29			ADD	HL,HL		;
(×2)ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ ｵﾌｾｯﾄ取得(×16)
   368	179F 29			ADD	HL,HL		;
(×4)
   369	17A0 29			ADD	HL,HL		;
(×8)
   370	17A1 29			ADD	HL,HL		;
(×16)
   371	17A2 113316		LD	DE,DPBASE	;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ部基準ﾎﾟｲﾝﾀ取得
   372	17A5 19			ADD	HL,DE		;
対応ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ基準ｱﾄﾞﾚｽ取得
   373	17A6 C9			RET			;
呼び出し元へ復帰
   374

   375			;	* Cﾚｼﾞｽﾀのﾄﾗｯｸ番号を設定 *
   376

   377	17A7 216A18	SETTRK:	LD	HL,IOT		;
ﾄﾗｯｸ番号値ﾎﾟｲﾝﾀ取得
   378	17AA 71			LD	(HL),C		;
ﾄﾗｯｸ番号設定保存
   379	17AB C9			RET			;
呼び出し元へ復帰
   380

   381			;	* Cﾚｼﾞｽﾀのｾｸﾀ番号を設定 *
   382

   383	17AC 216B18	SETSEC:	LD	HL,IOS		;
ｾｸﾀ番号値ﾎﾟｲﾝﾀ取得
   384	17AF 71			LD	(HL),C		;
ｾｸﾀ番号設定保存
   385	17B0 C9			RET			;
呼び出し元へ復帰
   386

   387			;	* DEﾚｼﾞｽﾀのﾃｰﾌﾞﾙ使用でｾｸﾀ番号変換 *
   388

   389			SECTRAN:

   390	17B1 0600		LD	B,0		;
ｾｸﾀ番号ﾜｰﾄﾞ拡張
   391	17B3 EB			EX	DE,HL		;
変換ﾃｰﾌﾞﾙ基準ｱﾄﾞﾚｽをHLへ移動
   392	17B4 09			ADD	HL,BC		;
対応変換ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ取得
   393	17B5 7E			LD	A,(HL)		;
対応変換値取得
   394	17B6 326B18		LD	(IOS),A		;
変換後ｾｸﾀ番号設定保存
   395	17B9 6F			LD	L,A		;
変換後ｾｸﾀ番号をLﾚｼﾞｽﾀに複写
   396	17BA C9			RET			;
呼び出し元へ復帰
   397

   398			;	* BCﾚｼﾞｽﾀのDMAｱﾄﾞﾚｽを設定 *
   399

   400	17BB 69		SETDMA:	LD	L,C		;
下位ﾊﾞｲﾄをLﾚｼﾞｽﾀに複写
   401	17BC 60			LD	H,B		;
上位ﾊﾞｲﾄをHﾚｼﾞｽﾀに複写
   402	17BD 226C18		LD	(IOD),HL	;
DMAｱﾄﾞﾚｽ設定保存
   403	17C0 C9			RET			;
呼び出し元へ復帰
   404

   405			;	* ｾｸﾀ読み込み(DISK/TRK/SEC/DMAは設定済みの仮定) *
   406

   407	17C1 0E04	READ:	LD	C,READF		;
読み込み命令取得
   408	17C3 CDE017		CALL	SETFNC		;
読み込み操作準備
   409	17C6 CDF017		CALL	WAITIO		;
読み込み操作実行
   410	17C9 C9			RET			;
結果ﾌﾗｸﾞ(ZF)と共に呼び出し元へ復帰
   411

   412			;	* ｾｸﾀ書き込み *
   413

   414	17CA 0E06	WRITE:	LD	C,WRITF		;
書き込み命令取得
   415	17CC CDE017		CALL	SETFNC		;
書き込み操作準備
   416	17CF CDF017		CALL	WAITIO		;
書き込み操作実行
   417	17D2 C9			RET			;
結果ﾌﾗｸﾞ(ZF)と共に呼び出し元へ復帰
   418

   419			;	* ｻﾌﾞﾙｰﾁﾝ *
   420

   421			;	( HLﾚｼﾞｽﾀからの文字列表示 )
   422

   423	17D3 7E		PRMSG:	LD	A,(HL)		;
対応文字(ﾊﾞｲﾄ)取得
   424	17D4 B7			OR	A		;
終了子検査
   425	17D5 C8			RET	Z		;
終了子で呼び出し元へ復帰
   426			;

   427	17D6 E5			PUSH	HL		;
文字列ﾎﾟｲﾝﾀ一時保存
   428	17D7 4F			LD	C,A		;
対応文字(ﾊﾞｲﾄ)指定
   429	17D8 CD6A17		CALL	CONOUT		;
対応文字(ﾊﾞｲﾄ)表示
   430	17DB E1			POP	HL		;
文字列ﾎﾟｲﾝﾀ復帰
   431	17DC 23			INC	HL		;
文字列ﾎﾟｲﾝﾀ進行(+1)
   432	17DD C3D317		JP	PRMSG		;
終了子まで継続へ
   433

   434			;	( Cﾚｼﾞｽﾀの命令でﾃﾞｨｽｸ操作機能設定 )
   435

   436	17E0 216818	SETFNC:	LD	HL,IOF		;
操作命令値ﾎﾟｲﾝﾀ取得
   437	17E3 7E			LD	A,(HL)		;
直前の操作命令値取得
   438	17E4 E6F8		AND	11111000B	;
命令ﾋﾞｯﾄのみ解除
   439	17E6 B1			OR	C		;
指定命令ﾋﾞｯﾄ設定
   440	17E7 77			LD	(HL),A		;
指定操作命令値設定保存
   441			; MDS800のﾃﾞｨｽｸ制御器はｾｸﾀ ﾊﾞｲﾄ内にﾃﾞｨｽｸ ﾊﾞﾝｸ ﾋﾞｯﾄが必要です。
   442			; 現在の操作命令からこのﾋﾞｯﾄを得ます。
   443	17E8 E620		AND	00100000B	;
ﾃﾞｨｽｸ ﾊﾞﾝｸ ﾋﾞｯﾄ以外を解除
   444	17EA 216B18		LD	HL,IOS		;
ｾｸﾀ番号値ﾎﾟｲﾝﾀ取得
   445	17ED B6			OR	(HL)		;
ﾃﾞｨｽｸ ﾊﾞﾝｸ ﾋﾞｯﾄ設定(合成)
   446	17EE 77			LD	(HL),A		;
ｾｸﾀ ﾊﾞｲﾄ設定保存
   447	17EF C9			RET			;
呼び出し元へ復帰
   448

   449			;	( ﾃﾞｨｽｸ操作実行 )
   450

   451	17F0 0E0A	WAITIO:	LD	C,RETRY		;
再試行ｶｳﾝﾀ初期化
   452

   453			;	(( 操作開始、完了待機 ))
   454

   455	17F2 CD3F18	REWAIT:	CALL	INTYPE		;
結果種別値取得(制御器解除用)
   456	17F5 CD4C18		CALL	INBYTE		;
結果ﾊﾞｲﾄ値取得(制御器解除用)
   457			;

   458	17F8 3A6618		LD	A,(DBANK)	;
ﾃﾞｨｽｸ ﾊﾞﾝｸ ﾌﾗｸﾞ取得
   459	17FB B7			OR	A		;
ﾃﾞｨｽｸ0,1(ﾊﾞﾝｸ0)or2,3(ﾊﾞﾝｸ1)検査
   460	17FC 3E67		LD	A,IOPB AND 0FFH	;
IOPB下位ｱﾄﾞﾚｽ取得
   461	17FE 0618		LD	B,IOPB SHR 8	;
IOPB上位ｱﾄﾞﾚｽ取得
   462	1800 C20B18		JP	NZ,IODR1	;
ﾃﾞｨｽｸ ﾊﾞﾝｸ1で分岐
   463			;

   464	1803 D379		OUT	(ILOW),A	;
ﾃﾞｨｽｸ ﾊﾞﾝｸ0用IOPB下位ｱﾄﾞﾚｽ設定
   465	1805 78			LD	A,B		;
IOPB上位ｱﾄﾞﾚｽ取得
   466	1806 D37A		OUT	(IHIGH),A	;
ﾃﾞｨｽｸ ﾊﾞﾝｸ0用IOPB上位ｱﾄﾞﾚｽ設定
   467	1808 C31018		JP	WAIT0		;
完了待機へ
   468			;

   469	180B D389	IODR1:	OUT	(ILOW+10H),A	;
ﾃﾞｨｽｸ ﾊﾞﾝｸ1用IOPB下位ｱﾄﾞﾚｽ設定
   470	180D 78			LD	A,B		;
IOPB上位ｱﾄﾞﾚｽ取得
   471	180E D38A		OUT	(IHIGH+10H),A	;
ﾃﾞｨｽｸ ﾊﾞﾝｸ1用IOPB上位ｱﾄﾞﾚｽ設定
   472			;

   473	1810 CD5918	WAIT0:	CALL	INSTAT		;
制御器状態情報取得
   474	1813 E604		AND	IORDY		;
完了検査
   475	1815 CA1018		JP	Z,WAIT0		;
完了まで待機
   476

   477			;	(( 入出力操作完了検査 ))
   478

   479	1818 CD3F18		CALL	INTYPE		;
種別値取得
   480			;				;
0:結合なし完了, 1:結合有り完了(未使用), 2:状態変化, 3:(未使用)
   481	181B FE02		CP	2		;
状態変化か検査
   482	181D CA3218		JP	Z,WREADY	;
状態変化(失敗判定)で分岐
   483			;

   484	1820 B7			OR	A		;
結合なし完了か検査
   485	1821 C23818		JP	NZ,WERROR	;
その他で再試行へ分岐
   486

   487			;	(( ｴﾗｰ状態検査 ))
   488

   489	1824 CD4C18		CALL	INBYTE		;
結果ﾊﾞｲﾄ値取得
   490	1827 17			RLA			;
ﾄﾞﾗｲﾌﾞ準備不可検査
   491	1828 DA3218		JP	C,WREADY	;
ﾄﾞﾗｲﾌﾞ準備不可で分岐
   492			;

   493	182B 1F			RRA			;
結果ﾊﾞｲﾄ値ﾋﾞｯﾄ位置復帰
   494	182C E6FE		AND	11111110B	;
その他ｴﾗｰ検査(Deletedﾃﾞｰﾀは不問)
   495	182E C23818		JP	NZ,WERROR	;
その他ｴﾗｰ有りで再試行へ分岐
   496			;

   497	1831 C9			RET			;
成功ﾌﾗｸﾞ(Z)と共に呼び出し元へ復帰
   498

   499			;	(( ﾄﾞﾗｲﾌﾞ準備不可時処理(ｴﾗｰとして処理) ))
   500

   501	1832 CD4C18	WREADY:	CALL	INBYTE		;
結果ﾊﾞｲﾄ値取得(結果ﾊﾞｲﾄ解除)
   502	1835 C33818		JP	TRYCNT		;
再試行処理へ
   503

   504			;	(( ｴﾗｰ時処理 ))
   505

   506			WERROR:

   507			; ﾊｰﾄﾞｳｪｱ機能不全(CRC,ﾄﾗｯｸ,ｼｰｸなど)で発生
   508			; MDS制御器はその状態に対応する結果ﾊﾞｲﾄ値の各ﾋﾞｯﾄ位置でこれらを返します。
   509			; 7: ﾄﾞﾗｲﾌﾞ準備不可
   510			; 6: 書き込みｴﾗｰ(ﾊｰﾄﾞｳｪｱ機能不良)
   511			; 5: 書き込み禁止(準備不可として処理)
   512			; 4: ﾃﾞｰﾀ ｵｰﾊﾞﾌﾛｰまたはｱﾝﾀﾞｰﾌﾛｰ(ﾊｰﾄﾞｳｪｱ機能不良)
   513			; 3: ｱﾄﾞﾚｽ ｴﾗｰ(ﾊｰﾄﾞｳｪｱ機能不良)
   514			; 2: ｼｰｸ ｴﾗｰ
   515			; 1: CRCｴﾗｰ
   516			; 0: Deletedﾃﾞｰﾀ(上記では不問として受け入れ可)
   517			;

   518			; これは様々な状態の判定に有用かもしれませんが、それが修復不能の場合、恒久
   519			; 的にｴﾗｰ状態を得ることになります。この場合、準備不可状態は後で改善するた
   520			; めに独立した状態として扱われます。
   521

   522			;	(( 再試行回数判定 ))
   523

   524	1838 0D		TRYCNT:	DEC	C		;
再試行ｶｳﾝﾀ減数(-1)
   525	1839 C2F217		JP	NZ,REWAIT	;
試行回数経過まで継続へ
   526			;

   527	183C 3E01		LD	A,1		;
修復不能異常ｺｰﾄﾞ取得
   528	183E C9			RET			;
修復不能異常ｺｰﾄﾞと共に呼び出し元へ復帰
   529

   530			;	( INTYPE(種別),INBYTE(ﾊﾞｲﾄ),INSTAT(状態情報)取得 )
   531

   532	183F 3A6618	INTYPE:	LD	A,(DBANK)	;
ﾃﾞｨｽｸ ﾊﾞﾝｸ ﾌﾗｸﾞ取得
   533	1842 B7			OR	A		;
ﾄﾞﾗｲﾌﾞ0,1or2,3検査
   534	1843 C24918		JP	NZ,INTYP1	;
ﾄﾞﾗｲﾌﾞ2,3で分岐
   535			;

   536	1846 DB79		IN	A,(RTYPE)	;
ﾄﾞﾗｲﾌﾞ0,1で基準78H番地から入力
   537	1848 C9			RET			;
呼び出し元へ復帰
   538			;

   539	1849 DB89	INTYP1:	IN	A,(RTYPE+10H)	;
ﾄﾞﾗｲﾌﾞ2,3で基準88H番地から入力
   540	184B C9			RET			;
呼び出し元へ復帰
   541			;

   542	184C 3A6618	INBYTE:	LD	A,(DBANK)	;
ﾃﾞｨｽｸ ﾊﾞﾝｸ ﾌﾗｸﾞ取得
   543	184F B7			OR	A		;
ﾄﾞﾗｲﾌﾞ0,1or2,3検査
   544	1850 C25618		JP	NZ,INBYT1	;
ﾄﾞﾗｲﾌﾞ2,3で分岐
   545			;

   546	1853 DB7B		IN	A,(RBYTE)	;
ﾄﾞﾗｲﾌﾞ0,1で基準78H番地から入力
   547	1855 C9			RET			;
呼び出し元へ復帰
   548			;

   549	1856 DB8B	INBYT1:	IN	A,(RBYTE+10H)	;
ﾄﾞﾗｲﾌﾞ2,3で基準88H番地から入力
   550	1858 C9			RET			;
呼び出し元へ復帰
   551			;

   552	1859 3A6618	INSTAT:	LD	A,(DBANK)	;
ﾃﾞｨｽｸ ﾊﾞﾝｸ ﾌﾗｸﾞ取得
   553	185C B7			OR	A		;
ﾄﾞﾗｲﾌﾞ0,1or2,3検査
   554	185D C26318		JP	NZ,INSTA1	;
ﾄﾞﾗｲﾌﾞ2,3で分岐
   555			;

   556	1860 DB78		IN	A,(DSTAT)	;
ﾄﾞﾗｲﾌﾞ0,1で基準78H番地から入力
   557	1862 C9			RET			;
呼び出し元へ復帰
   558			;

   559	1863 DB88	INSTA1:	IN	A,(DSTAT+10H)	;
ﾄﾞﾗｲﾌﾞ2,3で基準88H番地から入力
   560	1865 C9			RET			;
呼び出し元へ復帰
   561

   562

   563			;	* ﾃﾞｰﾀ領域(RAM内でなければならない) *
   564

   565	1866 00		DBANK:	DB	0		;
ﾃﾞｨｽｸ ﾊﾞﾝｸ ﾌﾗｸﾞ(00H:ﾄﾞﾗｲﾌﾞ0,1 02H:ﾄﾞﾗｲﾌﾞ2,3)
   566			;				;
(I/Oﾊﾟﾗﾒｰﾀ部)
   567	1867 80		IOPB:	DB	80H		;
標準入出力操作
   568	1868 04		IOF:	DB	READF		;
操作命令(初期値読み込み)
   569	1869 01		ION:	DB	1		;
操作ｾｸﾀ数
   570	186A 02		IOT:	DB	OFFSET		;
ﾄﾗｯｸ番号
   571	186B 01		IOS:	DB	1		;
ｾｸﾀ番号
   572	186C 8000	IOD:	DW	BUFF		;
転送ﾊﾞｯﾌｧ ｱﾄﾞﾚｽ
   573

   574			;	* BDOS操作用RAM領域定義 *
   575

   576				ENDEF

   577	186E+=		BEGDAT	EQU	$

   578	186E+		DIRBUF:	DS	128		;
ﾃﾞｨﾚｸﾄﾘ用ﾊﾞｯﾌｧ
   579	18EE+		ALV0:	DS	31

   580	190D+		CSV0:	DS	16

   581	191D+		ALV1:	DS	31

   582	193C+		CSV1:	DS	16

   583	194C+		ALV2:	DS	31

   584	196B+		CSV2:	DS	16

   585	197B+		ALV3:	DS	31

   586	199A+		CSV3:	DS	16

   587	19AA+=		ENDDAT	EQU	$

   588	013C+=		DATSIZ	EQU	$-BEGDAT

   589	19AA			END


付録 追補B 骨子CBIOS

     1			; CP/M 2.0変更の第1段階用骨子CBIOS
     2

     3	0014 =		MSIZE	EQU	20		;
CP/Mﾒﾓﾘ容量
     4			;

     5			; BIASは20K以上のﾒﾓﾘ ｼｽﾃﾑに対する3400Hからのｱﾄﾞﾚｽ ｵﾌｾｯﾄです。
     6			; (資料全般でbとして参照されます。)
     7			;

     8	0000 =		BIAS	EQU	(MSIZE-20)*1024

     9	3400 =		CCP	EQU	3400H+BIAS	;
CCP(Console Command Processor)先頭ｱﾄﾞﾚｽ
    10	3C06 =		BDOS	EQU	CCP+806H	;
BDOS(Basic Disk Operating System)先頭ｱﾄﾞﾚｽ
    11	4A00 =		BIOS	EQU	CCP+1600H	;
BIOS(Basic Input/Output System)先頭ｱﾄﾞﾚｽ
    12	0003 =		IOBYTE	EQU	0003H		;
IntelのI/Oﾊﾞｲﾄ値ｱﾄﾞﾚｽ
    13	0004 =		CDISK	EQU	0004H		;
現使用者番号:現選択ﾄﾞﾗｲﾌﾞ番号値ｱﾄﾞﾚｽ
    14			;

    15	002C =		NSECTS	EQU	($-CCP)/128	;
ｳｫｰﾑ開始時ｾｸﾀ数
    16

    17	4A00			ORG	BIOS		;
BIOS開始ｱﾄﾞﾚｽ
    18

    19			;	個別ｻﾌﾞﾙｰﾁﾝ用ｼﾞｬﾝﾌﾟ ﾍﾞｸﾀ
    20

    21	4A00 C39C4A		JP	BOOT		;
ｺｰﾙﾄﾞ ﾌﾞｰﾄ
    22	4A03 C3A64A	WBOOTE:	JP	WBOOT		;
ｳｫｰﾑﾌﾞｰﾄ
    23	4A06 C3114B		JP	CONST		;
ｺﾝｿｰﾙ入力状態取得
    24	4A09 C3244B		JP	CONIN		;
ｺﾝｿｰﾙ入力
    25	4A0C C3374B		JP	CONOUT		;
ｺﾝｿｰﾙ出力
    26	4A0F C3494B		JP	LIST		;
ﾘｽﾄ装置出力
    27	4A12 C34D4B		JP	PUNCH		;
紙ﾃｰﾌﾟ ﾊﾟﾝﾁｬ出力
    28	4A15 C34F4B		JP	READER		;
紙ﾃｰﾌﾟ ﾘｰﾀﾞ入力
    29	4A18 C3544B		JP	HOME		;
ﾃﾞｨｽｸ原点位置移動
    30	4A1B C35A4B		JP	SELDSK		;
ﾃﾞｨｽｸ選択
    31	4A1E C37D4B		JP	SETTRK		;
ﾄﾗｯｸ設定
    32	4A21 C3924B		JP	SETSEC		;
ｾｸﾀ設定
    33	4A24 C3AD4B		JP	SETDMA		;
DMA(転送)基準ｱﾄﾞﾚｽ設定
    34	4A27 C3C34B		JP	READ		;
ｾｸﾀ読み出し
    35	4A2A C3D64B		JP	WRITE		;
ｾｸﾀ書き込み
    36	4A2D C34B4B		JP	LISTST		;
ﾘｽﾄ装置出力状態取得
    37	4A30 C3A74B		JP	SECTRAN		;
ﾄﾗｯｸ内ｾｸﾀ番号変換
    38

    39			;	( 4台のIBM互換8ｲﾝﾁ ﾃﾞｨｽｸ用定数ﾃｰﾌﾞﾙ )
    40

    41			;				;
ﾃﾞｨｽｸ0用ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ
    42	4A33 734A0000	DPBASE:	DW	TRANS, 0000H

    43	4A37 00000000		DW	0000H, 0000H

    44	4A3B F04C8D4A		DW	DIRBF, DPBLK

    45	4A3F EC4D704D		DW	CHK00, ALL00

    46			;				;
ﾃﾞｨｽｸ1用ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ
    47	4A43 734A0000		DW	TRANS, 0000H

    48	4A47 00000000		DW	0000H, 0000H

    49	4A4B F04C8D4A		DW	DIRBF, DPBLK

    50	4A4F FC4D8F4D		DW	CHK01, ALL01

    51			;				;
ﾃﾞｨｽｸ2用ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ
    52	4A53 734A0000		DW	TRANS, 0000H

    53	4A57 00000000		DW	0000H, 0000H

    54	4A5B F04C8D4A		DW	DIRBF, DPBLK

    55	4A5F 0C4EAE4D		DW	CHK02, ALL02

    56			;				;
ﾃﾞｨｽｸ3用ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ
    57	4A63 734A0000		DW	TRANS, 0000H

    58	4A67 00000000		DW	0000H, 0000H

    59	4A6B F04C8D4A		DW	DIRBF, DPBLK

    60	4A6F 1C4ECD4D		DW	CHK03, ALL03

    61			;

    62			;				;
ｾｸﾀ変換ﾍﾞｸﾀ
    63	4A73 01070D13	TRANS:	DB	 1,  7, 13, 19	;
ｾｸﾀ 1, 2, 3, 4
    64	4A77 19050B11		DB	25,  5, 11, 17	;
ｾｸﾀ 5, 6, 7, 6
    65	4A7B 1703090F		DB	23,  3,  9, 15	;
ｾｸﾀ 9, 10, 11, 12
    66	4A7F 1502080E		DB	21,  2,  8, 14	;
ｾｸﾀ 13, 14, 15, 16
    67	4A83 141A060C		DB	20, 26,  6, 12	;
ｾｸﾀ 17, 18, 19, 20
    68	4A87 1218040A		DB	18, 24,  4, 10	;
ｾｸﾀ 21, 22, 23, 24
    69	4A8B 1016		DB	16, 22		;
ｾｸﾀ 25, 26
    70			;

    71			;				;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸ(全ﾃﾞｨｽｸ共通)
    72	4A8D 1A00	DPBLK:	DW	26		;
ｾｸﾀ数/1ﾄﾗｯｸ
    73	4A8F 03			DB	3		;
配置区画ｼﾌﾄ数
    74	4A90 07			DB	7		;
配置区画ﾏｽｸ
    75	4A91 00			DB	0		;
拡張ﾏｽｸ
    76	4A92 F200		DW	242		;
配置区画単位ﾃﾞｨｽｸ容量-1
    77	4A94 3F00		DW	63		;
最大ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ数
    78	4A96 C0			DB	192		;
ﾃﾞｨﾚｸﾄﾘ用予約配置区画0
    79	4A97 00			DB	0		;
ﾃﾞｨﾚｸﾄﾘ用予約配置区画1
    80	4A98 1000		DW	16		;
検査容量
    81	4A9A 0200		DW	2		;
予約ﾄﾗｯｸ数(ﾄﾗｯｸ ｵﾌｾｯﾄ)
    82

    83			;	[ 各機能実行用個別ｻﾌﾞﾙｰﾁﾝ ]
    84

    85			;	* ｺｰﾙﾄﾞ ﾌﾞｰﾄ(最も簡単な場合、単にﾊﾟﾗﾒｰﾀ初期化を行うことです。) *
    86

    87	4A9C AF		BOOT:	XOR	A		;
0値取得
    88	4A9D 320300		LD	(IOBYTE),A	;
IOBYTE値初期化
    89	4AA0 320400		LD	(CDISK),A	;
選択ﾄﾞﾗｲﾌﾞ番号初期化(=A)
    90	4AA3 C3EF4A		JP	GOCPM		;
初期化とCP/Mへ移行へ
    91

    92			;	* ｳｫｰﾑ ﾌﾞｰﾄ(最も簡単な場合、取得する全ｾｸﾀを読むことです。) *
    93

    94	4AA6 318000	WBOOT:	LD	SP,0080H	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化(既定ﾊﾞｯﾌｧの下部分を使用)
    95	4AA9 0E00		LD	C,0		;
Aﾄﾞﾗｲﾌﾞ番号取得
    96	4AAB CD5A4B		CALL	SELDSK		;
Aﾄﾞﾗｲﾌﾞ選択
    97	4AAE CD544B		CALL	HOME		;
ﾍｯﾄﾞ原点移動
    98			;

    99	4AB1 062C		LD	B,NSECTS	;
読み込みｾｸﾀ数ｶｳﾝﾀ初期化
   100	4AB3 0E00		LD	C,0		;
ﾄﾗｯｸ番号ｶｳﾝﾀ初期化(ﾄﾗｯｸ0から)
   101	4AB5 1602		LD	D,2		;
ｾｸﾀ番号ｶｳﾝﾀ初期化(ｾｸﾀ2から)
   102			;				;
(ﾄﾗｯｸ0のｾｸﾀ1はｳｫｰﾑ ﾌﾞｰﾄで飛ばされるｺｰﾙﾄﾞ開始ﾛｰﾀﾞを含むのでｾｸﾀ2から読み始めることに注意してください。)
   103	4AB7 210034		LD	HL,CCP		;
CP/M基準ﾎﾟｲﾝﾀ取得(読み込み開始位置)
   104			;

   105	4ABA C5		LOAD1:	PUSH	BC		;
ｾｸﾀ数ｶｳﾝﾀ,ﾄﾗｯｸ番号一時保存
   106	4ABB D5			PUSH	DE		;
ｾｸﾀ番号一時保存
   107	4ABC E5			PUSH	HL		;
転送先ﾎﾟｲﾝﾀ一時保存
   108	4ABD 4A			LD	C,D		;
ｾｸﾀ番号取得
   109	4ABE CD924B		CALL	SETSEC		;
ｾｸﾀ番号設定
   110	4AC1 C1			POP	BC		;
転送先ﾎﾟｲﾝﾀ一時復帰
   111	4AC2 C5			PUSH	BC		;
転送先ﾎﾟｲﾝﾀ再保存
   112	4AC3 CDAD4B		CALL	SETDMA		;
DMA(転送先ﾎﾟｲﾝﾀ)ｱﾄﾞﾚｽ設定
   113	4AC6 CDC34B		CALL	READ		;
対応1ｾｸﾀ読み込み
   114	4AC9 FE00		CP	0		;
成功(0)/失敗(非0)検査
   115	4ACB C2A64A		JP	NZ,WBOOT	;
失敗でﾌﾞｰﾄ完了まで再試行へ
   116			;

   117	4ACE E1			POP	HL		;
転送先ﾎﾟｲﾝﾀ復帰
   118	4ACF 118000		LD	DE,128		;
ﾊﾞｲﾄ数/1ｾｸﾀ値取得
   119	4AD2 19			ADD	HL,DE		;
転送先ﾎﾟｲﾝﾀ進行(+128)
   120	4AD3 D1			POP	DE		;
ｾｸﾀ番号復帰
   121	4AD4 C1			POP	BC		;
ｾｸﾀ数ｶｳﾝﾀ,ﾄﾗｯｸ番号復帰
   122	4AD5 05			DEC	B		;
ｾｸﾀ数ｶｳﾝﾀ減数(-1)
   123	4AD6 CAEF4A		JP	Z,GOCPM		;
読み込み(転送)完了でCP/M移行処理へ
   124			;

   125	4AD9 14			INC	D		;
ｾｸﾀ番号進行(+1)
   126	4ADA 7A			LD	A,D		;
ｾｸﾀ番号複写
   127	4ADB FE1B		CP	26+1		;
ﾄﾗｯｸ内最終ｾｸﾀ終了か検査
   128	4ADD DABA4A		JP	C,LOAD1		;
未完了でﾄﾗｯｸ内ｾｸﾀ読み込み継続へ
   129			;

   130	4AE0 1601		LD	D,1		;
ﾄﾗｯｸ内先頭ｾｸﾀ番号取得
   131	4AE2 0C			INC	C		;
ﾄﾗｯｸ番号進行(+1)
   132			;

   133	4AE3 C5			PUSH	BC		;
ｾｸﾀ数ｶｳﾝﾀ,ﾄﾗｯｸ番号一時保存
   134	4AE4 D5			PUSH	DE		;
ｾｸﾀ番号一時保存
   135	4AE5 E5			PUSH	HL		;
転送先ﾎﾟｲﾝﾀ一時保存
   136	4AE6 CD7D4B		CALL	SETTRK		;
次ﾄﾗｯｸ番号設定
   137	4AE9 E1			POP	HL		;
転送先ﾎﾟｲﾝﾀ復帰
   138	4AEA D1			POP	DE		;
ｾｸﾀ番号復帰
   139	4AEB C1			POP	BC		;
ｾｸﾀ数ｶｳﾝﾀ,ﾄﾗｯｸ番号復帰
   140	4AEC C3BA4A		JP	LOAD1		;
ｾｸﾀ数分完了まで継続へ
   141

   142			;	( ﾊﾟﾗﾒｰﾀ設定とCP/Mへ移行 )
   143

   144	4AEF 3EC3	GOCPM:	LD	A,0C3H		;
無条件分岐命令機械語ｺｰﾄﾞ値取得
   145	4AF1 320000		LD	(0000H),A	;
0番地にJP命令設定
   146	4AF4 21034A		LD	HL,WBOOTE	;
ｳｫｰﾑ ﾌﾞｰﾄ入口ｱﾄﾞﾚｽ取得
   147	4AF7 220100		LD	(0001H),HL	;
1,2番地にｳｫｰﾑ ﾌﾞｰﾄ入口ｱﾄﾞﾚｽ設定
   148			;

   149	4AFA 320500		LD	(0005H),A	;
5番地にJP命令設定
   150	4AFD 21063C		LD	HL,BDOS		;
BDOS入口ｱﾄﾞﾚｽ取得
   151	4B00 220600		LD	(0006H),HL	;
6,7番地にBDOS入口ｱﾄﾞﾚｽ設定
   152			;

   153	4B03 018000		LD	BC,0080H	;
既定DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ取得
   154	4B06 CDAD4B		CALL	SETDMA		;
DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ設定
   155			;

   156	4B09 FB			EI			;
全割り込み許可
   157	4B0A 3A0400		LD	A,(CDISK)	;
現ﾃﾞｨｽｸ番号取得
   158	4B0D 4F			LD	C,A		;
現ﾃﾞｨｽｸ番号指定
   159	4B0E C30034		JP	CCP		;
CP/Mへ移行
   160

   161			; 各々の場合での(使用者によって満たされなければならない)簡単な入出力操作は、
   162			; その場所が使用者自身のｺｰﾄﾞを挿入するために予約した空間で提供されます。
   163

   164			;	* ｺﾝｿｰﾙ入力状態取得 *
   165

   166	4B11		CONST:	DS	10H		;
入力有りで-1、なしで0をAﾚｼﾞｽﾀに返します。
   167	4B21 3E00		LD	A,0		;
仮:(入力なしｺｰﾄﾞ取得)
   168	4B23 C9			RET			;
呼び出し元へ復帰
   169

   170			;	* ｺﾝｿｰﾙ入力 *
   171

   172	4B24		CONIN:	DS	10H		;
入力文字をAﾚｼﾞｽﾀに返します。
   173	4B34 E67F		AND	7FH		;
ﾊﾟﾘﾃｨ ﾋﾞｯﾄ解除
   174	4B36 C9			RET			;
呼び出し元へ復帰
   175

   176			;	* ｺﾝｿｰﾙ出力 *
   177

   178	4B37 79		CONOUT:	LD	A,C		;
指定文字取得
   179	4B38			DS	10H		;
Cﾚｼﾞｽﾀの内容をｺﾝｿｰﾙに出力
   180	4B48 C9			RET			;
呼び出し元へ復帰
   181

   182			;	* ﾘｽﾄ装置出力 (Cﾚｼﾞｽﾀの内容をﾘｽﾄ装置に出力) *
   183

   184	4B49 79		LIST:	LD	A,C	  	;
指定文字取得
   185	4B4A C9			RET		  	;
呼び出し元へ復帰(現在無処理ｻﾌﾞﾙｰﾁﾝ)
   186

   187			;	* ﾘｽﾄ装置出力状態取得 (準備可(=1)/不可(=0)をAﾚｼﾞｽﾀに返します。) *
   188

   189	4B4B AF		LISTST:	XOR	A	 	;
仮:(常時準備可)
   190	4B4C C9			RET			;
呼び出し元へ復帰
   191

   192			;	* 紙ﾃｰﾌﾟ ﾊﾟﾝﾁｬ出力 (Cﾚｼﾞｽﾀの内容をﾊﾟﾝﾁ装置に出力) *
   193

   194	4B4D 79		PUNCH:	LD	A,C		;
指定文字取得
   195	4B4E C9			RET			;
呼び出し元へ復帰(現在無処理ｻﾌﾞﾙｰﾁﾝ)
   196

   197			;	* 紙ﾃｰﾌﾟ ﾘｰﾀﾞ入力 (入力文字をAﾚｼﾞｽﾀに返します。) *
   198

   199	4B4F 3E1A	READER:	LD	A,1AH		;
仮:(ﾌｧｲﾙ終了ｺｰﾄﾞ取得)
   200	4B51 E67F		AND	7FH		;
ﾊﾟﾘﾃｨ ﾋﾞｯﾄ解除
   201	4B53 C9			RET			;
呼び出し元へ復帰
   202

   203			;	[ ﾃﾞｨｽｸに伴う入出力ﾄﾞﾗｲﾊﾞ ]
   204			; 現在はREADとWRITEｻﾌﾞﾙｰﾁﾝで使用するため、単にﾊﾟﾗﾒｰﾀを保存します。
   205

   206			;	* ﾃﾞｨｽｸ原点位置移動 (現ﾄﾞﾗｲﾌﾞ原点移動:ﾄﾗｯｸ0指定のSETTRK呼び出しに変更) *
   207

   208	4B54 0E00	HOME:	LD	C,0		;
ﾄﾗｯｸ0値取得
   209	4B56 CD7D4B		CALL	SETTRK		;
ﾄﾗｯｸ0設定
   210	4B59 C9			RET			;
呼び出し元へ復帰
   211

   212			;	* ﾃﾞｨｽｸ選択 (Cﾚｼﾞｽﾀ=ﾃﾞｨｽｸ番号) *
   213

   214	4B5A 210000	SELDSK:	LD	HL,0000H	;
ｴﾗｰ時復帰ｺｰﾄﾞ仮取得
   215	4B5D 79			LD	A,C		;
ﾃﾞｨｽｸ番号取得
   216	4B5E 32EF4C		LD	(DISKNO),A	;
ﾃﾞｨｽｸ番号保存
   217	4B61 FE04		CP	4		;
範囲(0～3)検査
   218	4B63 D0			RET	NC		;
範囲外で呼び出し元へ復帰
   219			;

   220	4B64			DS	10		;
(実際のﾃﾞｨｽｸ選択処理用空間)
   221			;

   222	4B6E 3AEF4C		LD	A,(DISKNO)	;
ﾃﾞｨｽｸ番号取得
   223	4B71 6F			LD	L,A		;
ｵﾌｾｯﾄ下位ﾊﾞｲﾄ設定
   224	4B72 2600		LD	H,0		;
ｵﾌｾｯﾄ上位ﾊﾞｲﾄを0設定
   225	4B74 29			ADD	HL,HL		;
(×2)16ﾊﾞｲﾄ単位ｵﾌｾｯﾄ取得(×16)
   226	4B75 29			ADD	HL,HL		;
(×4)
   227	4B76 29			ADD	HL,HL		;
(×8)
   228	4B77 29			ADD	HL,HL		;
(×16)
   229	4B78 11334A		LD	DE,DPBASE	;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ部基準ﾎﾟｲﾝﾀ取得
   230	4B7B 09			ADD	HL,DE		;
対応ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ基準ﾎﾟｲﾝﾀ取得
   231	4B7C C9			RET			;
呼び出し元へ復帰
   232

   233			;	* ﾄﾗｯｸ設定 (Cﾚｼﾞｽﾀ=ﾄﾗｯｸ番号) *
   234

   235	4B7D 79		SETTRK:	LD	A,C		;
ﾄﾗｯｸ番号取得
   236	4B7E 32E94C		LD	(TRACK),A	;
ﾄﾗｯｸ番号保存
   237	4B81			DS	10H		;
(実際のﾄﾗｯｸ選択処理用空間)
   238	4B91 C9			RET			;
呼び出し元へ復帰
   239

   240			;	* ｾｸﾀ設定 (Cﾚｼﾞｽﾀ=ｾｸﾀ番号) *
   241

   242	4B92 79		SETSEC:	LD	A,C		;
ｾｸﾀ番号取得
   243	4B93 32EB4C		LD	(SECTOR),A	;
ｾｸﾀ番号保存
   244	4B96			DS	10H		;
(実際のｾｸﾀ選択処理用空間)
   245	4BA6 C9			RET			;
呼び出し元へ復帰
   246

   247			;	* ﾄﾗｯｸ内ｾｸﾀ番号変換 (DEで与えられる変換ﾃｰﾌﾞﾙを使用してBCで与えられるｾｸﾀを変換) *
   248

   249			SECTRAN:

   250	4BA7 EB			EX	DE,HL		;
変換ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀをHLへ移動
   251	4BA8 09			ADD	HL,BC		;
対応変換ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ取得
   252	4BA9 6E			LD	L,(HL)		;
変換後ｾｸﾀ番号取得
   253	4BAA 2600		LD	H,0		;
上位0設定
   254	4BAC C9			RET			;
呼び出し元へ復帰
   255

   256			;	* DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ設定 (BCﾚｼﾞｽﾀ=DMAｱﾄﾞﾚｽ) *
   257

   258	4BAD 69		SETDMA:	LD	L,C		;
下位ﾊﾞｲﾄ複写
   259	4BAE 60			LD	H,B		;
上位ﾊﾞｲﾄ複写
   260	4BAF 22ED4C		LD	(DMAAD),HL	;
DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ保存
   261	4BB2			DS	10H		;
(実際のDMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ設定処理用空間)
   262	4BC2 C9			RET			;
呼び出し元へ復帰
   263

   264			;	* ｾｸﾀ読み出し *
   265			; (通常、WRITEと類似のためWRITEでの共通ｺｰﾄﾞに対する読み込み準備用空間を提供)
   266

   267	4BC3		READ:	DS	10H		;
(読み込み命令に対する準備処理用空間)
   268	4BD3 C3E64B		JP	WAITIO		;
実際の入出力実行へ
   269

   270			;	* ｾｸﾀ書き込み *
   271

   272	4BD6		WRITE:	DS	10H		;
(書き込み命令に対する準備処理用空間)
   273			;

   274			WAITIO:

   275			; 実際の入出力操作を行うためにREADとWRITEはここへ移行。成功で0,ｴﾗｰで1をAﾚｼﾞｽﾀに返す。
   276			; この場合、保存されたﾃﾞｨｽｸ番号はDISKNO(0～15),ﾄﾗｯｸ番号はTRACK(0～76),
   277			; ｾｸﾀ番号はSECTOR(1～26),DMAｱﾄﾞﾚｽはDMAAD(0～65535)
   278	4BE6			DS	256		;
(入出力ﾄﾞﾗｲﾊﾞ用予約空間)
   279	4CE6 3E01		LD	A,1		;
仮:(ｴﾗｰ復帰ｺｰﾄﾞ取得)
   280	4CE8 C9			RET			;
呼び出し元へ復帰
   281

   282			; CBIOSの残りは予約済み未初期化ﾃﾞｰﾀ領域で、ｼｽﾃﾑ ﾒﾓﾘ ｲﾒｰｼﾞの部分では必要ありません。
   283			; けれどもBEGDAT～ENDDAT間のこの領域は利用可能でなければなりません。
   284

   285	4CE9		TRACK:	DS	2		;
ﾄﾗｯｸ番号
   286	4CEB		SECTOR:	DS	2		;
ｾｸﾀ番号
   287	4CED		DMAAD:	DS	2		;
DMA(転送ﾊﾞｯﾌｧ)ｱﾄﾞﾚｽ
   288	4CEF		DISKNO:	DS	1		;
ﾃﾞｨｽｸ番号
   289

   290			;	* BDOSが使用する作業用RAM *
   291

   292	4CF0 =		BEGDAT	EQU	$	 	;
ﾃﾞｰﾀ領域の先頭
   293	4CF0		DIRBF:	DS	128	 	;
ﾃﾞｨﾚｸﾄﾘ用ﾊﾞｯﾌｧ
   294	4D70		ALL00:	DS	31	 	;
Aﾄﾞﾗｲﾌﾞ用配置区画ﾍﾞｸﾀ
   295	4D8F		ALL01:	DS	31	 	;
Bﾄﾞﾗｲﾌﾞ用配置区画ﾍﾞｸﾀ
   296	4DAE		ALL02:	DS	31	 	;
Cﾄﾞﾗｲﾌﾞ用配置区画ﾍﾞｸﾀ
   297	4DCD		ALL03:	DS	31	 	;
Dﾄﾞﾗｲﾌﾞ用配置区画ﾍﾞｸﾀ
   298	4DEC		CHK00:	DS	16		;
Aﾄﾞﾗｲﾌﾞ用検査ﾍﾞｸﾀ
   299	4DFC		CHK01:	DS	16		;
Bﾄﾞﾗｲﾌﾞ用検査ﾍﾞｸﾀ
   300	4E0C		CHK02:	DS	16	 	;
Cﾄﾞﾗｲﾌﾞ用検査ﾍﾞｸﾀ
   301	4E1C		CHK03:	DS	16	 	;
Dﾄﾞﾗｲﾌﾞ用検査ﾍﾞｸﾀ
   302			;

   303	4E2C =		ENDDAT	EQU	$	 	;
ﾃﾞｰﾀ領域の最後+1
   304	013C =		DATSIZ	EQU	$-BEGDAT;	;
ﾃﾞｰﾀ領域容量(ﾊﾞｲﾄ数)
   305

   306	4E2C			END


付録 追補C 骨子GETSYS/PUTSYSﾌﾟﾛｸﾞﾗﾑ

     1			; 6.4節でのGETSYSとPUTSYSﾌﾟﾛｸﾞﾗﾑの組み合わせ
     2

     3	0100			ORG	0100H		;
TPA先頭からﾌﾟﾛｸﾞﾗﾑ開始
     4

     5	0014 =		MSIZE	EQU	20		;
Kﾊﾞｲﾄ単位CP/M容量
     6

     7			; BIASは20K以上のﾒﾓﾘ ｼｽﾃﾑに対する3400Hからのｱﾄﾞﾚｽ ｵﾌｾｯﾄです。
     8			; (資料全般でbとして参照されます。)
     9	0000 =		BIAS	EQU	(MSIZE-20)*1024

    10	3400 =		CCP	EQU	3400H+BIAS

    11	3C00 =		BDOS	EQU	CCP+0800H

    12	4A00 =		BIOS	EQU	CCP+1600H

    13

    14			; GETSYSﾌﾟﾛｸﾞﾗﾑはﾄﾗｯｸ0,1を3880H+BIASのﾒﾓﾘに読み込みます。
    15			; ﾚｼﾞｽﾀ	使用目的
    16			; A	汎用作業
    17			; B	ﾄﾗｯｸ番号(0～76)
    18			; C	ｾｸﾀ番号(1～26)
    19			; D,E	作業用ﾚｼﾞｽﾀ対
    20			; H,L	読み込みｱﾄﾞﾚｽ
    21			; SP
    22

    23	0100 318033	GSTART:	LD	SP,CCP-0080H	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化
    24	0103 218033		LD	HL,CCP-0080H	;
読み込み開始位置ﾎﾟｲﾝﾀ取得
    25	0106 0600		LD	B,0		;
ﾄﾗｯｸ番号ｶｳﾝﾀ初期化
    26	0108 0E01	RD$TRK:	LD	C,1		;
ｾｸﾀ番号ｶｳﾝﾀ初期化
    27			;

    28	010A CD0003	RD$SEC:	CALL	READ$SEC	;
対応1ｾｸﾀ読み込み
    29	010D 118000		LD	DE,128		;
ﾊﾞｲﾄ数/1ｾｸﾀ値取得
    30	0110 19			ADD	HL,DE		;
設定位置ﾎﾟｲﾝﾀ進行(+128)
    31	0111 0C			INC	C		;
ｾｸﾀ番号進行(+1)
    32	0112 79			LD	A,C		;
ｾｸﾀ番号取得
    33	0113 FE1B		CP	26+1		;
ﾄﾗｯｸ内最終ｾｸﾀ終了か検査
    34	0115 DA0A01		JP	C,RD$SEC	;
未終了で継続へ
    35			;

    36	0118 04			INC	B		;
ﾄﾗｯｸ番号進行(+1)
    37	0119 78			LD	A,B		;
ﾄﾗｯｸ番号取得
    38	011A FE02		CP	1+1		;
最終ﾄﾗｯｸ終了か検査
    39	011C DA0801		JP	C,RD$TRK	;
未終了で継続へ
    40

    41			;	( 読み込み完了で何もしない方が良いため停止 )
    42

    43	011F FB			EI			;
全割り込み許可
    44	0120 76			HLT			;
CPU実行停止
    45

    46			; PUTSYSﾌﾟﾛｸﾞﾗﾑは3880H+BIASからのﾒﾓﾘ ｲﾒｰｼﾞをﾄﾗｯｸ0,1に書き込みます。
    47

    48	0200			ORG	($+0100H) AND 0FF00H

    49			;				;
本ﾌﾟﾛｸﾞﾗﾑは次のﾍﾟｰｼﾞ(256ﾊﾞｲﾄ)境界から開始
    50

    51			PUT$SYS:

    52	0200 318033		LD 	SP,CCP-0080H 	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化
    53	0203 218033		LD 	HL,CCP-0080H 	;
書き込み開始位置ﾎﾟｲﾝﾀ取得
    54	0206 0600		LD 	B,0 		;
ﾄﾗｯｸ番号ｶｳﾝﾀ初期化
    55	0208 0E01	WR$TRK:	LD 	C,1 		;
ｾｸﾀ番号ｶｳﾝﾀ初期化
    56			;

    57	020A CD0004	WR$SEC:	CALL	WRITE$SEC	;
対応1ｾｸﾀ書き込み
    58	020D 118000		LD 	DE,128 		;
ﾊﾞｲﾄ数/1ｾｸﾀ値取得
    59	0210 19			ADD	HL,DE		;
取得位置ﾎﾟｲﾝﾀ進行(+128)
    60	0211 0C			INC	C		;
ｾｸﾀ番号進行(+1)
    61	0212 79			LD	A,C		;
ｾｸﾀ番号取得
    62	0213 FE1B		CP 	26+1 		;
ﾄﾗｯｸ内最終ｾｸﾀ終了か検査
    63	0215 DA0A02		JP	C,WR$SEC  	;
未終了で継続へ
    64			;

    65	0218 04			INC	B		;
ﾄﾗｯｸ番号進行(+1)
    66	0219 78			LD	A,B		;
ﾄﾗｯｸ番号取得
    67	021A FE02		CP	1+1		;
最終ﾄﾗｯｸ終了か検査
    68	021C DA0802		JP	C,WR$TRK	;
未終了で継続へ
    69

    70			;	( 書き込み完了で何もしない方が良いため停止 )
    71

    72	021F FB			EI			;
全割り込み許可
    73	0220 76			HLT			;
CPU実行停止
    74

    75

    76			;	* 使用者提供ｾｸﾀ読み書きｻﾌﾞﾙｰﾁﾝ *
    77

    78	0300			ORG	($+0100H) AND 0FF00H

    79			;				;
本ｻﾌﾞﾙｰﾁﾝは次のﾍﾟｰｼﾞ(256ﾊﾞｲﾄ)境界から開始
    80

    81			;	( 1ｾｸﾀ読み込み (B:ﾄﾗｯｸ,C:ｾｸﾀ,HL:DMAｱﾄﾞﾚｽ) )

    82

    83			READ$SEC:

    84	0300 C5			PUSH	BC		;
ﾄﾗｯｸ番号ｶｳﾝﾀ,ｾｸﾀ番号ｶｳﾝﾀ一時保存
    85	0301 E5			PUSH	HL		;
転送先ﾎﾟｲﾝﾀ一時保存
    86	0302			DS	64		;
(使用者定義の読み込み処理をここで実行)
    87	0342 E1			POP	HL		;
転送先ﾎﾟｲﾝﾀ復帰
    88	0343 C1			POP	BC		;
ﾄﾗｯｸ番号ｶｳﾝﾀ,ｾｸﾀ番号ｶｳﾝﾀ復帰
    89	0344 C9			RET			;
呼び出し元へ復帰
    90

    91	0400			ORG	($+0100H) AND 0FF00H

    92			;				;
本ｻﾌﾞﾙｰﾁﾝは次のﾍﾟｰｼﾞ(256ﾊﾞｲﾄ)境界から開始
    93

    94			;	( 1ｾｸﾀ読み込み (B:ﾄﾗｯｸ,C:ｾｸﾀ,HL:DMAｱﾄﾞﾚｽ) )
    95

    96			WRITE$SEC:

    97	0400 C5			PUSH 	BC		;
ﾄﾗｯｸ番号ｶｳﾝﾀ,ｾｸﾀ番号ｶｳﾝﾀ一時保存
    98	0401 E5			PUSH	HL		;
転送元ﾎﾟｲﾝﾀ一時保存
    99	0402			DS	64		;
(使用者定義の書き込み処理をここで実行)
   100	0442 E1			POP	HL		;
転送元ﾎﾟｲﾝﾀ復帰
   101	0443 C1			POP	BC		;
ﾄﾗｯｸ番号ｶｳﾝﾀ,ｾｸﾀ番号ｶｳﾝﾀ復帰
   102	0444 C9			RET			;
呼び出し元へ復帰
   103

   104	0445			END


付録 追補D CP/M 2用MDS800ｺｰﾙﾄﾞ開始ﾛｰﾀﾞ

     1				TITLE	'3000HでのMDSｺｰﾙﾄﾞ開始ﾛｰﾀﾞ'
     2

     3			;	CP/M 2.0用 MDS800 ｺｰﾙﾄﾞ開始ﾛｰﾀﾞ
     4			;	Ver. 2.0 1979年10月
     5

     6	0000 =		FALSE	EQU	0		;
偽値(0000H)
     7	FFFF =		TRUE	EQU	NOT FALSE	;
真値(0FFFFH)
     8	0000 =		TESTING	EQU	FALSE    	;
TRUEならｴﾗｰ時にMON80へ移行
     9			;

    10				IF	TESTING

    11			BIAS	EQU	3400H		;
試験時
    12				ENDIF

    13				IF	NOT TESTING

    14	0000 =		BIAS	EQU	0000H		;
本番時
    15				ENDIF

    16	0000 =		CPMB	EQU	BIAS		;
CP/M読み込み基準ｱﾄﾞﾚｽ
    17	0806 =		BDOS	EQU	806H+BIAS	;
BDOS呼び出しｱﾄﾞﾚｽ
    18	1880 =		BDOSE	EQU	1880H+BIAS	;
CP/M読み込み終了ｱﾄﾞﾚｽ
    19	1600 =		BOOT	EQU	1600H+BIAS	;
ｺｰﾙﾄﾞ開始入口ｱﾄﾞﾚｽ
    20	1603 =		RBOOT	EQU	BOOT+3		;
ｳｫｰﾑ開始入口ｱﾄﾞﾚｽ
    21			;

    22	3000			ORG	03000H		;
3000Hでのﾊｰﾄﾞｳｪｱ ﾌﾞｰﾄからの読み込み
    23			;

    24	1880 =		BDOSL	EQU	BDOSE-CPMB	;
CP/M容量(ﾊﾞｲﾄ数)
    25	0002 =		NTRKS	EQU	2		;
読み込みﾄﾗｯｸ数
    26	0031 =		BDOSS	EQU	BDOSL/128	;
CP/M読み込みｾｸﾀ数
    27	0019 =		BDOS0	EQU	25		;
ﾄﾗｯｸ0のCP/M読み込みｾｸﾀ数
    28	0018 =		BDOS1	EQU	BDOSS-BDOS0	;
ﾄﾗｯｸ1の0CP/M読み込みｾｸﾀ数
    29			;

    30	F800 =		MON80	EQU	0F800H		;
Intel ﾓﾆﾀ基準ｱﾄﾞﾚｽ
    31	FF0F =		RMON80	EQU	0FF0FH		;
MON80用再始動番地
    32	0078 =		BASE	EQU	78H		;
ﾃﾞｨｽｸ制御器が使用する基準番地
    33	0079 =		RTYPE	EQU	BASE+1		;
結果種別
    34	007B =		RBYTE	EQU	BASE+3		;
結果ﾊﾞｲﾄ
    35	007F =		RESET	EQU	BASE+7		;
制御器ﾘｾｯﾄ
    36			;

    37	0078 =		DSTAT	EQU	BASE		;
ﾃﾞｨｽｸ状態情報ﾎﾟｰﾄ
    38	0079 =		ILOW	EQU	BASE+1		;
IOPB下位ｱﾄﾞﾚｽ
    39	007A =		IHIGH	EQU	BASE+2		;
IOPB上位ｱﾄﾞﾚｽ
    40	00FF =		BSW	EQU	0FFH		;
ﾌﾞｰﾄ ｽｨｯﾁ
    41	0003 =		RECAL	EQU	3H		;
選択ﾄﾞﾗｲﾌﾞ原点移動機能命令
    42	0004 =		READF	EQU	4H		;
ﾃﾞｨｽｸ読み込み機能命令
    43	0100 =		STACK	EQU	0100H		;
初期ｽﾀｯｸ ﾎﾟｲﾝﾀ値
    44

    45	3000 310001	RSTART:	LD	SP,STACK	;
MON80呼び出しの場合
    46	3003 DB79		IN	A,(RTYPE)	;
ﾃﾞｨｽｸ結果種別値解除
    47	3005 DB7B		IN	A,(RBYTE)	;
ﾃﾞｨｽｸ結果ﾊﾞｲﾄ値解除
    48			;

    49	3007 DBFF	CSTART:	IN 	A,(BSW)		;
ﾌﾞｰﾄ ｽｨｯﾁ ﾎﾟｰﾄ値取得
    50	3009 E602		AND	00000010B	;
ﾌﾞｰﾄ ｽｨｯﾁON/OFF検査
    51	300B C20730		JP	NZ,CSTART	;
OFF遷移まで待機
    52			;

    53	300E D37F		OUT	(RESET),A	;
ﾃﾞｨｽｸ制御器論理回路初期化
    54			;

    55	3010 0602		LD	B,NTRKS		;
読み込みﾄﾗｯｸ数ｶｳﾝﾀ初期化
    56	3012 214230		LD	HL,IOPB0	;
ﾃﾞｨｽｸ制御ﾊﾟﾗﾒｰﾀ基準ﾎﾟｲﾝﾀ取得
    57

    58			;	( ﾄﾗｯｸ0,1からCP/M先頭番地に読み込み )
    59

    60	3015 7D		START:	LD	A,L		;
ﾃﾞｨｽｸ制御ﾊﾟﾗﾒｰﾀ下位ｱﾄﾞﾚｽ取得
    61	3016 D379		OUT	(ILOW),A	;
ﾃﾞｨｽｸ制御器に下位ｱﾄﾞﾚｽ設定
    62	3018 7C			LD	A,H		;
ﾃﾞｨｽｸ制御ﾊﾟﾗﾒｰﾀ上位ｱﾄﾞﾚｽ取得
    63	3019 D37A		OUT	(IHIGH),A	;
ﾃﾞｨｽｸ制御器に上位ｱﾄﾞﾚｽ設定
    64	301B DB78	WAIT0:	IN	A,(DSTAT)	;
ﾃﾞｨｽｸ状態情報ﾎﾟｰﾄ値取得
    65	301D E604		AND	00000100B	;
完了検査
    66	301F CA1B30		JP	Z,WAIT0		;
完了まで待機
    67			;

    68	3022 DB79		IN	A,(RTYPE)	;
結果種別値取得
    69	3024 E603		AND	00000011B	;
無効ﾋﾞｯﾄ解除
    70	3026 FE02		CP	2		;
正常完了検査
    71			;

    72				IF	TESTING

    73				CALL	NC,RMON80	;
異常でﾓﾆﾀへ移行(非復帰)
    74				ENDIF

    75				IF	NOT TESTING

    76	3028 D20030		JP	NC,RSTART	;
異常で再試行へ
    77				ENDIF

    78			;

    79	302B DB7B		IN	A,(RBYTE)	;
結果ﾊﾞｲﾄ値取得
    80	302D 17			RLA			;
ﾄﾞﾗｲﾌﾞ準備不可ﾋﾞｯﾄをｷｬﾘｰ ﾌﾗｸﾞ移動
    81	302E DC0FFF		CALL	C,RMON80	;
ﾄﾞﾗｲﾌﾞ準備不可でﾓﾆﾀへ移行(非復帰)
    82	3031 1F			RRA			;
結果ﾊﾞｲﾄ値ﾋﾞｯﾄ位置復帰
    83	3032 E61E		AND	00011110B	;
ｵｰﾊﾞｰﾗﾝ,ｱﾄﾞﾚｽ異常,ｼｰｸ異常,CRC異常検査
    84			;

    85				IF	TESTING

    86				CALL	NZ,RMON80	;
何れかの異常でﾓﾆﾀへ移行(非復帰)
    87				ENDIF

    88				IF	NOT TESTING

    89	3034 C20030		JP	NZ,RSTART	;
何れかの異常で再試行へ
    90				ENDIF

    91			;

    92	3037 110700		LD	DE,IOPBL	;
ﾃﾞｨｽｸ制御ﾊﾟﾗﾒｰﾀ長(ﾊﾞｲﾄ数)取得
    93	303A 19			ADD	HL,DE		;
ﾄﾗｯｸ1用ﾃﾞｨｽｸ制御ﾊﾟﾗﾒｰﾀ基準ﾎﾟｲﾝﾀ取得
    94	303B 05			DEC	B		;
読み込みﾄﾗｯｸ数ｶｳﾝﾀ減数(-1)
    95	303C C21530		JP	NZ,START	;
指定数分完了まで継続へ
    96			;

    97	303F C30016		JP	BOOT		;
開始ﾒｯｾｰｼﾞ表示と初期化のためﾌﾞｰﾄへ移行
    98

    99			;	* ﾃﾞｨｽｸ制御ﾊﾟﾗﾒｰﾀ ﾃｰﾌﾞﾙ *
   100

   101	3042 80		IOPB0:	DB	80H		;
IOCW非更新
   102	3043 04			DB	READF		;
複数ｾｸﾀ読み込み機能命令
   103	3044 19			DB	BDOS0		;
ﾄﾗｯｸ0での読み込みｾｸﾀ数
   104	3045 00			DB	0		;
ﾄﾗｯｸ番号0
   105	3046 02			DB	2		;
開始ｾｸﾀ番号2
   106	3047 0000		DW	CPMB		;
転送先先頭ｱﾄﾞﾚｽ(CP/M先頭番地)
   107	0007 =		IOPBL	EQU	$-IOPB0		;
ﾃﾞｨｽｸ制御ﾊﾟﾗﾒｰﾀ長(ﾊﾞｲﾄ数)
   108			;

   109	3049 80		IOPB1:	DB	80H		;
IOCW非更新
   110	304A 04			DB	READF		;
複数ｾｸﾀ読み込み機能命令
   111	304B 18			DB	BDOS1		;
ﾄﾗｯｸ1での読み込みｾｸﾀ数
   112	304C 01			DB	1		;
ﾄﾗｯｸ番号1
   113	304D 01			DB	1		;
開始ｾｸﾀ番号1
   114	304E 800C		DW	CPMB+BDOS0*128	;
転送先先頭ｱﾄﾞﾚｽ(CP/M先頭番地+128*25)
   115

   116	3050			END


付録 追補E 骨子ｺｰﾙﾄﾞ開始ﾛｰﾀﾞ

     1			; これは修正時のｺｰﾙﾄﾞ開始ﾛｰﾀﾞ見本です。
     2			; ﾄﾗｯｸ0,ｾｸﾀ1(ﾃﾞｨｽｹｯﾄの先頭ｾｸﾀ)にあり、起動時にこのｾｸﾀを
     3			; ﾒﾓﾘ内に読み込むと仮定します。(本ﾌﾟﾛｸﾞﾗﾑはｷｰ入力ができ、
     4			; または実行するCP/M版のｱﾄﾞﾚｽ空間を越える読みだし専用ﾒﾓﾘ
     5			; 内に存在できます。)
     6			; このｺｰﾙﾄﾞ開始ﾛｰﾀﾞはLOADP(3400H+BIAS)のﾒﾓﾘ内にCP/Mｼｽﾃﾑを
     7			; 持って来ます。
     8			; 20Kﾒﾓﾘ ｼｽﾃﾑでこのBIASの値は0000Hで、増加したﾒﾓﾘ容量に
     9			; 対して大きな値になります(6.2節参照)
    10			; CP/Mｼｽﾃﾑ読み込み後、ｺｰﾙﾄﾞ開始ﾛｰﾀﾞはBIOS+BIASで始まる
    11			; BIOSのBOOT移行点に分岐します。
    12			; ｺｰﾙﾄﾞ開始ﾛｰﾀﾞはBIOSが上書きされない限り、再び電源が投入
    13			; されるまで使用されません。
    14			; 原点は0000Hと仮定され、ﾃﾞｨｽｸ制御器がｺｰﾙﾄﾞ開始ﾛｰﾀﾞを他の
    15			; 場所に持って来るか、または読み出し専用ﾒﾓﾘ領域が使用される
    16			; 場合は変更されなければなりません。
    17

    18	0000			ORG	0		;
CP/Mが使用するRAM先頭
    19

    20	0014 =		MSIZE	EQU	20		;
Kﾊﾞｲﾄ単位の最小ﾒﾓﾘ容量
    21			;

    22	0000 =		BIAS	EQU	(MSIZE-20)*1024	;
20Kｼｽﾃﾑでのｵﾌｾｯﾄ
    23	3400 =		CCP	EQU	3400H+BIAS	;
CCP先頭ｱﾄﾞﾚｽ
    24	4A00 =		BIOS	EQU	CCP+1600H	;
BIOS先頭ｱﾄﾞﾚｽ
    25	0300 =		BIOSL	EQU	0300H		;
BIOS長(ﾊﾞｲﾄ数)
    26	4A00 =		BOOT	EQU	BIOS		;
ｺｰﾙﾄﾞ ﾌﾞｰﾄ移行点
    27	1900 =		SIZE	EQU	BIOS+BIOSL-CCP	;
CP/Mｼｽﾃﾑ容量(ﾊﾞｲﾄ数)
    28	0032 =		SECTS	EQU	SIZE/128	;
読み込みｾｸﾀ数
    29

    30			;	( 読み込み操作開始 )
    31

    32	0000 010200	COLD:	LD	BC,0*256+2	;
B:ﾄﾗｯｸ番号ｶｳﾝﾀ,C:ｾｸﾀ番号ｶｳﾝﾀ初期化
    33	0003 1632		LD	D,SECTS		;
ｾｸﾀ数ｶｳﾝﾀ初期化
    34	0005 210034		LD	HL,CCP		;
転送先基準ﾎﾟｲﾝﾀ取得
    35			;

    36			LSECT:				;
対応1ｾｸﾀ読み込み
    37			;

    38			; この位置にBﾚｼﾞｽﾀで与えられるﾄﾗｯｸ番号とCﾚｼﾞｽﾀで与えられる
    39			; ｾｸﾀ番号から1ｾｸﾀ(128ﾊﾞｲﾄ)をHLで与えられるｱﾄﾞﾚｽ内に読み込む
    40			; 命令ｺｰﾄﾞを挿入してください。
    41			; 読み込みｴﾗｰが起こる場合、COLD位置に分岐してください。
    42			;

    43	0008 C36B00		JP	PAST$PATCH	;
[補修時にこれを削除]
    44			;

    45	000B			DS	60H		;
[ここに挿入]
    46

    47			PAST$PATCH:

    48	006B 15			DEC	D		;
ｾｸﾀ数ｶｳﾝﾀ減数(-1)
    49	006C CA004A		JP	Z,BOOT		;
完了でBIOSへ
    50

    51			; 注: ｽﾀｯｸを使用しないため、SPを作業ﾚｼﾞｽﾀとして使用。
    52

    53	006F 318000		LD	SP,128		;
ﾊﾞｲﾄ数/1ｾｸﾀ値取得
    54	0072 39			ADD	HL,SP		;
転送先ﾎﾟｲﾝﾀ進行(+128)
    55	0073 0C			INC	C		;
ｾｸﾀ番号進行(+1)
    56	0074 79			LD	A,C		;
ｾｸﾀ番号取得
    57	0075 FE1B		CP	26+1		;
ﾄﾗｯｸ内最終ｾｸﾀ終了か検査
    58	0077 DA0800		JP	C,LSECT		;
未終了で継続へ
    59			;

    60	007A 0E01		LD	C,1		;
ﾄﾗｯｸ内先頭ｾｸﾀ番号取得
    61	007C 04			INC	B		;
ﾄﾗｯｸ番号進行(+1)
    62	007D C30800		JP	LSECT		;
継続へ
    63

    64	0080			END


付録 追補F CP/Mﾃﾞｨｽｸ定義ﾗｲﾌﾞﾗﾘ

; CP/M 2.0 ﾃﾞｨｽｸ再定義ﾗｲﾌﾞﾗﾘ
; Copyright (c) 1979 Digital Research
;

; CP/M論理ﾃﾞｨｽｸ ﾄﾞﾗｲﾊﾞは以下で与えられるﾏｸﾛを使用して定義され、
; 呼び出し手順は
; disks   n

; diskdef parameter-list-0

; diskdef parameter-list-1

; ～

; diskdef parameter-list-n

; endef

; で、nはCP/Mに付随する論理ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞ番号、parameter-list-i
; (i=0,1,～,n-1)はそのﾄﾞﾗｲﾌﾞの特性を定義します。
;

; 各parameter-list-iは次の形式を採ります。
; dn,fsc,lsc,[skf],bls,dks,dir,cks,ofs,[0]

;

; dn は0～n-1の論理ﾃﾞｨｽｸ番号です。
; fsc は最初の物理ｾｸﾀ番号(0または1)です。V

; lsc は最後のｾｸﾀ番号です。
; skf は任意選択のｾｸﾀ ｽｷｭｰ値です。
; bls はﾃﾞｰﾀ配置区画容量です。
; dks はﾃﾞｨｽｸの配置区画数です。
; dir はﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ数です。
; cks は検査されるﾃﾞｨﾚｸﾄﾘのﾁｪｯｸｻﾑ容量です。
; ofs は論理ﾄﾗｯｸ0に対するﾄﾗｯｸ偏移です。
; [0] は任意選択1.4互換ﾌﾗｸﾞです(強制1K配置区画)。
;

; 利便性のため
; dn,dm

; 形式は前に定義したﾃﾞｨｽｸdmと同じ特性を持つとしてﾃﾞｨｽｸdnを定義します。

;

; 標準4ﾄﾞﾗｲﾌﾞCP/Mｼｽﾃﾑは以下により定義されます。
;	disks	4

;	diskdef 0,1,26,6,1024,243,64,64,2

; dsk	set	0V

;	rept	3

; dsk	set	dsk+1

;	diskdef %dsk,0

;	endm

;	endef

;

; ｱｾﾝﾌﾞﾙ後のbegdat値はBIOSの上の未初期化RAM領域先頭を定義し、一方enddat値は
; このﾃﾞｰﾀ領域の最後に続く次の番地を定義します。
; この領域の容量はｱｾﾝﾌﾞﾙ後のdatsiz値により与えられます。
; 割り当て区画ﾍﾞｸﾀは大きなﾃﾞｨｽｸ容量が小さな配置区画容量で定義されると、かな
; り大きくなることに注意してください。
;

dskhdr	macro	dn

;;	( 1つのﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ ﾘｽﾄ定義 )
dpe&dn:	dw	xlt&dn,0000h		;
変換ﾃｰﾌﾞﾙ,作業領域
    dw	0000h,0000h		;
作業領域,作業領域
    dw	dirbuf,dpb&dn		;
ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ ｱﾄﾞﾚｽ,ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部ｱﾄﾞﾚｽ
    dw	csv&dn,alv&dn		;
検査ﾍﾞｸﾀ ｱﾄﾞﾚｽ,割り当て区画ﾍﾞｸﾀ ｱﾄﾞﾚｽ
    endm

;

disks	macro	nd

;;	( ﾃﾞｨｽｸ nd 定義)
ndisks	set	nd			;;
後の参照用
dpbase	equ	$			;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ部基準ｱﾄﾞﾚｽ
;;	( nd の要素生成 )
dsknxt	set	0

    rept	nd

    dskhdr	%dsknxt

dsknxt	set	dsknxt+1

    endm

    endm

;

dpbhdr	macro	dn

dpb&dn	equ	$			;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部
    endm

;

ddb	macro	data,comment

;;	( db 行定義 )
    db	data			comment

    endm

;

ddw	macro	data,comment

;;	( dw 行定義 )
    dw	data			comment

    endm

;

gcd	macro	m,n

;;	( m,nの最大公倍数、結果としてgcdn値生成(ｾｸﾀ変換ﾃｰﾌﾞﾙ生成で使用) )
gcdm	set	m			;;
m用変数
gcdn	set	n			;;
n用変数
gcdr	set	0			;;
r用変数
    rept	65535

gcdx	set	gcdm/gcdn

gcdr	set	gcdm - gcdx*gcdn

    if	gcdr = 0

    exitm

    endif

gcdm	set	gcdn

gcdn	set	gcdr

    endm

    endm

;

diskdef	macro	dn,fsc,lsc,skf,bls,dks,dir,cks,ofs,k16

;;	( 後のﾃｰﾌﾞﾙ用set行生成 )
    if	nul lsc

;;	( 前のfscと同じ現ﾃﾞｨｽｸ dn )
dpb&dn	equ	dpb&fsc			;
同一ﾊﾟﾗﾒｰﾀ
als&dn	equ	als&fsc			;
同じ割り当て区画ﾍﾞｸﾀ容量
css&dn	equ	css&fsc			;
同じ検査ﾍﾞｸﾀ容量
xlt&dn	equ	xlt&fsc			;
同じ変換ﾃｰﾌﾞﾙ
    else

secmax	set	lsc-(fsc)		;;
ｾｸﾀ0～secmax
sectors	set	secmax+1		;;
ｾｸﾀ数
als&dn	set	(dks)/8			;;
割り当てﾍﾞｸﾀ容量
    if	((dks) mod 8) ne 0

als&dn	set	als&dn+1

    endif

css&dn	set	(cks)/4			;;
検査ﾍﾞｸﾀ容量
;;	( 割り当て区画ｼﾌﾄ値生成 )
blkval	set	bls/128			;;
ｾｸﾀ数/1割り当て区画
blkshf	set	0			;;
初期割り当て区画右ｼﾌﾄ数
blkmsk	set	0			;;
初期割り当て区画ﾏｽｸ
    rept	16			;;
1ﾋﾞｯﾄ分ﾋﾞｯﾄ位置移動
    if	blkval=1

    exitm

    endif

;;	( 上位の1未検出 )
blkshf	set	blkshf+1

blkmsk	set	(blkmsk shl 1) or 1

blkval	set	blkval/2

    endm

;;	( 拡張ﾏｽｸ値生成 )
blkval	set	bls/1024		;;
Kﾊﾞｲﾄ単位の割り当て区画容量
extmsk	set	0			;;
右端から順に1設定
    rept	16V

    if	blkval=1

    exitm

    endif

;;	( 更にｼﾌﾄ )
extmsk	set	(extmsk shl 1) or 1

blkval	set	blkval/2

    endm

;;	( ﾜｰﾄﾞ割り当て区画番号 )
    if	(dks) > 256

extmsk	set	(extmsk shr 1)

    endif

;;	( 最終位置任意選択[0] )
    if	not nul k16

extmsk	set	k16

    endif

;;	( ﾃﾞｨﾚｸﾄﾘ用予約割り当て区画ﾋﾞｯﾄ生成 )
dirrem	set	dir			;;
処理での残ﾃﾞｨﾚｸﾄﾘ数
dirbks	set	bls/32			;;
ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ数/1割り当て区画
dirblk	set	0			;;
左端から順に1設定
    rept	16

    if	dirrem=0

    exitm

    endif

;;	( 未完了、右ｼﾌﾄと最上位ﾋﾞｯﾄ=1、繰り返し )
dirblk	set	(dirblk shr 1) or 8000h

    if	dirrem > dirbks

dirrem	set	dirrem-dirbks

    else

dirrem	set	0

    endif

    endm

    dpbhdr	dn			;;
equ $生成
    ddw	%sectors,<;sec per track>

    ddb	%blkshf,<;block shift>

    ddb	%blkmsk,<;block mask>

    ddb	%extmsk,<;extnt mask>

    ddw	%(dks)-1,<;disk size-1>

    ddw	%(dir)-1,<;directory max>

    ddb	%dirblk shr 8,<;alloc0>

    ddb	%dirblk and 0ffh,<;alloc1>

    ddw	%(cks)/4,<;check size>

    ddw	%ofs,<;offset>

;;	( 必要時、変換ﾃｰﾌﾞﾙ生成 )
    if	nul skf

xlt&dn	equ	0			;
変換ﾃｰﾌﾞﾙなし
    else

    if	skf = 0

xlt&dn	equ	0			;
変換ﾃｰﾌﾞﾙなし
    else

;;	( 変換ﾃｰﾌﾞﾙ作成 )
nxtsec	set	0			;;
ｾｸﾀ番号
nxtbas	set	0			;;
周回先頭ｾｸﾀ番号
    gcd	%sectors,skf

;;	gcdn = gcd(sectors,skew)

neltst	set	sectors/gcdn

;;	( neltstは周回内の要素(ｾｸﾀ)数 )
nelts	set	neltst			;;
ｶｳﾝﾀ
xlt&dn	equ	$			;
変換ﾃｰﾌﾞﾙ
    rept	sectors			;;
各ｾｸﾀに1度
    if	sectors < 256

    ddb	%nxtsec+(fsc)

    else

    ddw	%nxtsec+(fsc)

    endif

nxtsec	set	nxtsec+(skf)

    if	nxtsec >= sectors

nxtsec	set	nxtsec-sectors

    endif

nelts	set	nelts-1

    if	nelts = 0

nxtbas	set	nxtbas+1

nxtsec	set	nxtbas

nelts	set	neltst

    endif

    endm

    endif				;;
facなし検査の終了
    endif				;;
blsなし検査の終了
    endm

;

defds	macro	lab,space

lab:	ds	space

    endm

;

lds	macro	lb,dn,val

    defds	lb&dn,%val&dn

    endm

;

endef	macro

;;	( 必要なRAMﾃﾞｰﾀ領域生成 )
begdat	equ	$

dirbuf:	ds	128			;
ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ
dsknxt	set	0

    rept	ndisks			;;
各ﾃﾞｨｽｸに1度
    lds	alv,%dsknxt,als

    lds	csv,%dsknxt,css

dsknxt	set	dsknxt+1

    endm

enddat	equ	$

datsiz	equ	$-begdat

;;	( 本位置にdb 0の16進数ﾚｺｰﾄﾞを強制 )
    endm

;


付録 追補G 合成と分解のｱﾙｺﾞﾘｽﾞﾑ

     1			;********************************

     2			;*				*

     3			;*  CP/M-80 2.0用ｾｸﾀの合成と分解法	*

     4			;*				*

     5			;********************************

     6

     7			;	( ｾｸﾀ ﾏｽｸ計算に便利なﾏｸﾛ )
     8			;	log2(HBLK)計算、結果として2@X=HBLKを満たす@Xを返す。
     9

    10			SMASK	MACRO	HBLK

    11			@Y	SET	HBLK

    12			@X	SET	0

    13				REPT	8		;
;(( @Yが1になるまで右ｼﾌﾄ ))
    14				IF	@Y = 1

    15				EXITM

    16				ENDIF

    17			@Y	SET	@Y SHR 1	;
;(( @Yが1以外なら右1ﾋﾞｯﾄ ｼﾌﾄ ))
    18			@X	SET	@X + 1

    19				ENDM

    20				ENDM

    21

    22			;	* CP/Mと実ﾃﾞｨｽｸ間の定数定義 *
    23

    24	0800 =		BLKSIZ	EQU	2048		;
配置区画容量
    25	0200 =		HSTSIZ	EQU	512		;
実ﾃﾞｨｽｸのﾊﾞｲﾄ数/1ｾｸﾀ
    26	0014 =		HSTSPT	EQU	20		;
実ﾃﾞｨｽｸのｾｸﾀ数/1ﾄﾗｯｸ
    27	0004 =		HSTBLK	EQU	HSTSIZ/128	;
CP/Mｾｸﾀ(ﾚｺｰﾄﾞ)数/実ﾃﾞｨｽｸの1ｾｸﾀ(ﾊﾞｯﾌｧ)
    28	0050 =		CPMSPT	EQU	HSTBLK*HSTSPT	;
CP/Mｾｸﾀ(ﾚｺｰﾄﾞ)数/1ﾄﾗｯｸ
    29	0003 =		SECMSK	EQU	HSTBLK-1	;
物理ｾｸﾀ内ﾚｺｰﾄﾞ番号ﾋﾞｯﾄのﾏｽｸ値
    30			SMASK	HSTBLK			;
[ﾏｸﾛ:ｾｸﾀ ﾏｽｸ計算]
    31	0002 =		SECSHF	EQU	@X		;
log2(HSTBLK)
    32

    33			;	* BDOSからのｾｸﾀ書き込み時の種別ｺｰﾄﾞ *
    34

    35	0000 =		WRALL	EQU	0		;
既配置区画書き込み
    36	0001 =		WRDIR	EQU	1		;
ﾃﾞｨﾚｸﾄﾘ書き込み
    37	0002 =		WRUAL	EQU	2		;
未配置区画初回書き込み
    38

    39			; ここにDISKDEFﾏｸﾛまたは手動でﾃｰﾌﾞﾙを書きます。
    40

    41	0000 =		DPBASE	EQU	$		;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ部基準ｱﾄﾞﾚｽ
    42

    43			; 以下ではﾚｺｰﾄﾞの合成/分解に関連するBIOS機能を示します。
    44

    45			;	* ｺｰﾙﾄﾞ/ｳｫｰﾑ ﾌﾞｰﾄ *
    46			; ここに初期化のためのｼｽﾃﾑ ﾌﾞｰﾄを入力してください。
    47

    48			BOOT:

    49			WBOOT:

    50	0000 AF			XOR	A		;
0値取得
    51	0001 326A01		LD	(HSTACT),A	;
ﾊﾞｯﾌｧ有効ﾌﾗｸﾞ解除
    52	0004 326C01		LD	(UNACNT),A	;
未配置区画ﾚｺｰﾄﾞ数ｶｳﾝﾀ初期化(無効)
    53	0007 C9			RET			;
呼び出し元へ復帰
    54

    55			;	* 選択ﾃﾞｨｽｸ原点位置移動 *
    56

    57	0008 3A6B01	HOME:	LD	A,(HSTWRT)	;
ﾊﾞｯﾌｧ書き込み保留中ﾌﾗｸﾞ取得
    58	000B B7			OR	A		;
保留書き込み有無検査
    59	000C C21200		JP	NZ,HOMED	;
保留書き込み有りで分岐
    60			;

    61	000F 326A01		LD	(HSTACT),A	;
ﾊﾞｯﾌｧ有効ﾌﾗｸﾞ解除
    62	0012 C9		HOMED:	RET			;
呼び出し元へ復帰
    63

    64			;	* ﾃﾞｨｽｸ選択 *
    65			;	入: C:ﾄﾞﾗｲﾌﾞ番号  出: HL:ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ ﾎﾟｲﾝﾀ
    66

    67			SELDSK:

    68	0013 79			LD	A,C		;
選択ﾃﾞｨｽｸ番号取得
    69	0014 326101		LD	(SEKDSK),A	;
BODS指定ﾄﾞﾗｲﾌﾞ番号保存
    70	0017 6F			LD	L,A		;
下位にﾃﾞｨｽｸ番号設定
    71	0018 2600		LD	H,0		;
上位0設定
    72				REPT	4		;
[ﾏｸﾛ:HL=HL×16]
    73				ADD	HL,HL

    74				ENDM

    75	001A+29			ADD	HL,HL		;
(×2)16ﾊﾞｲﾄ単位ｵﾌｾｯﾄ取得(×16)
    76	001B+29			ADD	HL,HL		;
(×4)
    77	001C+29			ADD	HL,HL		;
(×8)
    78	001D+29			ADD	HL,HL		;
(×16)
    79	001E 110000		LD	DE,DPBASE	;
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ部基準ﾎﾟｲﾝﾀ取得
    80	0021 19			ADD	HL,DE		;
対応ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ基準ﾎﾟｲﾝﾀ取得
    81	0022 C9			RET			;
呼び出し元へ復帰
    82

    83			;	* ﾄﾗｯｸ設定 *
    84			;	入: BC:ﾄﾗｯｸ番号
    85

    86	0023 60		SETTRK:	LD	H,B		;
ﾄﾗｯｸ番号上位複写
    87	0024 69			LD	L,C		;
ﾄﾗｯｸ番号下位複写
    88	0025 226201		LD	(SEKTRK),HL	;
BDOS指定ﾄﾗｯｸ番号保存
    89	0028 C9			RET			;
呼び出し元へ復帰
    90

    91			;	* ｾｸﾀ設定 *
    92			;	入: BC:ｾｸﾀ番号
    93

    94	0029 79		SETSEC:	LD	A,C		;
ｾｸﾀ番号取得
    95	002A 326401		LD	(SEKSEC),A	;
BDOS指定ｾｸﾀ番号保存
    96	002D C9			RET			;
呼び出し元へ復帰
    97

    98			;	* DMA(転送)基準ｱﾄﾞﾚｽ設定 *
    99			;	入: BC:DMA(転送)基準ｱﾄﾞﾚｽ
   100

   101	002E 60		SETDMA:	LD	H,B		;
DMA(転送)基準ｱﾄﾞﾚｽ上位複写
   102	002F 69			LD	L,C		;
DMA(転送)基準ｱﾄﾞﾚｽ下位複写
   103	0030 227501		LD	(DMAADR),HL	;
指定DMA(転送)基準ｱﾄﾞﾚｽ保存
   104	0033 C9			RET			;
呼び出し元へ復帰
   105

   106			;	* ﾄﾗｯｸ内ｾｸﾀ番号変換 *
   107			;	入: BC:0基準ｾｸﾀ番号 DE:変換ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ  出: HL:変換後0基準ｾｸﾀ番号
   108

   109			SECTRAN:			;
(本例では変換無し)
   110	0034 60			LD	H,B		;
ｾｸﾀ番号上位複写
   111	0035 69			LD	L,C		;
ｾｸﾀ番号下位複写
   112	0036 C9			RET			;
呼び出し元へ復帰
   113

   114			; このREAD入口はREADに対する以前のBIOS定義の替わりです。
   115

   116			;	* ｾｸﾀ(CP/Mﾚｺｰﾄﾞ(128ﾊﾞｲﾄ))読み出し *
   117			;	出: A:成功(0)/失敗(1)ﾌﾗｸﾞ
   118

   119	0037 AF		READ:	XOR	A		;
0値取得
   120	0038 326C01		LD	(UNACNT),A	;
未配置区画ﾚｺｰﾄﾞ数ｶｳﾝﾀ初期化(無効)
   121	003B 3E01		LD	A,1		;
真(1)値取得
   122	003D 327301		LD	(READOP),A	;
読み(1)/書き(0)処理ﾌﾗｸﾞ読み設定
   123	0040 327201		LD	(RSFLAG),A	;
必要時物理ｾｸﾀ読み込み要求ﾌﾗｸﾞ設定
   124	0043 3E02		LD	A,WRUAL		;
未配置区画書き込み種別番号取得
   125	0045 327401		LD	(WRTYPE),A	;
書き込み種別番号みなし設定
   126	0048 C3B600		JP	RWOPER		;
読み込み処理へ
   127

   128			; このWRITE入口はWRITEに対する以前のBIOS定義の替わりです。
   129

   130			;	* ｾｸﾀ(CP/Mﾚｺｰﾄﾞ(128ﾊﾞｲﾄ))書き込み *
   131			;	出: A:成功(0)/失敗(1)ﾌﾗｸﾞ
   132

   133	004B AF		WRITE:	XOR	A		;
偽(0)値取得
   134	004C 327301		LD	(READOP),A	;
読み(1)/書き(0)処理ﾌﾗｸﾞ書き設定
   135	004F 79			LD	A,C		;
書き込み種別番号取得
   136	0050 327401		LD	(WRTYPE),A	;
書き込み種別番号保存
   137	0053 FE02		CP	WRUAL		;
未配置区画書き込みか検査
   138	0055 C26F00		JP	NZ,CHKUNA	;
既配置区画orﾃﾞｨﾚｸﾄﾘ書き込みで分岐
   139

   140			;	( 未配置区画先頭ﾚｺｰﾄﾞ,各値初期化 )
   141

   142	0058 3E10		LD	A,BLKSIZ/128	;
ﾚｺｰﾄﾞ数/1配置区画値取得
   143	005A 326C01		LD	(UNACNT),A	;
未配置区画ﾚｺｰﾄﾞ数ｶｳﾝﾀ初期化
   144	005D 3A6101		LD	A,(SEKDSK)	;
BODS指定ﾄﾞﾗｲﾌﾞ番号取得
   145	0060 326D01		LD	(UNADSK),A	;
未配置区画ﾃﾞｨｽｸ番号設定(=SEKDSK)
   146	0063 2A6201		LD	HL,(SEKTRK)	;
BODS指定ﾄﾗｯｸ番号取得
   147	0066 226E01		LD	(UNATRK),HL	;
未配置区画ﾄﾗｯｸ番号設定(=SEKTRK)
   148	0069 3A6401		LD	A,(SEKSEC)	;
BDOS指定ｾｸﾀ番号取得
   149	006C 327001		LD	(UNASEC),A	;
未配置区画ｾｸﾀ番号設定(=SEKSEC)
   150

   151			;	( 未配置区画内ﾚｺｰﾄﾞ書き込みか検査 )
   152

   153	006F 3A6C01	CHKUNA:	LD	A,(UNACNT)	;
未配置区画ﾚｺｰﾄﾞ数ｶｳﾝﾀ値取得
   154	0072 B7			OR	A		;
残ﾚｺｰﾄﾞ有無検査
   155	0073 CAAE00		JP	Z,ALLOC		;
残無しで分岐
   156			;				;
(残ﾚｺｰﾄﾞ有り、ﾄﾞﾗｲﾌﾞ番号比較検査)
   157	0076 3D			DEC	A		;
未配置区画ﾚｺｰﾄﾞ数ｶｳﾝﾀ値減数(-1)
   158	0077 326C01		LD	(UNACNT),A	;
未配置区画ﾚｺｰﾄﾞ数ｶｳﾝﾀ値更新保存
   159	007A 3A6101		LD	A,(SEKDSK)	;
BDOS指定ﾃﾞｨｽｸ番号取得
   160	007D 216D01		LD	HL,UNADSK	;
未配置区画ﾃﾞｨｽｸ番号値ﾎﾟｲﾝﾀ取得
   161	0080 BE			CP	(HL)		;
指定値と未配置区画のﾃﾞｨｽｸ番号比較
   162	0081 C2AE00		JP	NZ,ALLOC	;
不一致で分岐
   163			;				;
(残ﾚｺｰﾄﾞ有り、ﾄﾗｯｸ番号比較検査)
   164	0084 216E01		LD	HL,UNATRK	;
未配置区画ﾄﾗｯｸ番号値ﾎﾟｲﾝﾀ取得
   165	0087 CD5301		CALL	TRKCMP		;
指定ﾄﾗｯｸ番号と未配置区画のﾄﾗｯｸ番号比較
   166	008A C2AE00		JP	NZ,ALLOC	;
不一致で分岐
   167			;				;
(残ﾚｺｰﾄﾞ有り、ｾｸﾀ番号比較検査)
   168	008D 3A6401		LD	A,(SEKSEC)	;
BDOS指定ｾｸﾀ番号取得
   169	0090 217001		LD	HL,UNASEC	;
未配置区画ｾｸﾀ番号値ﾎﾟｲﾝﾀ取得
   170	0093 BE			CP	(HL)		;
指定値と未配置区画のｾｸﾀ番号比較
   171	0094 C2AE00		JP	NZ,ALLOC	;
不一致で分岐
   172			;				;
(ﾄﾞﾗｲﾌﾞ,ﾄﾗｯｸ,ｾｸﾀ一致、ｾｸﾀ番号進行)
   173	0097 34			INC	(HL)		;
未配置区画ｾｸﾀ番号進行(+1)
   174	0098 7E			LD	A,(HL)		;
更新後未配置区画ｾｸﾀ番号取得
   175	0099 FE50		CP	CPMSPT		;
ﾚｺｰﾄﾞ単位でﾄﾗｯｸ内か検査
   176	009B DAA700		JP	C,NOOVF		;
ﾄﾗｯｸ内で分岐
   177			;				;
(ﾄﾗｯｸ番号進行)
   178	009E 3600		LD	(HL),0		;
未配置区画ｾｸﾀ番号初期化(=0)
   179	00A0 2A6E01		LD	HL,(UNATRK)	;
未配置区画ﾄﾗｯｸ番号取得
   180	00A3 23			INC	HL		;
未配置区画ﾄﾗｯｸ番号進行(+1)
   181	00A4 226E01		LD	(UNATRK),HL	;
未配置区画ﾄﾗｯｸ番号更新保存
   182

   183			;	( 未配置区画内ﾚｺｰﾄﾞ書き込み(事前読み込み無し) )
   184

   185	00A7 AF		NOOVF:	XOR	A		;
偽(0)値取得
   186	00A8 327201		LD	(RSFLAG),A	;
必要時物理ｾｸﾀ読み込み要求ﾌﾗｸﾞ解除
   187	00AB C3B600		JP	RWOPER		;
書き込み処理へ
   188

   189			;	( 既配置区画内ﾚｺｰﾄﾞ書き込み(ﾊﾞｯﾌｧ内以外時事前読み込み有り) )
   190

   191	00AE AF		ALLOC:	XOR	A		;
0値取得
   192	00AF 326C01		LD	(UNACNT),A	;
未配置区画ﾚｺｰﾄﾞ数ｶｳﾝﾀ初期化(無効)
   193	00B2 3C			INC	A		;
真(1)値取得
   194	00B3 327201		LD	(RSFLAG),A	;
必要時物理ｾｸﾀ読み込み要求ﾌﾗｸﾞ設定
   195

   196			;	* 読み書き共通処理 *
   197

   198	00B6 AF		RWOPER:	XOR	A		;
偽(0)値取得
   199	00B7 327101		LD	(ERFLAG),A	;
異常ﾌﾗｸﾞ初期化
   200	00BA 3A6401		LD	A,(SEKSEC)	;
BDOS指定ｾｸﾀ番号取得
   201				REPT	SECSHF		;
[ﾏｸﾛ:A=A÷SECSHF]
   202				OR	A

   203				RRA

   204				ENDM

   205	00BD+B7			OR	A		;
ｷｬﾘｰ ﾌﾗｸﾞ解除
   206	00BE+1F			RRA			;
(÷2)
   207	00BF+B7			OR	A		;
ｷｬﾘｰ ﾌﾗｸﾞ解除
   208	00C0+1F			RRA			;
(÷4)物理ｾｸﾀ番号取得
   209	00C1 326901		LD	(SEKHST),A	;
物理ｾｸﾀ番号保存
   210

   211			;	( ﾊﾞｯﾌｧ有効/無効検査 )
   212

   213	00C4 216A01		LD	HL,HSTACT	;
ﾊﾞｯﾌｧ有効ﾌﾗｸﾞ値ﾎﾟｲﾝﾀ取得
   214	00C7 7E			LD	A,(HL)		;
ﾊﾞｯﾌｧ有効ﾌﾗｸﾞ値取得
   215	00C8 3601		LD	(HL),1		;
ﾊﾞｯﾌｧ有効ﾌﾗｸﾞ設定
   216	00CA B7			OR	A		;
ﾊﾞｯﾌｧ有効/無効検査
   217	00CB CAF200		JP	Z,FILHST	;
ﾊﾞｯﾌｧ無効でﾊﾞｯﾌｧ読み込みへ分岐
   218

   219			;	( ﾊﾞｯﾌｧ有効、ﾊﾞｯﾌｧ内ﾚｺｰﾄﾞか検査 )
   220

   221	00CE 3A6101		LD	A,(SEKDSK)	;
BDOS指定ﾃﾞｨｽｸ番号取得
   222	00D1 216501		LD	HL,HSTDSK	;
ﾊﾞｯﾌｧ対応ﾃﾞｨｽｸ番号値ﾎﾟｲﾝﾀ取得
   223	00D4 BE			CP	(HL)		;
指定値とﾊﾞｯﾌｧ値のﾃﾞｨｽｸ番号比較
   224	00D5 C2EB00		JP	NZ,NMATCH	;
不一致で分岐
   225			;				;
(同一ﾄﾞﾗｲﾌﾞ、ﾄﾗｯｸ番号比較検査)
   226	00D8 216601		LD	HL,HSTTRK	;
ﾊﾞｯﾌｧ対応ﾄﾗｯｸ番号値ﾎﾟｲﾝﾀ取得
   227	00DB CD5301		CALL	TRKCMP		;
指定ﾄﾗｯｸ番号とﾊﾞｯﾌｧ対応ﾄﾗｯｸ番号比較
   228	00DE C2EB00		JP	NZ,NMATCH	;
不一致で分岐
   229			;				;
(同一ﾄﾞﾗｲﾌﾞ,ﾄﾗｯｸ、物理ｾｸﾀ番号比較検査)
   230	00E1 3A6901		LD	A,(SEKHST)	;
指定物理ｾｸﾀ番号取得
   231	00E4 216801		LD	HL,HSTSEC	;
ﾊﾞｯﾌｧ対応物理ｾｸﾀ番号値ﾎﾟｲﾝﾀ取得
   232	00E7 BE			CP	(HL)		;
指定物理ｾｸﾀ番号とﾊﾞｯﾌｧ対応ｾｸﾀ番号比較
   233	00E8 CA0F01		JP	Z,MATCH		;
ﾄﾞﾗｲﾌﾞ,ﾄﾗｯｸ,ｾｸﾀ一致で分岐
   234

   235			;	( 非ﾊﾞｯﾌｧ内ﾚｺｰﾄﾞ: 事前書き込み処理 )
   236

   237	00EB 3A6B01	NMATCH:	LD	A,(HSTWRT)	;
ﾊﾞｯﾌｧ書き込み保留中ﾌﾗｸﾞ取得
   238	00EE B7			OR	A		;
ﾊﾞｯﾌｧ保留書き込み有無検査
   239	00EF C45F01		CALL	NZ,WRITEHST	;
書き込み保留でﾊﾞｯﾌｧ書き出し
   240

   241			;	( 事前読み込み検査と実行処理 )
   242

   243	00F2 3A6101	FILHST:	LD	A,(SEKDSK)	;
BDOS指定ﾃﾞｨｽｸ番号取得
   244	00F5 326501		LD	(HSTDSK),A	;
ﾊﾞｯﾌｧ対応ﾃﾞｨｽｸ番号更新保存
   245	00F8 2A6201		LD	HL,(SEKTRK)	;
BDOS指定ﾄﾗｯｸ番号取得
   246	00FB 226601		LD	(HSTTRK),HL	;
ﾊﾞｯﾌｧ対応ﾄﾗｯｸ番号更新保存
   247	00FE 3A6901		LD	A,(SEKHST)	;
指定物理ｾｸﾀ番号取得
   248	0101 326801		LD	(HSTSEC),A	;
ﾊﾞｯﾌｧ対応ｾｸﾀ番号更新保存
   249	0104 3A7201		LD	A,(RSFLAG)	;
必要時物理ｾｸﾀ読み込み要求ﾌﾗｸﾞ値取得
   250	0107 B7			OR	A		;
物理ｾｸﾀ読み込み有無検査
   251	0108 C46001		CALL	NZ,READHST	;
読み込み有りで指定対応物理ｾｸﾀ読み込み
   252	010B AF			XOR	A		;
偽(0)値取得
   253	010C 326B01		LD	(HSTWRT),A	;
ﾊﾞｯﾌｧ書き込み保留中ﾌﾗｸﾞ解除
   254

   255			;	( ﾊﾞｯﾌｧ内ﾚｺｰﾄﾞ: ﾊﾞｯﾌｧ間転送 )
   256

   257	010F 3A6401	MATCH:	LD	A,(SEKSEC)	;
BDOS指定ｾｸﾀ番号取得
   258	0112 E603		AND	SECMSK		;
物理ｾｸﾀ内ﾚｺｰﾄﾞ番号取得
   259	0114 6F			LD	L,A		;
下位に物理ｾｸﾀ内ﾚｺｰﾄﾞ番号設定
   260	0115 2600		LD	H,0		;
上位0設定
   261				REPT	7		;
[ﾏｸﾛ:HL=HL×7]
   262				ADD	HL,HL

   263				ENDM

   264	0117+29			ADD	HL,HL		;
(×2)ﾚｺｰﾄﾞ単位ｵﾌｾｯﾄ取得(×128)
   265	0118+29			ADD	HL,HL		;
(×4)
   266	0119+29			ADD	HL,HL		;
(×8)
   267	011A+29			ADD	HL,HL		;
(×16)
   268	011B+29			ADD	HL,HL		;
(×32)
   269	011C+29			ADD	HL,HL		;
(×64)
   270	011D+29			ADD	HL,HL		;
(×128)
   271	011E 117701		LD	DE,HSTBUF	;
物理ｾｸﾀ ﾃﾞｰﾀ ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
   272	0121 19			ADD	HL,DE		;
対応ﾚｺｰﾄﾞに対するﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ取得
   273	0122 EB			EX	DE,HL		;
ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀをDEへ退避(仮転送元)
   274	0123 2A7501		LD	HL,(DMAADR)	;
指定DMA(転送)基準ｱﾄﾞﾚｽ取得(仮転送先)
   275	0126 0E80		LD	C,128		;
ﾊﾞｲﾄ数/1ﾚｺｰﾄﾞ値取得
   276	0128 3A7301		LD	A,(READOP)	;
読み(1)/書き(0)処理ﾌﾗｸﾞ取得
   277	012B B7			OR	A		;
読みor書き検査
   278	012C C23501		JP	NZ,RWMOVE	;
読み込みで分岐
   279

   280			;	(( 書き込み ))
   281

   282	012F 3E01		LD	A,1		;
真(1)値取得
   283	0131 326B01		LD	(HSTWRT),A	;
ﾊﾞｯﾌｧ書き込み保留中ﾌﾗｸﾞ設定
   284	0134 EB			EX	DE,HL		;
DE:DMAｱﾄﾞﾚｽ(転送元),HL:ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ(転送先)
   285

   286			;	(( 読み込み ))
   287

   288	0135 1A		RWMOVE:	LD	A,(DE)		;
転送元から1ﾊﾞｲﾄ取得
   289	0136 13			INC	DE		;
転送元ﾎﾟｲﾝﾀ進行(+1)
   290	0137 77			LD	(HL),A		;
転送先へ1ﾊﾞｲﾄ設定
   291	0138 23			INC	HL		;
転送先ﾎﾟｲﾝﾀ進行(+1)
   292	0139 0D			DEC	C		;
転送ﾊﾞｲﾄ数ｶｳﾝﾀ減数(-1)
   293	013A C23501		JP	NZ,RWMOVE	;
128ﾊﾞｲﾄ転送まで継続へ
   294

   295			;	( ﾃﾞｨﾚｸﾄﾘ書き込み検査 )
   296

   297	013D 3A7401		LD	A,(WRTYPE)	;
書き込み種別番号取得
   298	0140 FE01		CP	WRDIR		;
ﾃﾞｨﾚｸﾄﾘ書き込みか検査
   299	0142 3A7101		LD	A,(ERFLAG)	;
現在までの異常ﾌﾗｸﾞ値取得
   300	0145 C0			RET	NZ		;
ﾃﾞｨﾚｸﾄﾘ書き込み以外で呼び出し元へ復帰
   301			;

   302	0146 B7			OR	A		;
異常有無検査
   303	0147 C0			RET	NZ		;
異常有りで呼び出し元へ復帰
   304

   305			;	( ﾃﾞｨﾚｸﾄﾘ物理ｾｸﾀ書き込み )
   306

   307	0148 AF			XOR	A		;
偽(0)値取得
   308	0149 326B01		LD	(HSTWRT),A	;
ﾊﾞｯﾌｧ書き込み保留中ﾌﾗｸﾞ解除
   309	014C CD5F01		CALL	WRITEHST	;
指定対応物理ｾｸﾀ書き込み
   310	014F 3A7101		LD	A,(ERFLAG)	;
異常ﾌﾗｸﾞ値取得
   311	0152 C9			RET			;
呼び出し元へ復帰
   312

   313			;	( 指定ﾄﾗｯｸ番号とﾊﾞｯﾌｧ対応ﾄﾗｯｸ番号比較 )
   314			;	入: HL:未配置区画orﾊﾞｯﾌｧ対応ﾄﾗｯｸ番号値ﾎﾟｲﾝﾀ  出: ZF:一致(=1)/不一致(=0)ﾌﾗｸﾞ
   315

   316	0153 EB		TRKCMP:	EX	DE,HL		;
未配置区画orﾊﾞｯﾌｧ対応ﾄﾗｯｸ番号値ﾎﾟｲﾝﾀをDEへ移動
   317	0154 216201		LD	HL,SEKTRK	;
BDOS指定ﾄﾗｯｸ番号値ﾎﾟｲﾝﾀ取得
   318	0157 1A			LD	A,(DE)		;
未配置区画orﾊﾞｯﾌｧ対応ﾄﾗｯｸ番号下位取得
   319	0158 BE			CP	(HL)		;
指定値と未配置区画orﾊﾞｯﾌｧ値のﾄﾗｯｸ番号下位比較
   320	0159 C0			RET	NZ		;
不一致で呼び出し元へ復帰
   321			;

   322	015A 13			INC	DE		;
未配置区画orﾊﾞｯﾌｧ対応ﾄﾗｯｸ番号値ﾎﾟｲﾝﾀ進行(+1)
   323	015B 23			INC	HL		;
指定ﾄﾗｯｸ番号値ﾎﾟｲﾝﾀ進行(+1)
   324	015C 1A			LD	A,(DE)		;
未配置区画orﾊﾞｯﾌｧ対応ﾄﾗｯｸ番号上位取得
   325	015D BE			CP	(HL)		;
指定値と未配置区画orﾊﾞｯﾌｧ値のﾄﾗｯｸ番号上位比較
   326	015E C9			RET			;
結果ﾌﾗｸﾞ(ZF)と共に呼び出し元へ復帰
   327

   328			; 以下に物理ｾｸﾀの読み書き処理を記述します。
   329			; HSTDSK: 実ﾄﾞﾗｲﾌﾞ番号
   330			; HSTTRK: 実ﾄﾗｯｸ番号
   331			; HSTSEC: 実ｾｸﾀ番号(0基準)
   332			; HSTSIZ: ﾊﾞｲﾄ数
   333			; HSTBUF: ｾｸﾀ ﾊﾞｯﾌｧ先頭ｱﾄﾞﾚｽ
   334			; ERFLAG: 正常/異常終了ﾌﾗｸﾞ
   335			; 処理中に異常が発生した場合、ERFLAG=1で復帰します。
   336

   337			;	( 物理ｾｸﾀ書き込み )
   338

   339			WRITEHST:

   340	015F C9			RET			;
呼び出し元へ復帰
   341

   342			READHST:

   343	0160 C9			RET			;
呼び出し元へ復帰
   344

   345			;	* 未初期化変数 *
   346

   347	0161		SEKDSK:	DS	1		;
BDOS指定ﾃﾞｨｽｸ番号
   348	0162		SEKTRK:	DS	2		;
BDOS指定ﾄﾗｯｸ番号
   349	0164		SEKSEC:	DS	1		;
BDOS指定ｾｸﾀ番号
   350			;

   351	0165		HSTDSK:	DS	1		;
ﾊﾞｯﾌｧ対応ﾃﾞｨｽｸ番号
   352	0166		HSTTRK:	DS	2		;
ﾊﾞｯﾌｧ対応ﾄﾗｯｸ番号
   353	0168		HSTSEC:	DS	1		;
ﾊﾞｯﾌｧ対応ｾｸﾀ番号
   354			;

   355	0169		SEKHST:	DS	1		;
物理ｾｸﾀ番号
   356	016A		HSTACT:	DS	1		;
ﾊﾞｯﾌｧ有効ﾌﾗｸﾞ(0=無効,1=有効)
   357	016B		HSTWRT:	DS	1		;
ﾊﾞｯﾌｧ書き込み保留中ﾌﾗｸﾞ(0=保留無し,1=保留有り)
   358			;

   359	016C		UNACNT:	DS	1		;
未配置区画ﾚｺｰﾄﾞ数ｶｳﾝﾀ
   360	016D		UNADSK:	DS	1		;
未配置区画ﾃﾞｨｽｸ番号
   361	016E		UNATRK:	DS	2		;
未配置区画ﾄﾗｯｸ番号
   362	0170		UNASEC:	DS	1		;
未配置区画ｾｸﾀ番号
   363			;

   364	0171		ERFLAG:	DS	1		;
異常ﾌﾗｸﾞ(0=正常,1=異常)
   365	0172		RSFLAG:	DS	1		;
必要時物理ｾｸﾀ読み込み要求ﾌﾗｸﾞ
   366	0173		READOP:	DS	1		;
読み(1)/書き(0)処理ﾌﾗｸﾞ
   367	0174		WRTYPE:	DS	1		;
書き込み種別番号
   368	0175		DMAADR:	DS	2		;
指定DMA(転送)基準ｱﾄﾞﾚｽ
   369	0177		HSTBUF:	DS	HSTSIZ		;
物理ｾｸﾀ ﾃﾞｰﾀ ﾊﾞｯﾌｧ
   370			;

   371			; ENDEFﾏｸﾛの実施はここで行います。
   372

   373	0377			END


付録　追補H 用語一覧

address (ｱﾄﾞﾚｽ)
ﾒﾓﾘ内のﾊﾞｲﾄ位置を表す数。 CP/M内では物理的と論理的の2つの種類のｱﾄﾞﾚｽがあります。 物理ｱﾄﾞﾚｽはｺﾝﾋﾟｭｰﾀ ﾒﾓﾘ空間の唯一絶対を参照します。 論理ｱﾄﾞﾚｽは基準位置からの相対的なﾊﾞｲﾄでの偏移または差を参照します。 標準のCP/Mﾌﾟﾛｸﾞﾗﾑはｱﾄﾞﾚｽ0100Hに読み込まれ、基準値、ﾌﾟﾛｸﾞﾗﾑの最初の命令は0100Hの物理ｱﾄﾞﾚｽと0000Hの相対ｱﾄﾞﾚｽまたはｵﾌｾｯﾄを持ちます。
ALV:allocation vector (配置区画ﾍﾞｸﾀ)
配置区画ﾍﾞｸﾀは各登録ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞに対してBIOSに保持されます。 このﾍﾞｸﾀはﾄﾞﾗｲﾌﾞの各配置区画に対して1ﾋﾞｯﾄのﾋﾞｯﾄ列から成ります。 特定の配置区画に対応するﾋﾞｯﾄはその区画が割り当てられてしまうと1に、さもなければ0に設定されます。 このﾍﾞｸﾀの先頭2ﾊﾞｲﾄはAL0とAL1のﾊﾞｲﾄで初期化され、故にﾃﾞｨﾚｸﾄﾘ区画を割り当てます。 CP/M機能27はこの配置区画ﾍﾞｸﾀのｱﾄﾞﾚｽを返します。
AL0, AL1 (予約配置区画ﾍﾞｸﾀ)
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾌﾞﾛｯｸ内のこの2ﾊﾞｲﾄはﾃﾞｨﾚｸﾄﾘに対するﾃﾞｰﾀ配置区画を予約します。 これら2ﾊﾞｲﾄはﾄﾞﾗｲﾌﾞが登録される時に配置区画ﾍﾞｸﾀの先頭2ﾊﾞｲﾄに複写されます。 配置区画ﾍﾞｸﾀをご覧ください。
ALV
配置区画ﾍﾞｸﾀをご覧ください。
ambiguous filename (曖昧ﾌｧｲﾙ名)
基本ﾌｧｲﾙ名、ﾌｧｲﾙ形式名またはその両方にCP/Mのﾜｲﾙﾄﾞｶｰﾄﾞ文字 ? または * を含むﾌｧｲﾙ名です。 これらのﾜｲﾙﾄﾞｶｰﾄﾞ文字でﾌｧｲﾙ名内の文字を置き換えると、曖昧ﾌｧｲﾙ名を作成し、1つの命令行で複数のCP/Mﾌｧｲﾙを容易に参照できます。
American Standard Code for Information Interchange (米国標準情報交換ｺｰﾄﾞ)
ASCIIをご覧ください。
applications program (応用ﾌﾟﾛｸﾞﾗﾑ)
特定の問題を解決するために設計されたﾌﾟﾛｸﾞﾗﾑです。 代表的な応用ﾌﾟﾛｸﾞﾗﾑは商用会計ﾊﾟｯｹｰｼﾞ、ﾜｰﾌﾟﾛ(編集)ﾌﾟﾛｸﾞﾗﾑ、郵送一覧表ﾌﾟﾛｸﾞﾗﾑです。
archive attribute (恒久保管属性)
ﾌｧｲﾙ属性はﾃﾞｨﾚｸﾄﾘ要素内のT3(FCB+11)の最上位ﾋﾞｯﾄにより制御されます。 この属性はそのﾌｧｲﾙが恒久保管(書き込み禁止)にされてしまうと1に設定されます。
argument (引数/変数)
問題点の決まり文句に適切な意味を与えるために名前、文字、数値に変更できる場所を示す記号で、通常は文字です。
ASCII
米国標準情報交換ｺｰﾄﾞ。 ASCIIはﾒﾓﾘ内で文字を表すために使用される7ﾋﾞｯﾄ数値文字ｺｰﾄﾞの標準の組です。 各文字は通常0に設定した最上位ﾋﾞｯﾄでﾒﾓﾘの1ﾊﾞｲﾄを必要とします。 文字は数字、文字、記号です。 ASCIIﾌｧｲﾙは画面または紙に正確に表示または印刷できます。
assembler (ｱｾﾝﾌﾞﾗ)
ｱｾﾝﾌﾞﾘ言語をﾊﾞｲﾅﾘ機械語ｺｰﾄﾞに翻訳するﾌﾟﾛｸﾞﾗﾑです。 ｱｾﾝﾌﾞﾘ言語はCPUの命令の組を標すために使用する簡単なﾆｰﾓﾆｯｸの組です。 本書の第3章でASMをご覧ください。
back-up (ﾊﾞｯｸｱｯﾌﾟ)
安全に保持するため作られたﾃﾞｨｽｸまたはﾌｧｲﾙの複写物、またはﾃﾞｨｽｸまたはﾌｧｲﾙの重複作成。
Basic Disk Operating System (基本ﾃﾞｨｽｸ ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ)
BDOSをご覧ください。
BDOS
基本ﾃﾞｨｽｸ ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ。 CP/Mｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑのBDOS部は操作のために使用者ﾌﾟﾛｸﾞﾗﾑに対するｲﾝﾀｰﾌｪｰｽを提供します。 このｲﾝﾀｰﾌｪｰｽは0ﾍﾟｰｼﾞの0005H番地の呼び出しを通してBDOSにさせることができる機能呼び出しの組の形式です。 CP/M下で走行する使用者ﾌﾟﾛｸﾞﾗﾑは他のCP/Mｼｽﾃﾑと将来版との互換性を保つために全ての入出力操作に対してBDOS機能を使用すべきです。 一般的にBDOSはBIOS直下の上位ﾒﾓﾘにあります。
bias (ﾊﾞｲｱｽ)
BIOS部の原点ｱﾄﾞﾚｽに加えられる時にMOVCPMｲﾒｰｼﾞ内のBIOS部のｱﾄﾞﾚｽ1F80Hを生成する、そのｱﾄﾞﾚｽ値です。 BOOT部原点に加えられる時にMOVCPMｲﾒｰｼﾞ内のBOOT部のｱﾄﾞﾚｽ0900Hを生成する、それもﾊﾞｲｱｽ値です。 CP/Mｼｽﾃﾑを補修する時にDDTまたはSID下のR命令でこれらのﾊﾞｲｱｽ値を使用しなければなりません。 行わない場合、補修したｼｽﾃﾑは停止するかもしれません。
binary (ﾊﾞｲﾅﾘ)
2進数を基準。 2進数の1桁は0と1の2つの値の1つを持つことができます。 2進数値はﾊｰﾄﾞｳｪｱがONとOFFの2つの状態を大変容易に表せるため、ｺﾝﾋﾟｭｰﾀで使用されます。 一般的にﾒﾓﾘ内のﾋﾞｯﾄは1ﾊﾞｲﾅﾘ(2進数)桁を表します。
Basic Input/Output System (基本入出力ｼｽﾃﾑ)
BIOSをご覧ください。
BIOS
基本入出力ｼｽﾃﾑ。 BIOSはCP/Mｼｽﾃﾑのﾊｰﾄﾞｳｪｱ依存部だけです。 基本的な入出力操作の組をBDOSに提供します。 BIOSは通常、使用者、ﾊｰﾄﾞｳｪｱ製造業者または無関係なｿﾌﾄｳｪｱ供給者により書かれたｱｾﾝﾌﾞﾘ言語で、CP/M移植性の鍵です。 BIOSはBIOSの前方の標準化したｼﾞｬﾝﾌﾟ ﾃｰﾌﾞﾙとﾃﾞｨｽｸ環境を定義するﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾃｰﾌﾞﾙの組を通してﾊｰﾄﾞｳｪｱ環境をCP/Mｼｽﾃﾑにｲﾝﾀｰﾌｪｰｽします。 従ってBIOSは補完的ﾃｰﾌﾞﾙ駆動入出力ｼｽﾃﾑでのCP/Mを提供します。
BIOS base
既定によりﾒﾓﾘ内BIOS部の最低位ｱﾄﾞﾚｽはBIOSｼﾞｬﾝﾌﾟ ﾃｰﾌﾞﾙ内の先頭移行点でなければなりません。
bit (ﾋﾞｯﾄ)
ﾒﾓﾘの切り替えはON(1)またはOFF(0)に設定できます。 ﾋﾞｯﾄは8ﾋﾞｯﾄで1ﾊﾞｲﾄに集約され、Intel 8080またはZilog Z80で直接的にｱｸｾｽ可能な最低単位です。

協約によりﾊﾞｲﾄ内のﾋﾞｯﾄは右から最下位ﾋﾞｯﾄの0、左に最上位ﾋﾞｯﾄの7と番号付けされます。 ﾋﾞｯﾄ値は下位側から4ﾋﾞｯﾄ単位の組による16進表記で度々表されます。 4ﾋﾞｯﾄの各組は0～15の値を持て、従って16進1桁により容易に表せます。

BLM (配置区画ﾏｽｸ)
配置区画ﾏｽｸをご覧ください。
block (配置区画)
ﾃﾞｨｽｸ空間割り当ての基本単位。 各ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞはBIOSのﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部で定義された固定の配置区画容量(BLS)を持ちます。 区画は1K, 2K, 4K, 8K, 16Kの連続したﾊﾞｲﾄから成り得ます。 区画は0からの相対で番号付けされ、その結果、各区画は唯一で、配置区画容量倍の配置区画番号に等しいﾌｧｲﾙでの置き換えﾊﾞｲﾄを持ちます。
block mask (BLM) (配置区画ﾏｽｸ)
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部(DPB+3)でのﾊﾞｲﾄ値です。 配置区画ﾏｽｸは常に1配置区画内の128ﾊﾞｲﾄ ｾｸﾀ数より1少ない値です。 BLM=2BSH-1であることに注意してください。
block shift (BSH) (配置区画ｼﾌﾄ数)
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部(DPB+2)でのﾊﾞｲﾄ値です。 配置区画ｼﾌﾄ数と配置区画ﾏｽｸ値は配置区画容量により決められます。 BLM=2BSH-1であることに注意してください。
blocking & deblocking algorithm ((ｾｸﾀの)合成と分解手法)
いくつかのﾃﾞｨｽｸ補助ｼｽﾃﾑでのﾃﾞｨｽｸ ｾｸﾀ容量は128ﾊﾞｲﾄより大きく、通常、256, 512, 1024ﾊﾞｲﾄです。 実ｾｸﾀ容量が128ﾊﾞｲﾄより大きな場合、実ｾｸﾀはﾒﾓﾘ内でﾊﾞｯﾌｧされ、128ﾊﾞｲﾄCP/MｾｸﾀはBIOSﾃﾞｨｽｸ入出力ﾙｰﾁﾝと実際のﾃﾞｨｽｸ入出力間で合成と分解手法による付加部分を追加することで合成と分解をされなければなりません。 合成と分解手法は標準CP/M設置で全体が128ﾊﾞｲﾄ ｾｸﾀだけで成るﾃﾞｨｽｸでも正確に機能することをBDOSとBIOSに許します。
BLS
ﾊﾞｲﾄでの配置区画容量。 配置区画をご覧ください。
boot (ﾌﾞｰﾄ)
ﾒﾓﾘ内へのｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ読み込み処理。 ﾌﾞｰﾄ ﾌﾟﾛｸﾞﾗﾑはｺﾝﾋﾟｭｰﾀの電源投入またはﾘｾｯﾄ時に自動的に実行される小さな少量のｺｰﾄﾞです。 この処理はｺｰﾙﾄﾞ ﾌﾞｰﾄまたはｺｰﾙﾄﾞ開始で時々呼ばれます。 ﾌﾞｰﾄ ﾌﾟﾛｸﾞﾗﾑはｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑが管理するﾊｰﾄﾞｳｪｱ環境とﾒﾓﾘ容量に対して専用化されなければなりません。 一般的にﾌﾞｰﾄはｼｽﾃﾑ ﾃﾞｨｽｸでｼｽﾃﾑ ﾄﾗｯｸの先頭ｾｸﾀにあります。 実行時、ﾌﾞｰﾄはｼｽﾃﾑ ﾄﾗｯｸの残りのｾｸﾀをCP/Mｼｽﾃﾑが形成された場所の上位ﾒﾓﾘ内に読み込みます。 最後にﾌﾞｰﾄはBIOSｼﾞｬﾝﾌﾟ ﾃｰﾌﾞﾙ内のBOOT移行点に実行を移し、その結果ｼｽﾃﾑは自身を開始できます。 この場合のﾌﾞｰﾄ ﾌﾟﾛｸﾞﾗﾑはSYSGENｲﾒｰｼﾞ内0900Hに配置されるべきです。 代わりにﾌﾞｰﾄ ﾌﾟﾛｸﾞﾗﾑはROM内に配置できます。
bootstrap (ﾌﾞｰﾄｽﾄﾗｯﾌﾟ)
ﾌﾞｰﾄをご覧ください。
BSH
配置区画ｼﾌﾄ数をご覧ください。
BTREE
大きなﾃﾞｰﾀ ﾍﾞｰｽ ｼｽﾃﾑの索引に対する標準構成となる一般目的ﾌｧｲﾙ ｱｸｾｽ法です。 BTREEは挿入、削除、検索、次検索のようなﾌｧｲﾙ操作の全範囲に渡り、最適に近い性能を提供します。
buffer (ﾊﾞｯﾌｧ)
情報の転送中に一時的にﾃﾞｰﾀを保存するﾒﾓﾘの領域です。
built-in commands (組み込み命令)
ﾒﾓﾘ内に恒久的に存在する命令です。 これらはﾃﾞｨｽｸからｱｸｾｽされないため素早い応答です。
byte (ﾊﾞｲﾄ)
ﾒﾓﾘまたはﾃﾞｨｽｸ記憶装置の単位で8ﾋﾞｯﾄを含みます。 ﾊﾞｲﾄは0～255間のﾊﾞｲﾅﾘ値を表せ、Intel 8080またはZilog Z80のような8ﾋﾞｯﾄCPUで直接的にｱｸｾｽできるﾒﾓﾘの最小単位です。
CCP (ｺﾝｿｰﾙ命令処理部)
ｺﾝｿｰﾙ命令処理部。 CCPはCP/Mｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑの1部署です。 BDOS部の直下に読み込まれ、ｺﾝｿｰﾙ使用者により入力された命令を解釈し実行します。 通常、これらの命令はCCPが読み込んで呼び出すﾌﾟﾛｸﾞﾗﾑです。 終了で命令ﾌﾟﾛｸﾞﾗﾑはCCPが上書きされていなければCCPに制御を戻すかもしれません。 上書きされたなら、そのﾌﾟﾛｸﾞﾗﾑは0番地へのｼﾞｬﾝﾌﾟ、BDOSｼｽﾃﾑ ﾘｾｯﾄ(機能0)のどちらかにより開始されるｳｫｰﾑ ﾌﾞｰﾄ操作、またはｺｰﾙﾄﾞ ﾌﾞｰﾄによりCCPをﾒﾓﾘ内に再読み込みできます。 上位ﾒﾓﾘ位置であることを除いて、CCPは他の標準CP/Mﾌﾟﾛｸﾞﾗﾑのように動作し、現在、入出力操作についてはBDOS機能呼び出しだけを行います。
CCP base
ﾒﾓﾘ内CCP部の最低ｱﾄﾞﾚｽ。 この用語はCCPが一般的に上位ﾒﾓﾘの最下位CP/M部のため、ﾒﾓﾘ内のCP/Mｼｽﾃﾑの基準に時々参照します。
checksum vector (CSV) (検査ﾍﾞｸﾀ)
検査されるべき各ﾃﾞｨﾚｸﾄﾘ ｾｸﾀに対して1ﾊﾞｲﾄで形成されるBIOS内のﾃﾞｰﾀ領域、それらはCKSﾊﾞｲﾄです。 CKSをご覧ください。 検査(ﾁｪｯｸｻﾑ)ﾍﾞｸﾀは各登録ﾄﾞﾗｲﾌﾞに対して初期化されて保持されます。 ｼｽﾃﾑによりｱｸｾｽされる各ﾃﾞｨﾚｸﾄﾘはﾁｪｯｸｻﾑ計算の結果が検査ﾍﾞｸﾀの1つと比較されます。 不一致なら、そのﾄﾞﾗｲﾌﾞは読み出し専用状態に設定されます。 この性質は新ﾃﾞｨｽｸの登録なしの不注意なﾃﾞｨｽｸ切り替えから使用者を守ります。 新ﾃﾞｨｽｸが登録されないと、それは旧ﾃﾞｨｽｸとして同一に扱われ、書き込みが行われる場合にﾃﾞｰﾀが破壊されるかもしれません。
CKS (検査ﾍﾞｸﾀ数)
ﾃﾞｨﾚｸﾄﾘ ｱｸｾｽで合計値が検査されるべきﾃﾞｨﾚｸﾄﾘ ﾚｺｰﾄﾞの数。 これはBIOS内に配置されるﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部内のﾊﾟﾗﾒｰﾀです。 CKS値が0なら、ﾃﾞｨﾚｸﾄﾘ ﾚｺｰﾄﾞは検査されません。 CKSはﾃﾞｨﾚｸﾄﾘ ﾚｺｰﾄﾞ数ではなく検査すべき実際のﾃﾞｨﾚｸﾄﾘ要素(ｴﾝﾄﾘ)数であるDISKDEFﾏｸﾛ ﾗｲﾌﾞﾗﾘのﾊﾟﾗﾒｰﾀでもあります。
cold boot (ｺｰﾙﾄﾞ ﾌﾞｰﾄ)
ﾌﾞｰﾄをご覧ください。 ｺｰﾙﾄﾞ ﾌﾞｰﾄはBIOSｼﾞｬﾝﾌﾟ ﾃｰﾌﾞﾙ内のBOOT移行点へのｼﾞｬﾝﾌﾟでも参照します。
COM
CP/M命令ﾌｧｲﾙ用ﾌｧｲﾙ形式名。 命令ﾌｧｲﾙ(command file)をご覧ください。
command (命令行)
CP/M命令行。 一般的にCP/M命令行は命令ｷｰﾜｰﾄﾞ、命令付属部、ｷｬﾘｯｼﾞ ﾘﾀｰﾝの3つの部分を持ちます。 命令を実行するには、ｺﾝｿｰﾙでCP/M指示子の直後にCP/M命令行を入力し、ｷｬﾘｯｼﾞ ﾘﾀｰﾝまたはEnterｷｰを押下してください。
command file (命令ﾌｧｲﾙ)
ﾌｧｲﾙ形式COMの実行可能なﾌﾟﾛｸﾞﾗﾑ ﾌｧｲﾙです。 命令ﾌｧｲﾙは読み込み/設定されるべく準備された機械語ｵﾌﾞｼﾞｪｸﾄで、絶対ｱﾄﾞﾚｽ0100Hで実行されます。 命令ﾌｧｲﾙを実行するには、CP/M命令行の命令ｷｰﾜｰﾄﾞとして基本ﾌｧｲﾙ名を入力してください。
command keyword (命令ｷｰﾜｰﾄﾞ)
CP/M命令を識別する名前で、普通、ﾌｧｲﾙ形式COMのﾌｧｲﾙの基本ﾌｧｲﾙ名、または組み込み命令名です。 命令ｷｰﾜｰﾄﾞは命令行内で命令付属部とｷｬﾘｯｼﾞ ﾘﾀｰﾝに先行します。
command syntax (命令構文規則)
命令を入力する正しい方法を定義する宣言。 正しい構成は一般的に命令ｷｰﾜｰﾄﾞ、命令付属部、ｷｬﾘｯｼﾞ ﾘﾀｰﾝを含みます。 構文規則を示す行は普通、命令を入力する時に実際の値で置き換えるべき記号を含みます。
command tail (命令付属部)
命令行内で命令ｷｰﾜｰﾄﾞに続く命令の一部です。 命令付属部はﾄﾞﾗｲﾌﾞ指定、ﾌｧｲﾙ名とﾌｧｲﾙ形式、任意選択または引数を含められます。 いくつかの命令は命令付属部を必要としません。
CON
CP/Mのｺﾝｿｰﾙ装置を表すﾆｰﾓﾆｯｸです。 例えばCP/M命令 PIP CON:=TEST.SUB はｺﾝｿｰﾙ装置にTEST.SUBを表示します。 STAT命令の説明は様々な物理装置に論理装置CON:を割り当てる方法を告げます。 ｺﾝｿｰﾙ(console)をご覧ください。
concatenate (連結)
複数の独立したﾌｧｲﾙを指定した順で1つの新規ﾌｧｲﾙに複写するためのPIP操作の名前。
concurrency (同時動作)
2つの処理または操作の同時実行。
CONIN
ｺﾝｿｰﾙ装置から文字を読むﾙｰﾁﾝへのBIOS移行点。
CONOUT
ｺﾝｿｰﾙ装置へ文字を送るﾙｰﾁﾝへのBIOS移行点。
console (ｺﾝｿｰﾙ)
基本入出力装置。 ｺﾝｿｰﾙは使用者がｵﾍﾟﾚﾃｨﾝｸﾞ ｼｽﾃﾑまたは応用ﾌﾟﾛｸﾞﾗﾑと通信する場合に通る画面またはﾃﾚﾀｲﾌﾟのような表現装置とｷｰﾎﾞｰﾄﾞから成ります。
Console Command Processor
CCPをご覧ください。
CONST
ｺﾝｿｰﾙ装置の状態を返すﾙｰﾁﾝへのBIOS移行点。
control character (制御文字)
非表示組み合わせ文字。 CP/Mは行編集機能のような簡単な命令としていくつかの制御文字を解釈します。 制御文字を入力するには、CTRLｷｰを押したまま指定の文字ｷｰを押下してください。
Control Program for Microcomputers
CP/Mをご覧ください。
CP/M
Control Program for Microcomputersの略語。 ｺﾝﾋﾟｭｰﾀの資源を管理し、ﾏｲｸﾛ ﾌﾟﾛｾｯｻを基とする広範囲なｺﾝﾋﾟｭｰﾀ ｼｽﾃﾑに対してｿﾌﾄｳｪｱを書くための標準ｼｽﾃﾑ ｲﾝﾀｰﾌｪｰｽを提供するｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ。
CP/M 1.4 compatibility (CP/M 1.4互換性)
CP/M 2に対してCP/M 1.4下で生成した単密度ﾃﾞｨｽｸを正しく読めるために、拡張ﾏｽｸは0で、配置区画容量1Kでなければなりません。 これはCP/M 2下のFCBが複数の拡張を含み得るためです。 FCBにより含み得る拡張数はEXM+1です。 CP/M 1.4互換性の問題は不順(ﾗﾝﾀﾞﾑ)ﾌｧｲﾙ入出力も関係します。 CP/M 1.4下の不順(ﾗﾝﾀﾞﾑ)ﾌｧｲﾙ入出力の実行では、ﾌｧｲﾙの各拡張についてFCBを保守しなければなりません。 この仕組みはCP/M 1.4下でｻﾎﾟｰﾄされる最大ﾌｧｲﾙ容量512Kﾊﾞｲﾄを越えないﾌｧｲﾙに対するCP/M 2での上位互換性です。 CP/M 2下で512Kﾊﾞｲﾄを越えるﾌｧｲﾙに対して不順(ﾗﾝﾀﾞﾑ)ﾌｧｲﾙ入出力を実行したいのなら、不順(ﾗﾝﾀﾞﾑ)読み込みと不順(ﾗﾝﾀﾞﾑ)書き込み、BDOS機能33, 34, 36を使用しなければなりません。 この場合、1つのFCBだけが使用され、CP/M 1.4互換性が必要とされるなら、ﾌﾟﾛｸﾞﾗﾑはどの方法を使用するかを決めるためにﾊﾞｰｼﾞｮﾝ番号取得、BDOS機能12を使用しなければなりません。
CP/M prompt (CP/M指示子)
CP/Mが次の命令を実行する準備が出来ていることを示す文字です。 CP/M指示子は大文字のA～Pと後続する>文字(例えばA>)から成ります。 A～Pは既定ﾄﾞﾗｲﾌﾞとして現在登録されているﾄﾞﾗｲﾌﾞを示します。 命令が組み込み命令または選択ﾄﾞﾗｲﾌﾞを前置した命令(例えばB:STAT)を除き、CP/Mは指定した命令ﾌｧｲﾙについてこのﾄﾞﾗｲﾌﾞを検索します。
CP/NET
ﾈｯﾄﾜｰｸ経由で共通資源へのｱｸｾｽを得ることをﾏｲｸﾛ ｺﾝﾋﾟｭｰﾀで可能にするDigital Researchﾈｯﾄﾜｰｸ ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑです。 CP/NETはCP/MやMP/M間を橋渡しするﾈｯﾄﾜｰｸでのﾏｽﾀMP/MとｸﾗｲｱﾝﾄCP/Mから成ります。
CSV
ﾁｪｯｸｻﾑ ﾍﾞｸﾀ(checksum vector)をご覧ください。
cursor (ｶｰｿﾙ)
ｺﾝｿｰﾙ画面の何処かに現れ得る1文字分の記号。 ｶｰｿﾙはｺﾝｿｰﾙで次の入力が実施される場所を示します。
data file (ﾃﾞｰﾀ ﾌｧｲﾙ)
情報を含むﾌｧｲﾙはﾌﾟﾛｸﾞﾗﾑにより作られます。
deblocking (部分要素への分解)
(ｾｸﾀの)合成と分解手法(blocking & deblocking algorithm)をご覧ください。
default (既定)
現在選択したﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞと使用者番号です。 ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞまたは使用者番号を指定しない何れかの命令は既定のﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞまたは使用者番号を参照します。 CP/Mが最初に開始されるとき、既定ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞはAﾄﾞﾗｲﾌﾞ、既定使用者番号は0です。
default buffer (既定転送ﾊﾞｯﾌｧ)
既定の128ﾊﾞｲﾄ ﾊﾞｯﾌｧは0ﾍﾟｰｼﾞの0080Hに保持されます。 CCPがCOMﾌｧｲﾙを読み込むとき、このﾊﾞｯﾌｧは命令付属部で初期化(COMﾌｧｲﾙ名後に入力したどの文字もがこのﾊﾞｯﾌｧ内に設定される)されます。 0080Hの先頭ﾊﾞｲﾄはこの命令付属部のﾊﾞｲﾄ数を含み、一方命令付属部自身は0081Hから始まります。 DDTとSID下のI命令はCCPと同じ方法でこのﾊﾞｯﾌｧを初期化します。
default FCB (既定FCB)
2つのFCBが0ﾍﾟｰｼﾞの005CHと006CHでCCPにより保持されます。 1つ目の既定FCBは命令付属部の最初の分離された領域から初期化されます。 2つ目の既定FCBは命令付属部の次の領域から初期化されます。
delimiter (分離子)
命令行内の異なる項目を分離する特殊文字で、例えば:はﾌｧｲﾙ命令からﾄﾞﾗｲﾌﾞ指定を分離します。 CCPは分離子として次の文字( . : = ; < > - 空白(ｽﾍﾟｰｽ) ｷｬﾘｯｼﾞ ﾘﾀｰﾝ(Enter) )を認証します。 各種CP/M命令は次の文字( , [ ] ( ) $ )も分離子として扱います。 CP/Mﾌｧｲﾙ名に小文字と分離子文字の使用を避けることが推奨されます。
DIR
ﾄﾞﾗｲﾌﾞのﾃﾞｨﾚｸﾄﾘ数を指定するDISKDEFﾏｸﾛ ﾗｲﾌﾞﾗﾘ内のﾊﾟﾗﾒｰﾀです。
DIR attribute (DIR属性)
ﾌｧｲﾙ属性です。 DIR属性のﾌｧｲﾙはDIR命令により表示できます。 このﾌｧｲﾙは既定使用者番号とﾄﾞﾗｲﾌﾞからだけｱｸｾｽできます。
DIRBUF (ﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧ)
通常、BIOSの最後に配置されるﾃﾞｨﾚｸﾄﾘ操作用の128ﾊﾞｲﾄの記録領域です。 DIRBFはﾃﾞｨﾚｸﾄﾘ操作中、BDOSにより使用されます。 DIRBFはﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ(DPBASE+8)内でこの記録領域の2ﾊﾞｲﾄのｱﾄﾞﾚｽも参照します。
directory (ﾃﾞｨﾚｸﾄﾘ)
ﾃﾞｨｽｸで各ﾌｧｲﾙに対するｴﾝﾄﾘを含むﾃﾞｨｽｸの一部です。 DIR命令の応答で、CP/Mはこのﾃﾞｨﾚｸﾄﾘ内に保存したﾌｧｲﾙ名を表示します。 ﾃﾞｨﾚｸﾄﾘはﾌｧｲﾙに割り当てた区画の位置も含みます。 各ﾃﾞｨﾚｸﾄﾘ要素(ｴﾝﾄﾘ)は32ﾊﾞｲﾄのFCBの形式で、1つのﾌｧｲﾙが各種要素を持つと言えども、この容量に依存します。 ｻﾎﾟｰﾄされるﾃﾞｨﾚｸﾄﾘ要素(ｴﾝﾄﾘ)の最大数はﾄﾞﾗｲﾌﾞのﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部のDRM値により指定されます。
directory element (ﾃﾞｨﾚｸﾄﾘ要素)
ﾃﾞｰﾀ構造。 ﾃﾞｨｽｸの各ﾌｧｲﾙは関連付けされた1つ以上の32ﾊﾞｲﾄのﾃﾞｨﾚｸﾄﾘ要素を持ちます。 ﾃﾞｨﾚｸﾄﾘ ｾｸﾀ(ﾚｺｰﾄﾞ)あたり4つのﾃﾞｨﾚｸﾄﾘ要素です。 ﾃﾞｨﾚｸﾄﾘ要素はﾃﾞｨﾚｸﾄﾘFCBとしても参照され得ます。
directory entry (ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ)
DIR命令で表示したﾌｧｲﾙ登録。 この項目は時々物理的なﾃﾞｨﾚｸﾄﾘ要素を参照します。
disk, diskette (ﾃﾞｨｽｸ, ﾃﾞｨｽｹｯﾄ)
ｺﾝﾋﾟｭｰﾀ ｼｽﾃﾑ内の大容量記憶装置に使用する磁気媒体。 ﾌﾟﾛｸﾞﾗﾑとﾃﾞｰﾀは音楽がｶｾｯﾄ ﾃｰﾌﾟに記録できるのと同じ方法でﾃﾞｨｽｸに記録されます。 ｺﾝﾋﾟｭｰﾀがONに切り替わるとき、CP/Mｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑは初めにﾃﾞｨｽｸから読み込まれなければなりません。 ﾃﾞｨｽｹｯﾄはより小容量の可搬型ﾌﾛｯﾋﾟｰ ﾃﾞｨｽｹｯﾄを参照し、一方ﾃﾞｨｽｸはﾃﾞｨｽｹｯﾄ、可搬型ｶｰﾄﾘｯｼﾞ ﾃﾞｨｽｸ、固定ﾊｰﾄﾞ ﾃﾞｨｽｸのどれかを参照するかもしれません。
DISKDEF macro library (DISKDEFﾏｸﾛ ﾗｲﾌﾞﾗﾘ)
Digital Researchのﾏｸﾛ ｱｾﾝﾌﾞﾗ(MAC)でDPHとDPBのようなﾃﾞｨｽｸ定義ﾃｰﾌﾞﾙを自動的に作成する時のｺｰﾄﾞ ﾗｲﾌﾞﾗﾘです。
disk drive (ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞ)
ﾃﾞｨｽｸで情報を読み書きする周辺装置です。 CP/MはCP/M制御下の各ﾄﾞﾗｲﾌﾞに文字を割り当てます。 例えばCP/Mは4ﾄﾞﾗｲﾌﾞのｼｽﾃﾑでA, B, C, Dとしてﾄﾞﾗｲﾌﾞを参照できます。
disk parameter block (DPB) (ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部)
1つ以上のﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞにより参照されるﾃﾞｰﾀ構造体。 ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部は以下で一覧する領域でﾃﾞｨｽｸ特性を定義します。
  • SPT はｾｸﾀ数/1ﾄﾗｯｸ値です。
  • BSH は配置区画ｼﾌﾄ数です。
  • BLM はﾃﾞｰﾀ配置区画ﾏｽｸ値です。
  • EXM はBLSとDSMできまる拡張ﾏｽｸ値です。
  • DSM は最大ﾃﾞｰﾀ配置区画番号です。
  • DRM は最大ﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ数-1です。
  • AL0 はﾃﾞｨﾚｸﾄﾘ用予約配置区画ﾍﾞｸﾀ値です。
  • AL1 はﾃﾞｨﾚｸﾄﾘ用予約配置区画ﾍﾞｸﾀ値です。
  • CKS はﾃﾞｨﾚｸﾄﾘ ｾｸﾀの検査(ﾁｪｯｸｻﾑ)ｺｰﾄﾞ数です。
  • OFF は予約ｼｽﾃﾑ ﾄﾗｯｸ数です。
このﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部のｱﾄﾞﾚｽはﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ(DPBASE+10)内に配置されます。 CPM機能31はこのDPBｱﾄﾞﾚｽを返します。 同じ特性のﾄﾞﾗｲﾌﾞは同じﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ従って同じDPBを使用できます。 けれども違う特性のﾄﾞﾗｲﾌﾞは各々が自身のﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞとﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部を持たなければなりません。 BDOSがBIOS内のSELDSK移行点を呼び出すとき、SELDSKはそのﾄﾞﾗｲﾌﾞのﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞのｱﾄﾞﾚｽをHLﾚｼﾞｽﾀに返さなければなりません。
disk parameter header (DPH) (ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ)
ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞについての情報を含み、或るBDOS操作用の記録領域を提供するﾃﾞｰﾀ構造体。 ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞはBDOS用の6ﾊﾞｲﾄの記録領域とそれに続く5つの2ﾊﾞｲﾄ ﾊﾟﾗﾒｰﾀを含みます。
  • XLT はｾｸﾀ変換ﾃｰﾌﾞﾙのｱﾄﾞﾚｽです。
  • DIRBUF はﾃﾞｨﾚｸﾄﾘ ﾊﾞｯﾌｧのｱﾄﾞﾚｽです。
  • DPB はﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部のｱﾄﾞﾚｽです。
  • CSV は検査(ﾁｪｯｸｻﾑ)ﾍﾞｸﾀのｱﾄﾞﾚｽです。
  • ALV は配置区画ﾍﾞｸﾀのｱﾄﾞﾚｽです。
n個のﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞが与えられると、ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞはﾃｰﾌﾞﾙ内で整列され、最初がﾄﾞﾗｲﾌﾞ0に対応する16ﾊﾞｲﾄ列で、最後がﾄﾞﾗｲﾌﾞn-1に対応します。
DKS
ﾄﾞﾗｲﾌﾞのﾃﾞｰﾀ配置区画数を指定するDISKDEFﾏｸﾛ ﾗｲﾌﾞﾗﾘ内のﾊﾟﾗﾒｰﾀです。
DMA
直接ﾒﾓﾘ ｱｸｾｽ(Direct Memory Access)。 DMAはﾃﾞｨｽｸからﾒﾓﾘ内にﾃﾞｰﾀを直接転送する方式です。 CP/Mｼｽﾃﾑでﾃﾞｨｽｸから現在選択したDMAｱﾄﾞﾚｽ内にｾｸﾀを読むためにBDOSはBIOS移行点READを呼び出します。 DMAｱﾄﾞﾚｽは0ﾍﾟｰｼﾞ0080Hの既定ﾊﾞｯﾌｧか、または使用者が指定したTPA内のﾊﾞｯﾌｧのどちらかで、ﾒﾓﾘ内128ﾊﾞｲﾄのﾊﾞｯﾌｧのｱﾄﾞﾚｽでなければなりません。 同様に現在のDMAｱﾄﾞﾚｽのﾚｺｰﾄﾞ(ｾｸﾀ分のﾃﾞｰﾀ)をﾃﾞｨｽｸに書くためにBDOSはBIOS移行点WRITEを呼び出します。
DN
論理ﾄﾞﾗｲﾌﾞ番号を指定するDISKDEFﾏｸﾛ ﾗｲﾌﾞﾗﾘ内のﾊﾟﾗﾒｰﾀです。
DPB
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部(disk parameter block)をご覧ください。
DPH
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ(disk parameter header)をご覧ください。
DRM
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部(disk parameter block)(DPB+7)内の2ﾊﾞｲﾄ ﾊﾟﾗﾒｰﾀです。 DRMはそのﾄﾞﾗｲﾌﾞに許されるﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘ総数-1です。 この値はﾃﾞｨﾚｸﾄﾘ ｴﾝﾄﾘに16配置区画までを割り当てるDPBのAL0とAL1ﾊﾞｲﾄに関連します。
DSM
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部(disk parameter block)(DPB+5)内の2ﾊﾞｲﾄ ﾊﾟﾗﾒｰﾀです。 DSMはそのﾄﾞﾗｲﾌﾞでｻﾎﾟｰﾄされる最大ﾃﾞｰﾀ配置区画番号です。 BLS×(DSM+1)はそのﾄﾞﾗｲﾌﾞで保持される総ﾊﾞｲﾄ数です。 これは予約したｼｽﾃﾑ ﾄﾗｯｸを除いた物理的なﾃﾞｨｽｸ容量を越えてはなりません。
editor (ｴﾃﾞｨﾀ)
ﾃｷｽﾄ ﾌｧｲﾙを作成/修正する便利ﾌﾟﾛｸﾞﾗﾑです。 ｴﾃﾞｨﾀは資料の作成やｺﾝﾋﾟｭｰﾀ ﾌﾟﾛｸﾞﾗﾑ用ｺｰﾄﾞの作成に使用できます。 CP/Mのｴﾃﾞｨﾀはｺﾝｿｰﾙでのｼｽﾃﾑ指示子の次に命令EDを入力することにより開始されます。
EX
FCB内の拡張番号領域。 拡張(extent)をご覧ください。
executable (実行可能)
ｺﾝﾋﾟｭｰﾀで走行する準備が出来ていること。 実行可能なｺｰﾄﾞはｺﾝﾋﾟｭｰﾀにより実行できる一連の命令です。 例えばｺﾝﾋﾟｭｰﾀは名前と住所を実行できませんが、これら全ての名前と住所を郵送票に印刷するﾌﾟﾛｸﾞﾗﾑを実行できます。
execute a program (ﾌﾟﾛｸﾞﾗﾑ開始)
実行可能なｺｰﾄﾞの処理を開始すること。
EXM
拡張ﾏｽｸ(extent mask)をご覧ください。
extent (拡張)
拡張はﾌｧｲﾙ内の連続的な16Kﾊﾞｲﾄを意味します。 拡張は0～31で番号付けされます。 1つの拡張は1, 2, 4, 8, 16個の配置区画を含むことができます。 EXはFCBの拡張番号領域で、FCB(FCB内の先頭位置)+12の1ﾊﾞｲﾄ領域です。 配置区画容量(BLS)と最大配置区画数(DSM)に依存し、FCBは1, 2, 4, 8, 16個の拡張を含みます。 EX領域は一般的に使用者により0に設定されますが、ﾌｧｲﾙ入出力中は現在の拡張番号を含みます。 FCBは1つ以上の拡張を含みます。 1.4版CP/Mでの各FCBは1つの拡張だけを含みます。 CP/M 1.4互換性を維持し、不順(ﾗﾝﾀﾞﾑ)入出力の実行する使用者の試みは、この違いを含み注意すべきです。 CP/M 1.4互換性をご覧ください。
extent mask (EXM) (拡張ﾏｽｸ)
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部(DPB+3)に配置されたﾊﾞｲﾄ ﾊﾟﾗﾒｰﾀです。 EXMの値は配置区画容量(BLS)と最大ﾃﾞｰﾀ配置区画番号(DSM)が255を越えるかどうかにより決められます。 EXM+1がﾃﾞｨﾚｸﾄﾘFCBあたりの拡張数です。
FCB (ﾌｧｲﾙ制御部)
ﾌｧｲﾙ制御部(File Control Block)をご覧ください。
file (ﾌｧｲﾙ)
固有の識別子により参照できる文字、命令、ﾃﾞｰﾀの集合です。 ﾌｧｲﾙは通常、ﾃﾞｨｽｸや磁気ﾃｰﾌﾟのような様々な種類で保存されます。 CP/Mﾌｧｲﾙはﾌｧｲﾙ特性により識別され、0～65535ﾚｺｰﾄﾞの集合としてﾃﾞｨｽｸ上に存在します。 各ﾚｺｰﾄﾞは128ﾊﾞｲﾄで、ﾊﾞｲﾅﾘまたはASCIIﾃﾞｰﾀのどちらかを含むことができます。 ﾊﾞｲﾅﾘ ﾌｧｲﾙは00H～0FFHの値に変化できるﾃﾞｰﾀのﾊﾞｲﾄを含みます。 ASCIIﾌｧｲﾙはｷｬﾘｯｼﾞ ﾘﾀｰﾝとﾗｲﾝ ﾌｨｰﾄﾞの組み合わせにより区切られた一連の文字ｺｰﾄﾞを含みます(一般的にﾊﾞｲﾄ値は00H～7FHの範囲)。 ﾃﾞｨﾚｸﾄﾘは一連の物理的な領域としてﾌｧｲﾙを写し取ります。 ﾌｧｲﾙが一連の連続する論理ﾚｺｰﾄﾞとして定義されるとは言え、これらのﾚｺｰﾄﾞはﾃﾞｨｽｸ上の連続的なｾｸﾀで存在できません。 配置区画、ﾃﾞｨﾚｸﾄﾘ、拡張、ﾚｺｰﾄﾞ、ｾｸﾀもご覧ください。
File Control Block (FCB) (ﾌｧｲﾙ制御部)
ﾃﾞｨｽｸのﾌｧｲﾙをｱｸｾｽするために使用する構造体。 ﾃﾞｨｽｸ上に作成またはｱｸｾｽされるべきﾌｧｲﾙを記述するﾄﾞﾗｲﾌﾞ、ﾌｧｲﾙ名、ﾌｧｲﾙ形式、その他の情報を含みます。 ﾌｧｲﾙ制御部はﾌｧｲﾙ入出力機能用に使用者により指定される連続する36ﾊﾞｲﾄから成ります。 FCBは割り当てたﾃﾞｨｽｸ空間の一部であるﾃﾞｨﾚｸﾄﾘ内のﾃﾞｨﾚｸﾄﾘ要素でも参照し得ます。 これらはFCBの最初の32ﾊﾞｲﾄと同じものを含みますが、現在のﾚｺｰﾄﾞ番号とﾗﾝﾀﾞﾑ ﾚｺｰﾄﾞ番号のﾊﾞｲﾄが欠けています。
filename (ﾌｧｲﾙ名)
ﾌｧｲﾙに割り当てた名前。 ﾌｧｲﾙ名は1～8文字(ﾊﾞｲﾄ)の基本ﾌｧｲﾙ名と0～3文字(ﾊﾞｲﾄ)のﾌｧｲﾙ形式名を含むことができます。 .(ﾋﾟﾘｵﾄﾞ)が基本ﾌｧｲﾙ名をﾌｧｲﾙ形式名から分離します。
file specification (ﾌｧｲﾙ指定)
唯一のﾌｧｲﾙ識別子。 完全なCP/Mﾌｧｲﾙ指定はﾃﾞｨｽｸ指定、続いて:、1～8文字(ﾊﾞｲﾄ)の基本ﾌｧｲﾙ名、.、0～3文字(ﾊﾞｲﾄ)のﾌｧｲﾙ形式名を含みます。 例えば B:EXAMPLE.TEX は完全なCP/Mﾌｧｲﾙ指定です。
filetype (ﾌｧｲﾙ形式(名))
ﾌｧｲﾙ名の拡張子。 ﾌｧｲﾙ形式名は0～3文字(ﾊﾞｲﾄ)で、基本ﾌｧｲﾙ名から.(ﾋﾟﾘｵﾄﾞ)により分離されなければなりません。 ﾌｧｲﾙ形式名はそのﾌｧｲﾙに対する何かを告げることができます。 いくつかのﾌﾟﾛｸﾞﾗﾑは特定のﾌｧｲﾙ形式名を持つ処理されるべきﾌｧｲﾙが必要です。
floppy disk (ﾌﾛｯﾋﾟｰ ﾃﾞｨｽｸ)
情報保存に使用される柔構造磁気ﾃﾞｨｽｸ。 ﾌﾛｯﾋﾟｰ ﾃﾞｨｽｸは3.5, 5と1/4, 8ｲﾝﾁ径が出ています。
FSC
先頭物理ｾｸﾀ番号を指定するDISKDEFﾏｸﾛ ﾗｲﾌﾞﾗﾘ内のﾊﾟﾗﾒｰﾀです。 このﾊﾟﾗﾒｰﾀはSPTの決定とXLT構築に使用されます。
hard disk (ﾊｰﾄﾞﾃﾞｨｽｸ)
筐体内に密閉した硬いﾚｺｰﾄﾞ盤のような磁気ﾃﾞｨｽｸ。 ﾊｰﾄﾞﾃﾞｨｽｸはﾌﾛｯﾋﾟｰ ﾃﾞｨｽｸより多くの情報を格納します。
hardware (ﾊｰﾄﾞｳｪｱ)
ｺﾝﾋﾟｭｰﾀの物理部分。
hexadecimal notation (16進数表記)
16進数字を表すために10進数字とA,B,C,D,E,F文字を使用する16値を基準とする表記法。 16進表記はﾊﾞｲﾅﾘ数値を参照するために度々使用されます。 ﾊﾞｲﾅﾘ数値は最下位ﾋﾞｯﾄ側から4ﾋﾞｯﾄ単位で採ることにより16進値として容易に表現でき、各4ﾋﾞｯﾄ単位は0～Fの16進桁として表現します。 従ってﾋﾞｯﾄ値1011は0BH、10110101は0B5Hです。
hex file (HEXﾌｧｲﾙ)
ASCII表示可能な命令、機械語表現のﾌｧｲﾙ。
hex file format (HEXﾌｧｲﾙ形式)
Intel 8080用のASMとMACの絶対形式出力はHEX形式ﾌｧｲﾙで、読み込みｱﾄﾞﾚｽで始まる格納されるべき読み込みｱﾄﾞﾚｽとﾊﾞｲﾄ値を与える一連の絶対ﾚｺｰﾄﾞを含みます。
HOME
現選択ﾄﾞﾗｲﾌﾞのﾃﾞｨｽｸ ﾍｯﾄﾞをﾄﾗｯｸ0位置に設定するBIOS移行点。
host (ﾎｽﾄ)
ｾｸﾀの合成と分解手法で使用するｼｽﾃﾑ内のﾊｰﾄﾞﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞの物理特性。 用語ﾎｽﾄはCP/Mの論理特性から物理的なﾊｰﾄﾞｳｪｱ特性を区別するのを助けます。 例えばCP/Mｾｸﾀは常に128ﾊﾞｲﾄとは言え、ﾎｽﾄ ｾｸﾀ容量は128ﾊﾞｲﾄの倍数になり得ます。
input (入力)
ｺﾝﾋﾟｭｰﾀ内へ行くﾃﾞｰﾀで、通常、ﾀｰﾐﾅﾙでの操作者の入力またはﾌﾟﾛｸﾞﾗﾑによるﾃﾞｨｽｸからの読み込みです。
input/output (入出力)
I/Oをご覧ください。
interface (ｲﾝﾀｰﾌｪｰｽ)
ﾏｲｸﾛ ｺﾝﾋﾟｭｰﾀ内でﾊｰﾄﾞｳｪｱとｿﾌﾄｳｪｱ間のｲﾝﾀｰﾌｪｰｽとして、その他各々と通信することを2つの無関係なｼｽﾃﾑに許すもの。
I/O
入出力の略号。 通常、入出力操作またはｺﾝﾋﾟｭｰﾀ ｼｽﾃﾑ内でﾃﾞｰﾀの入出力を扱うﾙｰﾁﾝを参照します。
IOBYTE
現状0ﾍﾟｰｼﾞ内0003H位置の1ﾊﾞｲﾄ領域で、入出力について論理→物理割り当てを支援できます。 けれどもBIOSでの実装は純粋に任意選択で、与えられたCP/Mｼｽﾃﾑでｻﾎﾟｰﾄされるかもしれないし、またはされないかもしれません。 IOBYTEは次の命令の使用で容易に設定できます。
STAT 論理装置名=物理装置名
CP/Mの論理装置はCON:, RDR:, PUN:, LST:で、これらの各々は4つの物理装置の1つに割り当てることができます。 IOBYTEはBIOSのBOOT移行点により初期化され、BIOSの入出力移行点CONST, CONIN, CONOUT, LIST, PUNCH, READERにより解釈され得ます。 IOBYTEの設定によって、異なる入出力ﾄﾞﾗｲﾊﾞがBIOSにより選択され得ます。 例えば LST:=TTY: 設定はﾘｽﾄ出力をｼﾘｱﾙ ﾎﾟｰﾄへ向ける原因になるかもしれず、一方 LST:=LPT: 設定はﾘｽﾄ出力をﾊﾟﾗﾚﾙ ﾎﾟｰﾄへ向ける原因になります。
K (ｷﾛ)
Kﾊﾞｲﾄの略。 Kﾊﾞｲﾄ(kilobyte)をご覧ください。
keyword (ｷｰﾜｰﾄﾞ)
命令ｷｰﾜｰﾄﾞ(command keyword)をご覧ください。
kilobyte (K) (Kﾊﾞｲﾄ)
1024ﾊﾞｲﾄまたはﾒﾓﾘの0400Hﾊﾞｲﾄ。 これはﾒﾓﾘの標準的な単位です。 例えばIntel 8080は64Kまでのﾒﾓﾘ ｱﾄﾞﾚｽ空間または65536ﾊﾞｲﾄをｻﾎﾟｰﾄします。 1024Kﾊﾞｲﾄは1Mﾊﾞｲﾄ等しく、または100万強ﾊﾞｲﾄです。
linker (ﾘﾝｶ)
再配置可能なｵﾌﾞｼﾞｪｸﾄ ﾌｧｲﾙを実行用に準備する絶対形式ﾌｧｲﾙ内に組み合わせるために使用する便利ﾌﾟﾛｸﾞﾗﾑ。 例えばLINK-80(TM)はPL/I-80(TM)により生成されるような再配置可能なRELﾌｧｲﾙからCOMまたはPRLﾌｧｲﾙのどちらかを生成します。
LIST (ﾘｽﾄ)
ﾘｽﾄ装置(通常はﾌﾟﾘﾝﾀ)へ文字を送るﾙｰﾁﾝへのBIOS移行点。
list device (ﾘｽﾄ装置)
ﾃﾞｰﾀを表示または印刷し得るﾌﾟﾘﾝﾀのような装置。
LISTST
ﾘｽﾄ装置の準備状態を返すﾙｰﾁﾝへのBIOS移行点。
loader (ﾛｰﾀﾞ)
ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ下での実行用に準備されたﾒﾓﾘ内に絶対形式ﾌﾟﾛｸﾞﾗﾑ ｲﾒｰｼﾞを持って来る、またはｲﾒｰｼﾞのようなものを作る便利ﾌﾟﾛｸﾞﾗﾑ。 例えばLOADはｱｾﾝﾌﾞﾗのHEXﾌｧｲﾙ出力からCP/M下で実行されるべく用意される絶対形式COMﾌｧｲﾙを準備します。
logged in (登録)
ﾄﾞﾗｲﾌﾞへの参照をｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑに知らせます。 ﾄﾞﾗｲﾌﾞは使用者による選択または処理実行時に登録されます。 ﾌﾛｯﾋﾟｰ ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞでのﾃﾞｨｽｸ変更、命令ﾚﾍﾞﾙでのCTRL-C入力、またはBDOS機能0が実行されるまで登録または選択を保ちます。
logical (論理)
実際の物理形態と同じかも違うかもしれない何かの表現。 例えばﾊｰﾄﾞﾃﾞｨｽｸは1つの物理ﾃﾞｨｽｸを占有できますが、まだ各種の異なるﾄﾞﾗｲﾌﾞとして使用者に思わせる利用可能な記憶装置に分割できます。 これらの仮想ﾄﾞﾗｲﾌﾞは論理ﾄﾞﾗｲﾌﾞです。
logical sector (論理ｾｸﾀ)
ｾｸﾀをご覧ください。
logical-to-physical sector translation table (論理→物理ｾｸﾀ変換ﾃｰﾌﾞﾙ)
XLTをご覧ください。
LSC
最終物理ｾｸﾀ番号を指定するDISKDEFﾏｸﾛ ﾗｲﾌﾞﾗﾘのﾊﾟﾗﾒｰﾀ。
LST
CP/Mの論理ﾘｽﾄ装置で、通常はﾌﾟﾘﾝﾀです。 CP/Mのﾘｽﾄ装置はBIOSのLISTとLISTSTを通して参照される出力専用装置です。 次の物理装置とIOBYTEがCP/MのBIOS部のLISTとLISTST移行点で実装されていれば、STAT命令は物理装置TTY:, CRT:, LPT:, UL1:の1つへのLST:割り当てを許します。 CP/NETのNETWORK命令はﾈｯﾄﾜｰｸ ﾏｽﾀのﾘｽﾄ装置へのLST:割り当てを許します。 例えば PIP LST:=TEST.SUB はﾘｽﾄ装置にTEST.SUBﾌｧｲﾙを印刷します。
macro assembler (ﾏｸﾛ ｱｾﾝﾌﾞﾗ)
ﾏｸﾛ処理機能を提供するｱｾﾝﾌﾞﾘ言語ｺｰﾄﾞ変換ﾌﾟﾛｸﾞﾗﾑです。 ﾏｸﾛ定義はﾏｸﾛ名に出会った時にｿｰｽ ﾌﾟﾛｸﾞﾗﾑ内に保存/変更されるべき命令群を許します。 定義と実施はﾈｽﾄ(入れ子に)でき、ﾏｸﾛ ﾊﾟﾗﾒｰﾀ(引数)は展開中の変更用に特定ﾏｸﾛへ任意文字のﾃｷｽﾄを渡す形式にできます。
megabyte (Mﾊﾞｲﾄ)
100万強ﾊﾞｲﾄ、1024Kﾊﾞｲﾄ。 Kﾊﾞｲﾄ(kilobyte)をご覧ください。
microprocessor (ﾏｲｸﾛ ﾌﾟﾛｾｯｻ)
ﾏｲｸﾛ ｺﾝﾋﾟｭｰﾀの中央演算処理装置(CPU:central processing unit)のｼﾘｺﾝ ﾁｯﾌﾟ。 Intel 8080とZilog Z80はCP/Mｼｽﾃﾑで共通して使用されるﾏｲｸﾛ ﾌﾟﾛｾｯｻです。
MOVCPM image (MOVCPMｲﾒｰｼﾞ)
MOVCPMにより生成されたCP/Mｼｽﾃﾑのﾒﾓﾘ ｲﾒｰｼﾞ。 このｲﾒｰｼﾞはSAVE命令の使用でﾃﾞｨｽｸ ﾌｧｲﾙとして保存でき、または元ﾄﾞﾗｲﾌﾞの指定なしのSYSGEN命令の使用でｼｽﾃﾑ ﾄﾗｯｸに配置できます。 このｲﾒｰｼﾞは様々で、1ｾｸﾀまたは2ｾｸﾀ ﾌﾞｰﾄの存在に依存します。 ﾌﾞｰﾄが128ﾊﾞｲﾄ(1ｾｸﾀ)未満ならば、ﾌﾞｰﾄは0900Hから始まり、CP/Mｼｽﾃﾑは0980H、BIOSは1F80Hです。 さもなければﾌﾞｰﾄは0900H、CP/Mｼｽﾃﾑは0A00H、BIOSは2000Hです。 1ｾｸﾀ ﾌﾞｰﾄのCP/M 1.4ｼｽﾃﾑでのｱﾄﾞﾚｽはBIOSが1F80Hの代わりに1E80Hで始まることを除いてCP/M 2ｼｽﾃﾑについてと同じです。
MP/M
Multi-Programming Monitor control programの略称。 各ﾀｰﾐﾅﾙでの複数ﾌﾟﾛｸﾞﾗﾐﾝｸﾞ、複数ﾀｰﾐﾅﾙのｱｸｾｽをｻﾎﾟｰﾄするﾏｲｸﾛ ｺﾝﾋﾟｭｰﾀ ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ。
multi-programming (複数ﾌﾟﾛｸﾞﾗﾐﾝｸﾞ)
1つ以上のﾌﾟﾛｸﾞﾗﾑを同時に開始/実行する能力。 これらのﾌﾟﾛｸﾞﾗﾑは通常ﾌﾟﾛｾｽと呼ばれ、時分割され、ﾗｳﾝﾄﾞ ﾛﾋﾞﾝを基にCPU時間の細切れを各々が受け取ります。 同時動作(concurrency)をご覧ください。
nibble (ﾆﾌﾞﾙ)
ﾊﾞｲﾄの半分、通常、ﾊﾞｲﾄ内の上位4ﾋﾞｯﾄまたは下位4ﾋﾞｯﾄ。
OFF
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部(DPB+13)内の2ﾊﾞｲﾄ ﾊﾟﾗﾒｰﾀ。 この値は予約ｼｽﾃﾑ ﾄﾗｯｸ数を指定します。 ﾃﾞｨｽｸのﾃﾞｨﾚｸﾄﾘはﾄﾗｯｸOFFの先頭ｾｸﾀから始まります。
OFS
予約ｼｽﾃﾑ ﾄﾗｯｸ数を指定するDISKDEFﾏｸﾛ ﾗｲﾌﾞﾗﾘのﾊﾟﾗﾒｰﾀです。 OFFをご覧ください。
operating system (ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ)
他のﾌﾟﾛｸﾞﾗﾑの実行管理とｺﾝﾋﾟｭｰﾀ資源を管理するﾌﾟﾛｸﾞﾗﾑの集合。 ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑはｺﾝﾋﾟｭｰﾀと周辺装置間の標準的な入出力環境を提供します。 使用者が書いたﾌﾟﾛｸﾞﾗﾑを安全に実行することを可能にします。 ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑはその下で走行するﾌﾟﾛｸﾞﾗﾑに対してｺﾝﾋﾟｭｰﾀ資源の使用を標準化します。
option (任意選択)
多くのﾊﾟﾗﾒｰﾀの1つは命令付属部の一部にできます。 命令の実行について付加条件を指定するために任意選択を使用してください。
output (出力)
ﾃﾞｰﾀがｺﾝｿｰﾙ、ﾃﾞｨｽｸ、またはﾌﾟﾘﾝﾀへ送られること。
page (ﾍﾟｰｼﾞ)
ﾍﾟｰｼﾞ境界で始まるﾒﾓﾘ内の連続する256ﾊﾞｲﾄで、基準ｱﾄﾞﾚｽは256(0100H)ﾊﾞｲﾄの倍数です。 16進表記のﾍﾟｰｼﾞは常に最下位ﾊﾞｲﾄが0(～00H)で始まります。
page relocatable program (ﾍﾟｰｼﾞ再配置可能ﾌﾟﾛｸﾞﾗﾑ)
PRLをご覧ください。
page zero (0ﾍﾟｰｼﾞ)
重大なｼｽﾃﾑ ﾊﾟﾗﾒｰﾀを保持するために使用される0000H～0100H間のﾒﾓﾘ領域。 0ﾍﾟｰｼﾞは使用者ﾌﾟﾛｸﾞﾗﾑとCP/MのBDOS部間のｲﾝﾀｰﾌｪｰｽ領域として基本的に機能します。 非標準ｼｽﾃﾑでのこの領域はｼｽﾃﾑの基準ﾍﾟｰｼﾞで、CP/Mｼｽﾃﾑとその下で走行する使用者ﾌﾟﾛｸﾞﾗﾑにＹり使用されるﾒﾓﾘの先頭256ﾊﾞｲﾄを表します。
parameter (ﾊﾟﾗﾒｰﾀ)
命令に対して付加情報を提供する命令付属部内の値。 技術的には、ﾊﾟﾗﾒｰﾀは命令の要素に必要とされます。
peripheral devices (周辺装置)
CPUへの外部的な装置。 例えばﾀｰﾐﾅﾙ、ﾌﾟﾘﾝﾀ、ﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞは共通的な周辺装置で、ﾌﾟﾛｾｯｻの位置ではありませんが、ﾌﾟﾛｾｯｻと共に使用されます。
physical (物理(的))
ｺﾝﾋﾟｭｰﾀ部品、一般的に実在するﾊｰﾄﾞｳｪｱの特性。 ﾌﾟﾛｸﾞﾗﾑでの物理部品は論理部品により表されます。
primary filename (基本ﾌｧｲﾙ名)
ﾌｧｲﾙ名の最大先頭8文字(ﾊﾞｲﾄ)。 基本ﾌｧｲﾙ名は使用者のﾌｧｲﾙ内容識別を助ける唯一の名前です。 基本ﾌｧｲﾙ名は1～8文字(ﾊﾞｲﾄ)を含み、何れかの文字または数字といくつかの特殊文字を含められます。 基本ﾌｧｲﾙ名は任意のﾄﾞﾗｲﾌﾞ指定に続き、任意のﾌｧｲﾙ形式名に先行します。
PRL
ﾍﾟｰｼﾞ再配置可能ﾌﾟﾛｸﾞﾗﾑ。 ﾍﾟｰｼﾞ再配置可能ﾌﾟﾛｸﾞﾗﾑはPRLﾌｧｲﾙ形式名でﾃﾞｨｽｸに格納されます。 ﾍﾟｰｼﾞ再配置可能ﾌﾟﾛｸﾞﾗﾑはどのﾍﾟｰｼﾞ境界にも容易に再配置され、従って非ﾊﾞﾝｸのMP/Mｼｽﾃﾑでの実行用に仕上げられます。
program (ﾌﾟﾛｸﾞﾗﾑ)
ｺﾝﾋﾟｭｰﾀでの実行時、指定した作業を行う一連のｺｰﾄﾞ化した命令。 ﾌﾟﾛｸﾞﾗﾑはﾌﾟﾛｾｯｻ指定言語または異なるﾌﾟﾛｾｯｻのいくつかで実行できる高級言語で書くことができます。
prompt (指示子)
使用者が次の動作を何で決めるのかを手助けするために画面に表示する何れかの文字。 ｼｽﾃﾑ指示子はｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑにより表示される特別な指示子です。 ｱﾙﾌｧﾍﾞｯﾄ文字は既定ﾄﾞﾗｲﾌﾞを示します。 いくつかの応用ﾌﾟﾛｸﾞﾗﾑはそれ自身の特別な指示子を持ちます。 CPM指示子をご覧ください。
PUN
CP/Mの論理ﾊﾟﾝﾁ装置。 ﾊﾟﾝﾁ装置はBIOSのPUNCH移行点を通してｱｸｾｽされる出力専用装置です。 或る実装で、PUN:はﾓﾃﾞﾑのようなｼﾘｱﾙ装置かもしれません。
PUNCH
ﾊﾟﾝﾁ装置へ文字を送るﾙｰﾁﾝへのBIOS移行点。
RDR
CP/Mの論理ﾘｰﾀﾞ装置。 ﾘｰﾀﾞ装置はBIOSのREADER移行点を通してｱｸｾｽされる入力専用装置です。 PUN:をご覧ください。
READ
現在選択しているﾄﾞﾗｲﾌﾞ、ﾄﾗｯｸ、ｾｸﾀから現在選択しているDMAｱﾄﾞﾚｽ内に128ﾊﾞｲﾄを読むﾙｰﾁﾝへのBIOS内の移行点。
READER
現在割り当てられているﾘｰﾀﾞ装置から次の文字を読むBIOS内のﾙｰﾁﾝへの移行点。
Read-Only (R/O) (読み込み専用属性)
ﾃﾞｨｽｸ ﾌｧｲﾙまたはﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞに指定できる属性。 ﾌｧｲﾙに指定されると、読み込み専用属性はﾌｧｲﾙからの読み込みを読み込みを許しますが、そのﾌｧｲﾙに書けません。 ﾄﾞﾗｲﾌﾞに指定されると、読み込み専用属性はﾃﾞｨｽｸ上のどのﾌｧｲﾙ読み込みも許しますが、新規ﾌｧｲﾙの追加、ﾌｧｲﾙの削除または変更、ﾌｧｲﾙの改名、ﾃﾞｨｽｸ上の書き込みを防止します。 STAT命令はﾌｧｲﾙまたはﾄﾞﾗｲﾌﾞを読み込み専用に設定できます。 全てのﾌｧｲﾙとﾄﾞﾗｲﾌﾞは読み込み専用(R/O)か読み書き(R/W)のどちらかです。 ﾌｧｲﾙとﾄﾞﾗｲﾌﾞに対する既定の設定は読み書き(R/W)ですが、ﾃﾞｨｽｸのﾘｾｯﾄまたはﾒﾃﾞｨｱの交換でのｴﾗｰはそのｴﾗｰが修復されるまで自動的にそのﾄﾞﾗｲﾌﾞを読み込み専用(R/O)に設定します。 ROMもご覧ください。
Read-Write (R/W) (読み書き属性)
ﾃﾞｨｽｸ ﾌｧｲﾙまたはﾃﾞｨｽｸ ﾄﾞﾗｲﾌﾞに指定できる属性。 読み書き属性は読み書き(R/W)に指定されたﾌｧｲﾙまたは読み書き(R/W)に設定されたﾄﾞﾗｲﾌﾞのﾃﾞｨｽｸ上のどのﾌｧｲﾙにも読み書きを許します。 ﾌｧｲﾙまたはﾄﾞﾗｲﾌﾞは読み込み専用(R/O)か読み書き(R/W)のどちらかに設定できます。
record (ﾚｺｰﾄﾞ)
ﾌｧｲﾙ内のﾊﾞｲﾄ群。 物理的なﾚｺｰﾄﾞは128ﾊﾞｲﾄから成り、ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑと応用ﾌﾟﾛｸﾞﾗﾑ間のﾃﾞｰﾀ転送の基本単位です。 論理ﾚｺｰﾄﾞは長さが変化するかもしれず、情報の単位を表すのに使用されます。 2つの64ﾊﾞｲﾄ使用ﾚｺｰﾄﾞは1つの128ﾊﾞｲﾄ物理ﾚｺｰﾄﾞに格納され得ます。 ﾚｺｰﾄﾞはﾌｧｲﾙの形式で(1群のものとして)纏められます。
recursive procedure (再起可能手続き)
実行中にそれ自身を呼び出すことができるｺｰﾄﾞ。
reentrant procedure (再入可能手続き)
他が既に実行している間に或る処理により呼び出されることができるｺｰﾄﾞ。 従って再入可能ｺｰﾄﾞは異なる使用者間で共用できます。 再入可能手続きは自身を変更してはならず、純粋なｺｰﾄﾞでﾃﾞｰﾀを含んではなりません。 再入可能手続き用のﾃﾞｰﾀは分離されたﾃﾞｰﾀ領域またはｽﾀｯｸに配置され保持されなければなりません。
restart (RST) (CPUのRST命令)
通常、割り込み手順の間またはﾃﾞﾊﾞｯｶﾞのﾌﾞﾚｰｸ ﾎﾟｲﾝﾄ用に使用される1ﾊﾞｲﾄの呼び出し命令。 それらは RST 0 ～ RST 7 の8つの再開位置で、そのｱﾄﾞﾚｽは再開番号の8倍の生成により与えられます。
R/O
読み込み専用(Read-Only)をご覧ください。
ROM
読み出し専用ﾒﾓﾘ。 このﾒﾓﾘは読めますが書けませんので、ｺｰﾄﾞと予め初期化されたﾃﾞｰﾀ領域専用です。
RST
restart (RST)をご覧ください。
R/W
読み書き属性(Read-Write)をご覧ください。
sector (ｾｸﾀ)
CP/Mｼｽﾃﾑでのｾｸﾀは常に連続する128ﾊﾞｲﾄです。 ｾｸﾀはBIOSによるﾃﾞｨｽｸ上のﾃﾞｰﾀ読み書きの基本単位です。 ｾｸﾀはﾌｧｲﾙ内の1つの128ﾊﾞｲﾄ ﾚｺｰﾄﾞまたはﾃﾞｨﾚｸﾄのｾｸﾀになり得ます。 BDOSは0～SPT-1間の論理ｾｸﾀ番号を常に要求します。 一般的にこれはBIOS移行点SECTRANにより物理ｾｸﾀに変換されます。 いくつかﾃﾞｨｽｸ補助ｼｽﾃﾑでのﾃﾞｨｽｸ ｾｸﾀは128ﾊﾞｲﾄより大きく、通常、256, 512, 1024, 2048ﾊﾞｲﾄのような2のべき乗です。

これらのﾃﾞｨｽｸ ｾｸﾀはCP/M資料内で常にﾎｽﾄ(実)ｾｸﾀとして参照され、他のｾｸﾀ参照と混同されるべきではなく、その場合、CPMの128ﾊﾞｲﾄ ｾｸﾀが仮定されるべきです。 ﾎｽﾄ(実)ｾｸﾀ容量が128ﾊﾞｲﾄより大きな場合、ﾎｽﾄ(実)ｾｸﾀはﾒﾓﾘ内でﾊﾞｯﾌｧされなければならず、128ﾊﾞｲﾄのCP/Mｾｸﾀはそれらに対して合成と分解がなされなければなりません。 これはBIOSﾃﾞｨｽｸ入出力ﾙｰﾁﾝと実際のﾃﾞｨｽｸ入出力間の合成と分解手法の付加部を追加することにより行えます。

sectors per track (SPT) (ｾｸﾀ数/1ﾄﾗｯｸ)
ﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部(DPB+0)内の2ﾊﾞｲﾄ ﾊﾟﾗﾒｰﾀです。 BDOSはBCﾚｼﾞｽﾀ内に0～SPT-1間の範囲の論理ｾｸﾀ番号でBIOS内SECTRAN移行点を呼び出します。
SECTRAN
BDOSに対して論理→物理ｾｸﾀ変換を実行するBIOS内のﾙｰﾁﾝへの移行点。
SELDSK
現在の選択ﾄﾞﾗｲﾌﾞを設定するBIOS内ﾙｰﾁﾝへの移行点。
SETDMA
DMAｱﾄﾞﾚｽは後続の読み書きでﾃﾞｨｽｸとのﾃﾞｰﾀ転送に使用するﾒﾓﾘ内の128ﾊﾞｲﾄ ﾊﾞｯﾌｧ領域のｱﾄﾞﾚｽです。
SETSEC
現在の選択ｾｸﾀを設定するBIOS内ﾙｰﾁﾝへの移行点。
SETTRK
現在の選択ﾄﾄﾗｯｸを設定するBIOS内ﾙｰﾁﾝへの移行点。
skew factor (ｽｷｭｰ数)
XLT内で論理→物理ｾｸﾀ変換を定義する要素。 論理ｾｸﾀ番号はBDOSにより使用され、0～SPT-1の範囲です。 ﾃﾞｰﾀはﾃﾞｰﾀ配置区画内で連続する論理128ﾊﾞｲﾄ ｾｸﾀ群で書かれます。 ｾｸﾀ数/1配置区画はBLS/128で与えられます。 ﾃﾞｨｽｸ ﾒﾃﾞｨｱ上の物理ｾｸﾀも連続的に番号付けされています。 物理ｾｸﾀ容量も128ﾊﾞｲﾄならば、論理ｾｸﾀと物理ｾｸﾀ間には1対1の関係が存在します。 論理→物理変換ﾃｰﾌﾞﾙ(XLT)はこの関係を割り当て、一般的にｽｷｭｰ数はこのﾃｰﾌﾞﾙの生成で使用されます。 例えばｽｷｭｰ数が6の場合、XLTは次表のようになります。

論理0123456～25
物理17131925511～22

ｽｷｭｰ数は次のｾｸﾀを失うことなくﾌﾟﾛｸﾞﾗﾑに処理時間を許します。 さもなければｼｽﾃﾑは次の論理ｾｸﾀの読み込みに先立ちﾃﾞｨｽｸの完全な回転を待たなければなりません。 ｽｷｭｰ数はﾊｰﾄﾞｳｪｱ速度と応用処理のｵｰﾊﾞｰﾍｯﾄﾞに依存して変更できます。 物理ｾｸﾀが128ﾊﾞｲﾄより大きな時にｾｸﾀ変換が行われず、この場合はｾｸﾀの合成/分解が行われることに注意してください。 ｾｸﾀ(sector)、SKF、XLTもご覧ください。

SKF
XLT構築で使用するためのｽｷｭｰ値を指定するDISKDEFﾏｸﾛ ﾗｲﾌﾞﾗﾘのﾊﾟﾗﾒｰﾀ。 SKFが0ならば変換ﾃｰﾌﾞﾙは生成されず、DPH内のXLTﾊﾞｲﾄは0000Hです。
software (ｿﾌﾄｳｪｱ)
ｺﾝﾋﾟｭｰﾀの現実の物理的部品であるﾊｰﾄﾞｳｪｱと異なり、機械が読み込み可能な命令を含むﾌﾟﾛｸﾞﾗﾑ。
source file (ｿｰｽ ﾌｧｲﾙ)
通常、ｴﾃﾞｨﾀで作成されたACIIﾃｷｽﾄ ﾌｧｲﾙで、言語変換やﾃｷｽﾄ形成のようなｼｽﾃﾑ ﾌﾟﾛｸﾞﾗﾑへの入力ﾌｧｲﾙです。
SP (ｽﾀｯｸ ﾎﾟｲﾝﾀ)
ｽﾀｯｸ ﾎﾟｲﾝﾀ。 ｽﾀｯｸ(stack)をご覧ください。
spooling
ﾌﾟﾘﾝﾀが準備不可中にﾌﾟﾘﾝﾀ出力を前処理する処理。 ﾌｧｲﾙはﾌﾟﾘﾝﾀが自由になる時に印字され、ﾌﾟﾛｸﾞﾗﾑは低印刷処理に対して待つ必要がなくなります。
SPT
ｾｸﾀ数/1ﾄﾗｯｸ(sectors per track)をご覧ください。
stack (ｽﾀｯｸ)
ﾌﾟﾛｱｾｯｻが呼び出し(CALL)命令を受け取った時に復帰ｱﾄﾞﾚｽを保存するﾒﾓﾘの予約領域。 復帰命令に出会うと、ﾌﾟﾛｾｯｻはｽﾀｯｸ上の現在の復帰ｱﾄﾞﾚｽをﾌﾟﾛｸﾞﾗﾑ ｶｳﾝﾀに回復します。 ﾚｼﾞｽﾀ内容のようなﾃﾞｰﾀもこのｽﾀｯｸに保存できます。 PUSH命令はｽﾀｯｸ上にﾃﾞｰﾀを置き、POP命令がそれを取り去ります。 ｽﾀｯｸへの保存は先にｽﾀｯｸ ﾎﾟｲﾝﾀ(SP)を-2して、そのｱﾄﾞﾚｽに保存すべき項目を書きます。 ｽﾀｯｸからの復帰はこの逆です。
syntax (書式)
命令を与える入力に対する形式。
SYS
ｼｽﾃﾑ属性(system attribute)をご覧ください。
SYSGEN image (SYSGENｲﾒｰｼﾞ)
転送先ﾄﾞﾗｲﾌﾞが指定されない場合にSYSGENにより生成されるCP/Mｼｽﾃﾑのﾒﾓﾘ ｲﾒｰｼﾞ。 これは転送元ﾄﾞﾗｲﾌﾞが指定されない場合にSYSGENで読むことができるMOVCPMｲﾒｰｼﾞと同じです。 MOVCPMｲﾒｰｼﾞ(MOVCPM image)をご覧ください。
system attribute (SYS) (ｼｽﾃﾑ属性)
ﾌｧｲﾙ属性。 STAT命令でのSYS選択の使用またはBDOS機能30のﾌｧｲﾙ属性設定機能の使用によりｼｽﾃﾑ属性をﾌｧｲﾙ与えることができます。 SYS属性のﾌｧｲﾙはDIR命令の応答で表示されません。 使用者番号0でSYS属性を与えたﾌｧｲﾙは同じﾄﾞﾗｲﾌﾞでどの使用者番号からも読み込みと実行ができます。 どの使用者番号下でも利用可能なﾌﾟﾛｸﾞﾗﾑの共通的な使用のためにこの特徴を使用してください。
system prompt (ｼｽﾃﾑ指示子)
ｼｽﾃﾑが入力を受け取る準備が出来ていることを示すｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑにより表示される記号。 指示子(prompt)とCP/M指示子(CP/M prompt)をご覧ください。
system tracks (ｼｽﾃﾑ ﾄﾗｯｸ)
CP/Mｼｽﾃﾑ用にﾃﾞｨｽｸ上に予約されたﾄﾗｯｸ。 このｼｽﾃﾑ ﾄﾗｯｸ数はﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ部(DPB)内のOFFﾊﾟﾗﾒｰﾀにより指定されます。 ﾄﾞﾗｲﾌﾞについてのｼｽﾃﾑ ﾄﾗｯｸは常にﾃﾞｰﾀ ﾄﾗｯｸに先行します。 SYSGEN命令はCP/Mｼｽﾃﾑをｼｽﾃﾑ ﾄﾗｯｸからﾒﾓﾘへとその逆に複写します。 標準SYSGENﾌﾟﾛｸﾞﾗﾑはﾄﾗｯｸ0の26ｾｸﾀとﾄﾗｯｸ1の26ｾｸﾀを複写します。 ｼｽﾃﾑ ﾄﾗｯｸがｺﾋﾟｰされるべき追加のｾｸﾀまたはﾄﾗｯｸを含む場合、それ専用化したSYSGENが使用されなければなりません。
terminal (ﾀｰﾐﾅﾙ)
ｺﾝｿｰﾙ(console)をご覧ください。
TPA
一時ﾌﾟﾛｸﾞﾗﾑ領域。 使用者ﾌﾟﾛｸﾞﾗﾑの走行とﾃﾞｰﾀの保存をするﾒﾓﾘ内の領域。 この領域は0100Hから始まり上位ﾒﾓﾘのCP/Mｼｽﾃﾑの基準へ延びるﾒﾓﾘ内の領域です。 CP/Mｼｽﾃﾑの先頭部はCCPで、使用者ﾌﾟﾛｸﾞﾗﾑにより上書きできます。 その場合、TPAはCP/MのBDOS部の基準に延長されます。 CCPが上書きされると、使用者ﾌﾟﾛｸﾞﾗﾑはｼｽﾃﾑ ﾘｾｯﾄ(BDOS機能0)呼び出しか、または0ﾍﾟｰｼﾞの0番地へのｼﾞｬﾝﾌﾟのどちらかで終了しなければなりません。 CP/MのBDOS部の基準ｱﾄﾞﾚｽは0ﾍﾟｰｼﾞの0006H番地に下位が先で格納されています。
track (ﾄﾗｯｸ)
ﾃﾞｨｽｸ上のﾃﾞｰﾀはﾄﾗｯｸ番号とｾｸﾀ番号の組み合わせによりｱｸｾｽされます。 ﾃﾞｨｽｸ上の連鎖環のﾄﾗｯｸは単密度標準IBMﾃﾞｨｽｸで77ﾄﾗｯｸです。 各ﾄﾗｯｸは決められた数の番号付けされたｾｸﾀから成ります。 ﾄﾗｯｸは0からﾃﾞｨｽｸのﾄﾗｯｸ数-1で番号付けされます。
Transient Program Area (一時ﾌﾟﾛｸﾞﾗﾑ領域)
TPAをご覧ください。
upward compatible (上位互換)
以前に公開したｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑまたはｺﾝﾊﾟｲﾗ用に作成したﾌﾟﾛｸﾞﾗﾑが同じｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑの新しく公開した版下で走行することの意味する用語。
USER
ﾃﾞｨﾚｸﾄﾘの個別領域を区別するためにCP/MとMP/Mｼｽﾃﾑで使用される用語。
user number (使用者番号)
ﾃﾞｨｽｸ ﾃﾞｨﾚｸﾄﾘ内のﾌｧｲﾙを指定する番号で、その結果違う使用者はそれら自身のﾌｧｲﾙとﾃﾞｨﾚｸﾄﾘを扱いが必要ですが、同じﾃﾞｨｽｸから全ての作業をします。 CP/Mでのﾌｧｲﾙは16の使用者に分けられます。
utility (利便性のあるﾌﾟﾛｸﾞﾗﾑ)
道具としてのﾌﾟﾛｸﾞﾗﾑ。 ﾌｧｲﾙ複写、ﾌｧｲﾙ消去、ﾌｧｲﾙ編集のような或る操作の実行を使用者に可能とするﾌﾟﾛｸﾞﾗﾑ。 これらはﾌﾟﾛｸﾞﾗﾏと使用者の利便性のために作成されます。
vector (ﾍﾞｸﾀ)
ﾒﾓﾘ内の位置。 ｼｽﾃﾑ呼び出しまたは割り込み処理を行うために使用されるｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ内の移行点。
warm start (ｳｫｰﾑ開始)
0000H番地のｳｫｰﾑ開始ﾍﾞｸﾀへのｼﾞｬﾝﾌﾟ、ｼｽﾃﾑ ﾘｾｯﾄ(BDOS機能0)、またはｷｰﾎﾞｰﾄﾞでのCTRL-C入力によるﾌﾟﾛｸﾞﾗﾑの終了。 ｳｫｰﾑ開始はﾃﾞｨｽｸ補助ｼｽﾃﾑを再初期化し、CCPﾚﾍﾞﾙのCP/Mｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑに制御を返します。 ｳｫｰﾑ開始ﾍﾞｸﾀは単純にBIOS内のWBOOT移行点へ飛びます。
WBOOT
ｳｫｰﾑ開始を起こす時に使用されるBIOS内ﾙｰﾁﾝへの移行点。 ｳｫｰﾑ開始は使用者ﾌﾟﾛｸﾞﾗﾑが0番地に分岐する時、CPUが前面ﾊﾟﾈﾙからﾘｾｯﾄされる時、または使用者がCTRL-Cを入力する時に実行されます。 CCPとBDOSはAﾄﾞﾗｲﾌﾞのｼｽﾃﾑ ﾄﾗｯｸから再読み込みされます。
wildcard characters (ﾜｲﾙﾄﾞｶｰﾄﾞ文字)
或る指定した項目と一致する特殊文字。 CP/Mには ? と * の2つのﾜｲﾙﾄﾞｶｰﾄﾞがあります。 ? はﾌｧｲﾙ名内のどの文字(ﾊﾞｲﾄ)に対しても置き換えでき、* は基本ﾌｧｲﾙ名、ﾌｧｲﾙ形式名、またはその両方を置き換えできます。ﾌｧｲﾙ名内にﾜｲﾙﾄﾞｶｰﾄﾞ文字を配置することにより、曖昧なﾌｧｲﾙ名を作成し、1つ以上のﾌｧｲﾙを素早く参照できます。
word (ﾜｰﾄﾞ)
ｱﾄﾞﾚｽ値のような16ﾋﾞｯﾄまたは2ﾊﾞｲﾄ値。 Intel 8080は8ﾋﾞｯﾄ CPUですが、ｱﾄﾞﾚｽは2ﾊﾞｲﾄを占有し、ﾜｰﾄﾞ値と呼ばれます。
WRITE
現選択DMAｱﾄﾞﾚｽのﾚｺｰﾄﾞを現選択ﾄﾞﾗｲﾌﾞ、ﾄﾗｯｸ、ｾｸﾀに書くBIOS内ﾙｰﾁﾝへの移行点。
XLT (論理→物理ｾｸﾀ変換ﾃｰﾌﾞﾙ)
BIOS内に置かれた論理→物理ｾｸﾀ変換ﾃｰﾌﾞﾙ。 SECTRANは論理→物理ｾｸﾀ番号変換にXLTを使用します。 XLTはﾃﾞｨｽｸ ﾊﾟﾗﾒｰﾀ ﾍｯﾀﾞ(DPH+0)内の2ﾊﾞｲﾄ ｱﾄﾞﾚｽ値も参照します。 このﾊﾟﾗﾒｰﾀが0000Hの場合、ｾｸﾀ変換を行いません。 さもなければこのﾊﾟﾗﾒｰﾀは変換ﾃｰﾌﾞﾙの基準ｱﾄﾞﾚｽです。
ZERO PAGE (0ﾍﾟｰｼﾞ)
0ﾍﾟｰｼﾞ(page zero)をご覧ください。


付録 追補 I CP/M ｴﾗｰ ﾒｯｾｰｼﾞ

ﾒｯｾｰｼﾞは色々な異なる元からやって来ます。 CP/Mは基本ﾃﾞｨｽｸ ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ(BDOS)呼び出しでのｴﾗｰ時にｴﾗｰ ﾒｯｾｰｼﾞを表示します。 CP/Mは命令行でのｴﾗｰ時にもﾒｯｾｰｼﾞを表示します。 CP/Mと一緒に供給された各ﾌﾟﾛｸﾞﾗﾑは自身のﾒｯｾｰｼﾞ群を持ちます。 以降はCPMﾒｯｾｰｼﾞと各ﾌﾟﾛｸﾞﾗﾑのﾒｯｾｰｼﾞを一覧で示します。 応用ﾌﾟﾛｸﾞﾗﾑの場合、ここでの一覧以外のﾒｯｾｰｼﾞがあるかもしれません。 それらのﾒｯｾｰｼﾞの説明についてはその応用ﾌﾟﾛｸﾞﾗﾑの資料を調べてください。
?DDT: このﾒｯｾｰｼﾞは4つの意味の可能性があります。
  • DDTはそのｱｾﾝﾌﾞﾘ言語命令を理解できません。
  • そのﾌｧｲﾙは開くことができません。
  • HEXﾌｧｲﾙでﾁｪｯｸｻﾑ ｴﾗｰが起きました。
  • ｱｾﾝﾌﾞﾗ/逆ｱｾﾝﾌﾞﾗが上書き配置できませんでした。
ABORTED | PIP: ｷｰ押下によるPIP動作の中止。
ASM ｴﾗｰ ﾒｯｾｰｼﾞ
Dﾃﾞｰﾀ ｴﾗｰ:ﾃﾞｰﾀ行要素が指定したﾃﾞｰﾀ領域に配置できません。
E式ｴﾗｰ:式がｱｾﾝﾌﾞﾙ中に評価できません。
Lﾗﾍﾞﾙ ｴﾗｰ:ﾗﾍﾞﾙがﾃｷｽﾄ内に表れません(または重複ﾗﾍﾞﾙ)。
N未実装:ﾏｸﾛのような未実装機能を検出。
Oｵｰﾊﾞｰﾌﾛｰ:式が評価するには複雑すぎます。
Pｽﾞﾚ ｴﾗｰ:ﾗﾍﾞﾙ値ｱｾﾝﾌﾞﾙを通す2つのﾊﾟｽで変化。
Rﾚｼﾞｽﾀ ｴﾗｰ:ﾚｼﾞｽﾀとして指定した値がｺｰﾄﾞと不一致。
S書式ｴﾗｰ:不正な式の形式。
U未定義ﾗﾍﾞﾙ:不在ﾗﾍﾞﾙの使用。
V値ｴﾗｰ:式内の不正形式ｵﾍﾟﾗﾝﾄﾞ。
BAD DELIMITER | STAT: 命令行検査での入力ｴﾗｰ。
Bad Load | CCPまたはSAVEのｴﾗｰ ﾒｯｾｰｼﾞ。
Bdos Err On d:表示ﾄﾞﾗｲﾌﾞ上での基本ﾃﾞｨｽｸ ｵﾍﾟﾚｰﾃｨﾝｸﾞ ｼｽﾃﾑ ｴﾗｰ。 CP/Mはｴﾗｰが起きたﾄﾞﾗｲﾌﾞを示すﾄﾞﾗｲﾌﾞ名形式でd:を置き換えます。 実際のこのﾒｯｾｰｼﾞは以下に記述した4つの状態の内の1つになります。
Bdos Err On d: Bad Sector | このﾒｯｾｰｼﾞはCP/Mがﾄﾞﾗｲﾌﾞ内のﾃﾞｨｽｸなし検出時、不正なﾌｫｰﾏｯﾄのﾃﾞｨｽｸ時、ﾄﾞﾗｲﾌﾞのﾄﾞｱ開時、ﾄﾞﾗｲﾌﾞ電源断時に現れます。 これらの状態の1つを検査し、再び試みてください。 これはﾊｰﾄﾞｳｪｱの問題、磨耗、不正なﾌｫｰﾏｯﾄのﾃﾞｨｽｸも示します。 ﾌﾟﾛｸﾞﾗﾑを終了してCP/Mへ戻るにはCTRL-Cを、このｴﾗｰを無視するにはEnterを押下してください。
Bdos Err On d: File R/O | 読み込み専用ﾌｧｲﾙで削除、改名、ﾌｧｲﾙ属性の設定を試みました。 ﾌｧｲﾙは先に STAT ﾌｧｲﾙ名 $R/W で読み書き(R/W)属性に設定されるべきです。
Bdos Err On d: R/O | ﾄﾞﾗｲﾌﾞがSTAT命令で読み込み専用状態に指定されてしまっているか、またはCTRL-Cでの初期化なしでﾄﾞﾗｲﾌﾞのﾃﾞｨｽｸが変更されてしまっています。 CP/Mは何れかのｷｰを押下すると直ぐに現在のﾌﾟﾛｸﾞﾗﾑを終了します。
Bdos Err on d: Select | CP/Mが不在ﾄﾞﾗｲﾌﾞを指定する命令行を受け取りました。 CP/Mは何れかのｷｰを押下すると直ぐに現在のﾌﾟﾛｸﾞﾗﾑを終了します。 回復するにはCTRL-CまたはEnterを押下してください。
Break "x" at cED: "x" は以下で記述される記号で、c はｴﾗｰが起きた時に実行していた命令文字です。

# | 検索失敗。 EDはF, S, N命令で指定した文字列を探せません。
? | 命令文字 c 非承認。 EDが示された命令文字を認証できないか、またはE, H, O, Q命令がその命令行で単独でない。
O | S命令で指定したﾌｧｲﾙが見つからなかった。
> | ﾊﾞｯﾌｧ溢れ。 EDがﾒﾓﾘ ﾊﾞｯﾌｧにより多くの文字を押し込めなれない、またはF, S, N命令で指定した文字列が長すぎます。
E | 命令中止。 ｺﾝｿｰﾙでのｷｰ押下が命令実行を中止しました。
F | ﾃﾞｨｽｸまたはﾃﾞｨﾚｸﾄﾘ溢れ。 このｴﾗｰはﾃﾞｨｽｸまたはﾃﾞｨﾚｸﾄﾘのどちらかの溢れﾒｯｾｰｼﾞに続きます。 これらのﾒｯｾｰｼﾞ下で一覧される回復手続きを参照してください。

CANNOT CLOSE DESTINATION FILE--{filespec} | PIP: 出力ﾌｧｲﾙが閉じられません。 正しいﾃﾞｨｽｸがそのﾄﾞﾗｲﾌﾞにあるかを見て、そのﾃﾞｨｽｸが書き込み禁止にされていないことを検査した後で適切な動作をするべきです。
Cannot close, R/O
CANNOT CLOSE FILES		CP/Mがﾌｧｲﾙに書き込めません。 通常、これはﾃﾞｨｽｸが書き込み保護されるために起きます。
ASM: 出力ﾌｧｲﾙが閉じられません。 これはASM実行を終了する致命的なｴﾗｰです。 正しいﾃﾞｨｽｸがそのﾄﾞﾗｲﾌﾞにあるかを見て、そのﾃﾞｨｽｸが書き込み禁止にされていないことを検査してください。
DDT: W命令によって書かれたﾃﾞｨｽｸ ﾌｧｲﾙが閉じられません。 これはDDT実行を終了する致命的なｴﾗｰです。 正しいﾃﾞｨｽｸがそのﾄﾞﾗｲﾌﾞにあるかを見て、そのﾃﾞｨｽｸが書き込み禁止にされていないことを検査してください。
SUBMIT: このｴﾗｰはSUBMITﾌｧｲﾙ処理中に起き得ます。 正しいｼｽﾃﾑ ﾃﾞｨｽｸがAﾄﾞﾗｲﾌﾞ内にあり、そのﾃﾞｨｽｸが書き込み保護されていないかを検査してください。 SUBMIT動作はCP/M再ﾌﾞｰﾄ後に再始動できます。
CANNOT READ | PIP: PIPが指定した転送元から読めない。 ﾘｰﾀﾞが実装されていない。
CANNOT WRITE | PIP: PIP命令で指定した転送先が不正です。 おそらく転送先として入力装置を指定しました。
Checksum error | PIP: HEXﾚｺｰﾄﾞのﾁｪｯｸｻﾑ ｴﾗｰに出会いました。 ｴﾗｰを生成したHEXﾚｺｰﾄﾞはおそらくHEXﾌｧｲﾙの再生成により修正されなけれななりません。
CHECKSUM ERROR
LOAD ADDRESS hhhh
ERROR ADDRESS hhhh
BYTES READ:
hhhh:		LOAD 不正なﾃﾞｰﾀを含むﾌｧｲﾙ。 ｿｰｽからHEXﾌｧｲﾙを再生成してください。
Command Buffer Overflow | SUBMIT: SUBMITﾊﾞｯﾌｧは入力ﾌｧｲﾙ内で2048文字(ﾊﾞｲﾄ)までを許します。
Command too long | SUBMIT: SUBMITﾌｧｲﾙ内の命令は125文字(ﾊﾞｲﾄ)を越えられません。
CORRECT ERROR, TYPE RETURN OR CTRL-Z | PIP: HEXﾌｧｲﾙ転送中にHEXﾚｺｰﾄﾞのﾁｪｯｸｻﾑ ｴﾗｰに出会いました。 ｴﾗｰを生成したHEXﾚｺｰﾄﾞはおそらくHEXﾌｧｲﾙの再生成により修正されなけれななりません。
DESTINATION IS R/O, DELETE (Y/N)? | PIP: PIP命令で指定した転送先ﾌｧｲﾙが既に存在し、且つ読み込みで専用です。 Yを入力すると、ﾌｧｲﾙの複写が行われる前に転送先ﾌｧｲﾙが削除されます。
Directory full | ED: 転送先ﾃﾞｨｽｸに書かれるﾌｧｲﾙに対してﾃﾞｨﾚｸﾄﾘの空きが充分ではありません。 ｴﾃﾞｨﾀを抜けずにﾃﾞｨｽｸの不必要な何れかのﾌｧｲﾙを削除するためにOXﾌｧｲﾙ名命令が使用できます。
SUBMIT: SUBMIT処理に対して使用される$$$.SUBﾌｧｲﾙを各ためのﾃﾞｨﾚｸﾄﾘの空きが充分ではありません。 いくつかのﾌｧｲﾙを削除するか新しいﾃﾞｨｽｸを選択し、再試行してください。
Disk full | ED: 出力ﾌｧｲﾙに対して充分なﾃﾞｨｽｸの空きがありません。 このｴﾗｰはE, H, W, X命令で起き得ます。 E命令で起きた場合、違うﾄﾞﾗｲﾌﾞでﾌｧｲﾙ名に前置する命令で繰り返せます。
DISK READ ERROR--{filespec} | PIP: PIPで指定した入力ﾃﾞｨｽｸﾌｧｲﾙが正しく読めません。 これは通常、予期せぬﾌｧｲﾙ終了の結果です。 ﾌｧｲﾙ内の問題を正してください。
DISK WRITE ERROR--{filespec} | DDT: おそらくﾃﾞｨｽｸが一杯のため、W命令中のﾃﾞｨｽｸ書き込み操作が完全に実行できません。 いくつかの不必要なﾌｧｲﾙの削除か、またはより大きな空きﾃﾞｨｽｸを持ってくるかのどちらかにすべきです。
PIP: おそらくﾃﾞｨｽｸが一杯のため、PIP命令中のﾃﾞｨｽｸ書き込み操作が完全に実行できません。 いくつかの不必要なﾌｧｲﾙの削除か、またはより大きな空きﾃﾞｨｽｸを持ってくるかのどちらかを行い、PIPを再び実行すべきです。
SUBMIT: SUBMITﾌﾟﾛｸﾞﾗﾑがﾃﾞｨｽｸに$$$.SUBﾌｧｲﾙを書けません。 いくつかのﾌｧｲﾙを削除するか、または新しいﾃﾞｨｽｸを選択し、再び試みてください。
ERROR: BAD PARAMETER | PIP: PIP命令内に不正なﾊﾟﾗﾒｰﾀを入力しました。 正しく再入力してください。
ERROR: CANNOT OPEN SOURCE, LOAD ADDRESS hhhh | LOAD: 指定したﾌｧｲﾙが見つからないか、ﾌｧｲﾙ名が指定されない場合に表示されます。
ERROR: CANNOT CLOSE FILE, LOAD ADDRESS hhhh | LOAD: BDOS機能呼び出しで返されたｴﾗｰ ｺｰﾄﾞにより引き起こされます。 ﾃﾞｨｽｸが書き込み保護かもしれません。
ERROR: CANNOT OPEN SOURCE, LOAD ADDRESS hhhh | LOAD: 元ﾌｧｲﾙが見つかりません。 ﾃﾞｨｽｸのﾃﾞｨﾚｸﾄﾘを調べてください。
ERROR: DISK READ, LOAD ADDRESS hhhh | LOAD: BDOS機能呼び出しで返されたｴﾗｰ ｺｰﾄﾞにより引き起こされます。
ERROR: DISK WRITE, LOAD ADDRESS hhhh | LOAD: 転送先ﾃﾞｨｽｸが一杯です。
ERROR: INVERTED LOAD ADDRESS, LOAD ADDRESS hhhh | LOAD: ﾚｺｰﾄﾞのｱﾄﾞﾚｽが直前に処理したﾚｺｰﾄﾞのｱﾄﾞﾚｽと大きくかけ離れています。 これはLOADの内部制限ですが、これは回避できます。 ﾒﾓﾘ内にHEXﾌｧｲﾙを読むためにDDTを使用し、その後ﾃﾞｨｽｸのﾌｧｲﾙにそのﾒﾓﾘ ｲﾒｰｼﾞを保存するためにSAVE命令を使用してください。
ERROR: NO MORE DIRECTORY SPACE, LOAD ADDRESS hhhh | LOAD: ﾃﾞｨｽｸのﾃﾞｨﾚｸﾄﾘが一杯です。
Error on line nnn message | SUBMIT: SUBMITﾌﾟﾛｸﾞﾗﾑは左で示した形式でこのﾒｯｾｰｼﾞを表示し、nnn はSUBMITﾌｧｲﾙの行番号を表します。 行番号に続く message を参照してください。
FILE ERROR | ED: ﾃﾞｨｽｸまたはﾃﾞｨﾚｸﾄﾘが一杯でEDはこれ以上ﾃﾞｨｽｸに書けません。 これは致命的なｴﾗｰで、EDを始める前にはそのﾌｧｲﾙの第2ｺﾋﾟｰを保持するため、ﾃﾞｨｽｸに充分な空きがあることを確認してください。
FILE EXISTS | 既に他のﾌｧｲﾙへ割り当てたﾌｧｲﾙ特性(名)を使用するﾌｧｲﾙの作成または改名をCP/Mに依頼しました。 存在するﾌｧｲﾙを削除するか、または他のﾌｧｲﾙ特性(名)を使用してください。
REN: 指定した新規名は既に存在するﾌｧｲﾙの名前です。 存在するﾌｧｲﾙの名前でﾌｧｲﾙを改名できません。 同じﾌｧｲﾙの新版で存在するﾌｧｲﾙを置き換えたい場合、存在するﾌｧｲﾙを削除または改名するか、またはPIPﾌﾟﾛｸﾞﾗﾑを使用してください。
File exists, erase it | ED: 元と違うﾃﾞｨｽｸに転送先ﾌｧｲﾙを置くとき、その転送先ﾌｧｲﾙが既に存在します。 出力ﾌｧｲﾙを受け取るために削除または他のﾃﾞｨｽｸが選択されるべきです。
** FILE IS READ/ONLY ** | ED: EDを始めるために命令で指定したﾌｧｲﾙが読み込み専用属性です。 EDはそのﾌｧｲﾙ読み、使用者はそれを調べられますが、EDは読み込み専用ﾌｧｲﾙを変更できません。
File Not Found | CP/Mは指定したﾌｧｲﾙを見つけられません。 正しいﾄﾞﾗｲﾌﾞ関係指定を入力したか、またはﾄﾞﾗｲﾌﾞ内に正しいﾃﾞｨｽｸがあるかを調べてください。
ED: EDは指定したﾌｧｲﾙを見つけられません。 正しいﾄﾞﾗｲﾌﾞ関係指定を入力したか、またはﾄﾞﾗｲﾌﾞ内に正しいﾃﾞｨｽｸがあるかを調べてください。
STAT: STATは指定したﾌｧｲﾙを見つけられません。 このﾒｯｾｰｼﾞはﾄﾞﾗｲﾌﾞ関係指定を省略した場合に現れるかもしれません。 正しいﾃﾞｨｽｸがﾄﾞﾗｲﾌﾞ内にあるかを見て調べてください。
FILE NOT FOUND--{filespec} | PIP: 指定した入力ﾌｧｲﾙが存在しません。
Filename required | ED: ﾌｧｲﾙ名なしでED命令を入力しました。 作成または編集したいﾌｧｲﾙ名をED命令に続けて再入力してください。
hhhh??=dd | DDT: ?? はDDTがｱﾄﾞﾚｽ hhhh で出会った16進値 dd を8080ｱｾﾝﾌﾞﾘ言語でどう表すか解からないことを示します。
Insufficient memory | DDT: EまたはR命令で指定したﾌｧｲﾙを読み込むための充分なﾒﾓﾘがありません。
Invalid Assignment | STAT: 不正なﾄﾞﾗｲﾌﾞまたはﾌｧｲﾙ割り当てを指定、または装置名の誤字。 このｴﾗｰ ﾒｯｾｰｼﾞはﾌｧｲﾙ名に伴うことができる有効なﾌｧｲﾙ割り当ての一覧が続くかもしれません。 不正なﾄﾞﾗｲﾌﾞ割り当てが試みられた場合、Use: d:=RO ﾒｯｾｰｼﾞが表示され、ﾄﾞﾗｲﾌﾞ割り当てに対する正しい書式を示します。
Invalid control character | SUBMIT: ﾌｧｲﾙ形式SUBのSUBMITﾌｧｲﾙ内で有効な制御文字は^A～^Zだけです。 SUBMITﾌｧｲﾙ内の制御文字は^の入力により表され、Ctrlｷｰの押下でないことに注意してください。
INVALID DIGIT--{filespec} | PIP: HEXﾌｧｲﾙ読み込み中に不正なHEX桁に出会ってしまいました。 不正なHEX桁のHEXﾌｧｲﾙはおそらくHEXﾌｧｲﾙの再生成により修正されるべきです。
Invalid Disk Assignment | STAT: =R/O を除く何かでﾄﾞﾗｲﾌﾞ特性を指定した場合に現れるかもしれません。
INVALID DISK SELECT | CP/Mが不在ﾄﾞﾗｲﾌﾞを指定する命令行を受け取ったか、またはﾄﾞﾗｲﾌﾞ内のﾃﾞｨｽｸが不正なﾌｫｰﾏｯﾄです。 CP/Mは何れかのｷｰが押下されると直ぐに現在のﾌﾟﾛｸﾞﾗﾑを終了します。
INVALID DRIVE NAME (Use A, B, C, or D) | SYSGEN: SYSGENはｼｽﾃﾑ生成について有効な転送先としてA, B, C, Dﾄﾞﾗｲﾌﾞだけを承認します。
Invalid File Indicator | STAT: RO, RW, DIR, SYSを指定しない場合に現れます。
INVALID FORMAT | PIP PIP命令の形式が不正です。 PIP命令の記述をご覧ください。
INVALID HEX DIGIT
LOAD ADDRESS hhhh
ERROR ADDRESS hhhh
BYTES READ:
hhhh		LOAD: ﾌｧｲﾙが不正なHEX桁を含んでいます。
INVALID MEMORY SIZE | MOVCPM: 64Kより小さな値か、またはｺﾝﾋﾟｭｰﾀの実際のﾒﾓﾘ容量を指定してください。
INVALID SEPARATOR | PIP: 2つの入力ﾌｧｲﾙ名間の分離子に不正な文字を配置しました。
INVALID USER NUMBER | PIP: 15より大きな使用者番号を指定しました。 使用者番号は0～15の範囲です。
n? | USER: 使用者領域番号に15より大きな数値を指定しました。 例えば USER 18<cr> を入力すると、画面は 18? を表示します。
NO DIRECTORY SPACE | ASM: ﾃﾞｨｽｸのﾃﾞｨﾚｸﾄﾘが一杯です。 HEXとPRNﾌｧｲﾙ用の空きを作るためにいくつかのﾌｧｲﾙを削除してください。 通常の標準版のﾃﾞｨﾚｸﾄﾘは64個のﾌｧｲﾙ名だけを保持します。
NO DIRECTORY SPACE--{filespec} | PIP: 出力ﾌｧｲﾙ用の充分なﾃﾞｨﾚｸﾄﾘの空きがありません。 いくつかの不必要なﾌｧｲﾙを削除するか、より多くのﾃﾞｨﾚｸﾄﾘの空きの他のﾃﾞｨｽｸを得るかのどちらかで、再びPIPを実行すべきです。
NO FILE--{filespec} | DIR, ERA, REN, PIP: CP/Mが指定したﾌｨｱﾙを見つけられない、またはﾌｧｲﾙが存在しません。
ASM: 示されたｿｰｽまたはｲﾝｸﾙｰﾄﾞ ﾌｧｲﾙが示されたﾄﾞﾗｲﾌﾞで見つけられません。
DDT: EまたはR命令で指定したﾌｧｲﾙがそのﾃﾞｨｽｸで見つけられません。
NO INPUT FILE PRESENT ON DISK | DUMP: 要求したﾌｧｲﾙが存在しません。
No memory | 指定したﾌﾟﾛｸﾞﾗﾑを読み込むために利用可能なﾒﾓﾘ(ﾊﾞｯﾌｧ?)が充分ではありません。
NO SOURCE FILE ON DISK | SYSGEN: SYSGENが CP/Mxx.COM 形式のﾌｧｲﾙまたは元ﾃﾞｨｽｸのｼｽﾃﾑ ﾄﾗｯｸのどちらかでCP/Mを見つけられません。
NO SOURCE FILE PRESENT | ASM: ｱｾﾝﾌﾞﾗが指定したﾌｧｲﾙを見つけられません。 命令行でﾌｧｲﾙ名の入力を誤ったか、またはﾌｧｲﾙ形式名がASMでないかのどちらかです。
NO SPACE | SAVE: ﾃﾞｨｽｸ上の既存ﾌｧｲﾙが多すぎるか、または情報を保存するためのﾃﾞｨｽｸ上の空きがありません。
No SUB file Present | SUBMIT: 正しい動作のSUBMITのためにﾌｧｲﾙ形式名SUBのﾌｧｲﾙを作成しなければなりません。 SUBﾌｧｲﾙは通常のCP/M命令を含みます。 1行には1命令を使用してください。
NOT A CHARACTER SOURCE | PIP: PIP命令で指定した転送元が不正です。 おそらく出力装置を転送元に指定しました。
** NOT DELETED ** | PIP: PIPがﾌｧｲﾙを削除できません。 それが読み込み専用(R/O)属性かもしれません。
NOT FOUND | PIP: PIPは指定したﾌｧｲﾙを見つけられません。
OUTPUT FILE WRITE ERROR | ASM: HEXとPRNﾌｧｲﾙについての転送先として書き込み保護のﾃﾞｨｽｸを指定したか、またはﾃﾞｨｽｸに空きがありません。 ﾌﾟﾛｸﾞﾗﾑをｱｾﾝﾌﾞﾙする前にその問題点を修正してください。
Parameter error | SUBMIT: ﾌｧｲﾙ形式SUBのSUBMITﾌｧｲﾙ内の有効なﾊﾟﾗﾒｰﾀは$0～$9です。
PARAMETER ERROR, TYPE RETURN TO IGNORE | SYSGEN: RETURN(Enter)を押下すると、SYSYGENは不正なﾊﾟﾗﾒｰﾀを処理せずに進行します。
QUIT NOT FOUND | PIP: Qﾊﾟﾗﾒｰﾀに対する文字列が入力ﾌｧｲﾙ内に見つかりませんでした。
Read error | TYPE: 命令行内で指定したﾌｧｲﾙの読み込み時にｴﾗｰが起きました。 ﾃﾞｨｽｸを検査して再び試みてください。 STAT ﾌｧｲﾙ名 命令で障害を調べられます。
READER STOPPING | PIP: ﾘｰﾀﾞ動作が割り込まれました。
Record Too Long | PIP: PIPは128ﾊﾞｲﾄより長いﾚｺｰﾄﾞを処理できません。
Requires CP/M 2.0 or later | XSUB: XSUBはCP/M 2.0またはより新しい版の機能が必要です。
Requires CP/M 2.0 or new for operation | PIP: この版のPIPはCP/M 2.0またはより新しい版の機能が必要です。
START NOT FOUND | PIP: Sﾊﾟﾗﾒｰﾀに対する文字列が転送元ﾌｧｲﾙ内で見つけられません。
SOURCE FILE INCOMPLETE | SYSGEN: SYSGENがそのCP/M元ﾌｧｲﾙを使用できません。
SOURCE FILE NAME ERROR | ASM: ﾌｧｲﾙのｱｾﾝﾌﾞﾙでは、ﾜｲﾙﾄﾞｶｰﾄﾞ文字 ? と * を使用できません。 同時には1つのﾌｧｲﾙだけがｱｾﾝﾌﾞﾙできます。
SOURCE FILE READ ERROR | ASM: ｱｾﾝﾌﾞﾗがｱｾﾝﾌﾞﾘ言語ﾌﾟﾛｸﾞﾗﾑを含むﾌｧｲﾙ内の情報を理解できません。 ｱｾﾝﾌﾞﾘ言語ﾌｧｲﾙ上に他のﾌｧｲﾙの一部が書かれてしまっているかもしれません。 または情報がﾃﾞｨｽｸ上に正しく保存されていません。 ｴﾗｰを探し出すためにTYPE命令を使用してください。 ｱｾﾝﾌﾞﾘ言語ﾌｧｲﾙはｷｰﾎﾞｰﾄﾞ上にある文字、記号、数字を含みます。 画面が見覚えのない出力を表示、または妙になる場合、そのﾌｧｲﾙ内に忍び込んだｺﾝﾋﾟｭｰﾀ命令の場所が見つかります。
SYNCHRONIZATION ERROR | MOVCPM: MOVCPMが誤ったCP/Mｼｽﾃﾑで使用されました。
"SYSTEM" FILE NOT ACCESSIBLE | STAT命令でSYSに設定したﾌｧｲﾙにｱｸｾｽを試みました。
** TOO MANY FILES ** | STAT: 指定したﾌｧｲﾙを並び替えるためのSTAT用ﾒﾓﾘが充分でないか、または512より多くのﾌｧｲﾙが指定されました。
UNEXPECTED END OF HEX FILE--{filespec} | PIP: HEXﾚｺｰﾄﾞの終了子より先にﾌｧｲﾙ終了に出会いました。 終了ﾚｺｰﾄﾞなしのHEXﾌｧｲﾙはおそらくHEXﾌｧｲﾙの再作成により修正されるべきです。
Unrecognized Destination | PIP: 有効な転送先について命令行を検査してください。
Use: STAT d:=RO | STAT: 無効なSTATﾄﾞﾗｲﾌﾞ命令が与えられました。 STATでの有効なﾄﾞﾗｲﾌﾞ指定は STAT d:=RO だけです。
VERIFY ERROR:--{filespec} | PIP: V任意選択での複写時、PIPが書き込み直後のﾃﾞｰﾀの再読み込みとﾒﾓﾘ ﾊﾞｯﾌｧ内のﾃﾞｰﾀの比較で違いを見つけました。 通常、これは転送先ﾃﾞｨｽｸまたはﾄﾞﾗｲﾌﾞのどちらかの失敗を示します。
WRONG CP/M VERSION (REQUIRES 2.0)
XSUB ACTIVE | SUBMIT: XSUBが開始されました。
XSUB ALREADY PRESENT | SUBMIT XSUBはﾒﾓﾘ内で既に有効です。
Your Input? | CP/Mが指定した命令を見つけられない場合、?が後続する入力した命令名が返ります。 命令行が正しく入力されたか、または要求した命令が既定または指定したﾃﾞｨｽｸ上にCOMﾌｧｲﾙとして存在するかを調べてください。


付録 ROMﾓﾆﾀ ｿｰｽ

0000		;***************************

0000		;*			   *

0000		;*	SDT (V02/L02)	   *

0000		;*			   *

0000		;***************************

0000

0000			INCLUDE	64180.LIB

0000

0000			TITLE	SDT

0000

0000		;	* I/O定義 *
0000

0000		;	( CPU: HD64180 )
0000

0000		A0A	EQU	00H		;
非同期ｼﾘｱﾙ0 制御ﾚｼﾞｽﾀA
0001		A1A	EQU	01H		;
非同期ｼﾘｱﾙ1 制御ﾚｼﾞｽﾀA
0002		A0B	EQU	02H		;
非同期ｼﾘｱﾙ0 制御ﾚｼﾞｽﾀB
0003		A1B	EQU	03H		;
非同期ｼﾘｱﾙ1 制御ﾚｼﾞｽﾀB
0004		A0S	EQU	04H		;
非同期ｼﾘｱﾙ0 ｽﾃｰﾀｽ ﾚｼﾞｽﾀ
0005		A1S	EQU	05H		;
非同期ｼﾘｱﾙ1 ｽﾃｰﾀｽ ﾚｼﾞｽﾀ
0006		A0T	EQU	06H		;
非同期ｼﾘｱﾙ0 送信ﾃﾞｰﾀ ﾚｼﾞｽﾀ
0007		A1T	EQU	07H		;
非同期ｼﾘｱﾙ1 送信ﾃﾞｰﾀ ﾚｼﾞｽﾀ
0008		A0R	EQU	08H		;
非同期ｼﾘｱﾙ0 受信ﾃﾞｰﾀ ﾚｼﾞｽﾀ
0009		A1R	EQU	09H		;
非同期ｼﾘｱﾙ1 受信ﾃﾞｰﾀ ﾚｼﾞｽﾀ
000A		S0C	EQU	0AH		;
同期ｼﾘｱﾙ 制御ﾚｼﾞｽﾀ
000B		S0D	EQU	0BH		;
同期ｼﾘｱﾙ ｽﾃｰﾀｽ ﾚｼﾞｽﾀ
000C		T0DL	EQU	0CH		;
ﾀｲﾏ0 ﾃﾞｰﾀ下位ﾚｼﾞｽﾀ
000D		T0DH	EQU	0DH		;
ﾀｲﾏ0 ﾃﾞｰﾀ上位ﾚｼﾞｽﾀ
000E		T0RL	EQU	0EH		;
ﾀｲﾏ0 再設定値下位ﾚｼﾞｽﾀ
000F		T0RH	EQU	0FH		;
ﾀｲﾏ0 再設定値上位ﾚｼﾞｽﾀ
0010		TXC	EQU	10H		;
ﾀｲﾏ制御ﾚｼﾞｽﾀ
0014		T1DL	EQU	14H		;
ﾀｲﾏ1 ﾃﾞｰﾀ下位ﾚｼﾞｽﾀ
0015		T1DH	EQU	15H		;
ﾀｲﾏ1 ﾃﾞｰﾀ上位ﾚｼﾞｽﾀ
0016		T1RL	EQU	16H		;
ﾀｲﾏ1 再設定値下位ﾚｼﾞｽﾀ
0017		T1RH	EQU	17H		;
ﾀｲﾏ1 再設定値上位ﾚｼﾞｽﾀ
0020		D0SL	EQU	20H		;
DMA0 転送元ｱﾄﾞﾚｽ下位ﾚｼﾞｽﾀ
0021		D0SH	EQU	21H		;
DMA0 転送元ｱﾄﾞﾚｽ上位ﾚｼﾞｽﾀ
0022		D0SB	EQU	22H		;
DMA0 転送元ﾊﾞﾝｸ ﾚｼﾞｽﾀ
0023		D0DL	EQU	23H		;
DMA0 転送先ｱﾄﾞﾚｽ下位ﾚｼﾞｽﾀ
0024		D0DH	EQU	24H		;
DMA0 転送先ｱﾄﾞﾚｽ上位ﾚｼﾞｽﾀ
0025		D0DB	EQU	25H		;
DMA0 転送先ﾊﾞﾝｸ ﾚｼﾞｽﾀ
0026		D0CL	EQU	26H		;
DMA0 転送ﾊﾞｲﾄ数下位ﾚｼﾞｽﾀ
0027		D0CH	EQU	27H		;
DMA0 転送ﾊﾞｲﾄ数上位ﾚｼﾞｽﾀ
0028		D1ML	EQU	28H		;
DMA1 転送ﾒﾓﾘ ｱﾄﾞﾚｽ下位ﾚｼﾞｽﾀ
0029		D1MH	EQU	29H		;
DMA1 転送ﾒﾓﾘ ｱﾄﾞﾚｽ上位ﾚｼﾞｽﾀ
002A		D1MB	EQU	2AH		;
DMA1 転送ﾒﾓﾘ ﾊﾞﾝｸ ﾚｼﾞｽﾀ
002B		D1IL	EQU	2BH		;
DMA1 転送I/Oｱﾄﾞﾚｽ下位ﾚｼﾞｽﾀ
002C		D1IH	EQU	2CH		;
DMA1 転送I/Oｱﾄﾞﾚｽ上位ﾚｼﾞｽﾀ
002E		D1CL	EQU	2EH		;
DMA1 転送ﾊﾞｲﾄ数下位ﾚｼﾞｽﾀ
002F		D1CH	EQU	2FH		;
DMA1 転送ﾊﾞｲﾄ数上位ﾚｼﾞｽﾀ
0030		DXS	EQU	30H		;
DMAｽﾃｰﾀｽ ﾚｼﾞｽﾀ
0031		DXM	EQU	31H		;
DMA種別ﾚｼﾞｽﾀ
0032		DWR	EQU	32H		;
DMA/ｳｪｲﾄ制御ﾚｼﾞｽﾀ
0000		;

0033		ILR	EQU	33H		;
割り込みﾍﾞｸﾀ下位ﾚｼﾞｽﾀ
0034		ITR	EQU	34H		;
INT/TRAP制御ﾚｼﾞｽﾀ
0036		RFR	EQU	36H		;
ﾘﾌﾚｯｼｭ制御ﾚｼﾞｽﾀ
0038		CBR	EQU	38H		;
MMU 共通領域基準ﾚｼﾞｽﾀ
0039		BBR	EQU	39H		;
MMU ﾊﾞﾝｸ基準ﾚｼﾞｽﾀ
003A		BAR	EQU	3AH		;
MMU 共通/ﾊﾞﾝｸ領域ﾚｼﾞｽﾀ
003F		ICR	EQU	3FH		;
I/O制御ﾚｼﾞｽﾀ
0000

0000		;	( FDC: MB89311(MB8877A強化版) )
0000

0040		F1C	EQU	40H		;
制御ﾚｼﾞｽﾀ
0041		F1T	EQU	41H		;
ﾄﾗｯｸ ﾚｼﾞｽﾀ
0042		F1S	EQU	42H		;
ｾｸﾀ ﾚｼﾞｽﾀ
0043		F1D	EQU	43H		;
ﾃﾞｰﾀ ﾚｼﾞｽﾀ
0000

0000		;	( PPI: 8255 )
0000

0050		P1A	EQU	50H		;
ﾎﾟｰﾄAﾃﾞｰﾀ ﾚｼﾞｽﾀ
0051		P1B	EQU	51H		;
ﾎﾟｰﾄBﾃﾞｰﾀ ﾚｼﾞｽﾀ
0052		P1C	EQU	52H		;
ﾎﾟｰﾄCﾃﾞｰﾀ ﾚｼﾞｽﾀ
0053		P1X	EQU	53H		;
ﾎﾟｰﾄ制御ﾚｼﾞｽﾀ
0000

0000		;	( 拡張出力ﾎﾟｰﾄ )
0000

0060		PPT	EQU	60H		;
出力ﾎﾟｰﾄ
0000

0000		;	(( PPIﾎﾟｰﾄ信号配置 ))
0000

0000		; A7	O	M-ON		;
FDD ﾓｰﾀON
0000		; A6	O	HLD		;
FDD ﾍｯﾄﾞ ﾛｰﾄﾞ
0000		; A5	O	MFM		;
FDD MFM/FM
0000		; A4	O	SIDE		;
FDD 面1/0
0000		; A3	O	DS3		;
FDD ﾄﾞﾗｲﾌﾞ3選択
0000		; A2	O	DS2		;
FDD ﾄﾞﾗｲﾌﾞ2選択
0000		; A1	O	DS1		;
FDD ﾄﾞﾗｲﾌﾞ1選択
0000		; A0	O	DS0		;
FDD ﾄﾞﾗｲﾌﾞ0選択
0000		;

0000		; B7	O	DB7		;
ﾌﾟﾘﾝﾀ ﾃﾞｰﾀ7
0000		; B6	O	DB6		;
ﾌﾟﾘﾝﾀ ﾃﾞｰﾀ6
0000		; B5	O	DB5		;
ﾌﾟﾘﾝﾀ ﾃﾞｰﾀ5
0000		; B4	O	DB4		;
ﾌﾟﾘﾝﾀ ﾃﾞｰﾀ4
0000		; B3	O	DB3		;
ﾌﾟﾘﾝﾀ ﾃﾞｰﾀ3
0000		; B2	O	DB2		;
ﾌﾟﾘﾝﾀ ﾃﾞｰﾀ2
0000		; B1	O	DB1		;
ﾌﾟﾘﾝﾀ ﾃﾞｰﾀ1
0000		; B0	O	DB0		;
ﾌﾟﾘﾝﾀ ﾃﾞｰﾀ0
0000		;

0000		; C7	I	CLKS		;
CPUｸﾛｯｸ選択
0000		; C6	I			;
(未定義)
0000		; C5	I	2SIDE		;
FDD 両面(倍密度)
0000		; C4	I	BUSY		;
ﾌﾞﾘﾝﾀ ﾋﾞｼﾞｰ
0000		; C3	O	/STB		;
ﾌﾟﾘﾝﾀ ｽﾄﾛｰﾌﾞ
0000		; C2	I	/ACK		;
ﾌﾟﾘﾝﾀ ｱｸﾉｰﾚｯｼﾞ
0000		; C1	O			;
(未定義)
0000		; C0	O	P-INT		;
ﾌﾟﾘﾝﾀ/ACK割り込み要求
0000

0000		;	(( 拡張出力ﾎﾟｰﾄ信号配置 ))
0000

0000		; 5	O	/MR		;
FDC ﾏｽﾀ ﾘｾｯﾄ
0000		; 4	O	LOW-C		;
FDD 低電流(low current)
0000		; 3	O	BA19		;
拡張ﾊﾞﾝｸ ｱﾄﾞﾚｽ19
0000		; 2	O	BA18		;
拡張ﾊﾞﾝｸ ｱﾄﾞﾚｽ18
0000		; 1	O	BA17		;
拡張ﾊﾞﾝｸ ｱﾄﾞﾚｽ17
0000		; 0	O	BA16		;
拡張ﾊﾞﾝｸ ｱﾄﾞﾚｽ16
0000

0000		;	( FDC命令ｺｰﾄﾞ )
0000

0000		FHME	EQU	 00H		;
ﾍｯﾄﾞ原点位置移動(Home)
0010		FSEK	EQU	 10H		;
ﾍｯﾄﾞ目的ﾄﾗｯｸ位置移動(Seek)
0031		FSTP	EQU	 31H		;
ﾍｯﾄﾞ 1ﾄﾗｯｸ分移動(Step)
0084		FSRD	EQU	 84H		;
単一ｾｸﾀ読み込み(Single sector read)
0094		FMRD	EQU	 94H		;
複数ｾｸﾀ読み込み(Multiple sector read)
00A4		FSWR	EQU	0A4H		;
単一ｾｸﾀ書き込み(Single sector write)
00B4		FMWR	EQU	0B4H		;
複数ｾｸﾀ書き込み(Multiple sector write)
00D0		FINT	EQU	0D0H		;
強制割り込み(Force interrupt)
00F4		FTWR	EQU	0F4H		;
ﾄﾗｯｸ書き込み(Track write)
00F5		FFMT	EQU	0F5H		;
ﾌｫｰﾏｯﾄ(Format)
00FC		FDLY	EQU	0FCH		;
遅延(Delay)
00FD		FASP	EQU	0FDH		;
ﾊﾟﾗﾒｰﾀ指定(Asign parameter)
00FE		FASM	EQU	0FEH		;
種別指定(Asign mode)
00FF		FRES	EQU	0FFH		;
ﾘｾｯﾄ(Reset)
0000		;

00C0		FCMSK	EQU	0C0H		;
拡張動作,書き込み補償
0000

0000		;	( ｸﾛｯｸ周波数別ﾀｲﾏ値,bps値定義 )
0000

1200		T09M	EQU	4608		;
ﾀｲﾏ0用9.216MHz時10msｶｳﾝﾄ値
0FA0		T08M	EQU	4000		;
ﾀｲﾏ0用8.000MHz時10msｶｳﾝﾄ値
0C00		T06M	EQU	3072		;
ﾀｲﾏ0用6.144MHz時10msｶｳﾝﾄ値
0000		;

B400		T19M	EQU	46080		;
ﾀｲﾏ1用9.216MHz時100msｶｳﾝﾄ値
9C40		T18M	EQU	40000		;
ﾀｲﾏ1用8.000MHz時100msｶｳﾝﾄ値
7800		T16M	EQU	30720		;
ﾀｲﾏ1用6.144MHz時100msｶｳﾝﾄ値
0000

0001		BPS6	EQU	00000001B	;
PS=0,DR=0,SS=1(6.144MHz時÷320=19200bps)
0020		BPS9	EQU	00100000B	;
PS=1,DR=0,SS=0(9.216MHz時÷480=19200bps)
0000

0000		;	* 制御ｺｰﾄﾞ定義 *
0000

0003		C_C	EQU	03H		;
End of text	打ち切り
0008		BS	EQU	08H		;
Back Skip	ｶｰｿﾙ1文字後退
000A		LF	EQU	0AH		;
Line Feed	ｶｰｿﾙ改行
000D		CR	EQU	0DH		;
Carrige Return	ｶｰｿﾙ復帰
0010		C_P	EQU	10H		;
        印字ON/OFF
0013		C_S	EQU	13H		;
        表示一時停止
0018		CAN	EQU	18H		;
Cansel		行取り消し
007F		DEL	EQU	7FH		;
Delete		文字削除
0000

0000		;	* その他I/O関係定義 *
0000

0040		M1BAS	EQU	40H		;
ｼｽﾃﾑRAM基準ﾊﾞﾝｸ番号
0005		DRVMAX	EQU	4+1		;
最大ﾄﾞﾗｲﾌﾞ数(FD×4,RAMﾃﾞｨｽｸ×1)
0000

0000		;	* CP/Mﾒﾓﾘ配置定義 *
0000

003E		MSIZ	EQU	62		;
CP/Mﾒﾓﾘ容量
DC00		CCP	EQU	(MSIZ-7)*1024	;
CCP(Console Command Processor)先頭ｱﾄﾞﾚｽ
E406		BDOS	EQU	CCP+0806H	;
BDOS(Basic Disk Operating System)先頭ｱﾄﾞﾚｽ
F200		BIOS	EQU	CCP+1600H	;
BIOS(Basic Input/Output System)先頭ｱﾄﾞﾚｽ
0000

0000

0000		;	[ ｺｰﾄﾞ領域 ]
0000

0000			ORG	0000H		;

0000

0000 185B	START	JR	START1		;
ﾘｾｯﾄ開始ｱﾄﾞﾚｽへ
0002 C3FE00	JMPMON	JP	MON		;
ﾓﾆﾀ命令入力開始ｱﾄﾞﾚｽへ
0005 C33906	FCALL	JP	FUNC		;
ﾓﾆﾀ機能開始ｱﾄﾞﾚｽ
0008

0008			ORG	0020H		;

0020

0020		;	* 割り込みﾍﾞｸﾀ ﾃｰﾌﾞﾙ *
0020

0020 4808	INTTBL:	DW	IRET		;
/INT1 (未使用)
0022 2A08		DW	I2NT		;
/INT2
0024 4808		DW	IRET		;
ﾀｲﾏ0 (未使用)
0026 0E08		DW	T1INT		;
ﾀｲﾏ1(100ms)
0028 4808		DW	IRET		;
DMA0 (未使用)
002A 4808		DW	IRET		;
DMA1 (未使用)
002C 4808		DW	IRET		;
同期ｼﾘｱﾙ (未使用)
002E 4808		DW	IRET		;
非同期ｼﾘｱﾙ0 (未使用)
0030 4808		DW	IRET		;
非同期ｼﾘｱﾙ1 (未使用)
0032

0032		;	* ﾃﾞﾊﾞｯｸﾞ用全ﾚｼﾞｽﾀ保存 *
0032

0032			ORG	0038H		;
RST7命令分岐先ｱﾄﾞﾚｽ
0038

0038 E3		RST7:	EX	(SP),HL		;
HLﾚｼﾞｽﾀ保存,復帰ｱﾄﾞﾚｽ取得
0039 2B			DEC	HL		;
一時停止ｱﾄﾞﾚｽ取得
003A 2216FF		LD	(REGSV+22),HL	;
一時停止ｱﾄﾞﾚｽ保存
003D E3			EX	(SP),HL		;
再開ｱﾄﾞﾚｽ保存,HLﾚｼﾞｽﾀ復帰
003E ED7314FF		LD	(REGSV+20),SP	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ値保存
0042 3114FF		LD	SP,REGSV+20	;
ｽﾀｯｸ ﾎﾟｲﾝﾀに次保存位置ｱﾄﾞﾚｽ設定
0045 FDE5		PUSH	IY		;
IYﾚｼﾞｽﾀ値保存
0047 DDE5		PUSH	IX		;
IXﾚｼﾞｽﾀ値保存
0049 08			EX	AF,AF'		;
停止時裏A,Fﾚｼﾞｽﾀに変更
004A D9			EXX			;
停止時裏B,C,D,E,H,Lﾚｼﾞｽﾀに変更
004B E5			PUSH	HL		;
停止時裏HLﾚｼﾞｽﾀ値保存
004C D5			PUSH	DE		;
停止時裏DEﾚｼﾞｽﾀ値保存
004D C5			PUSH	BC		;
停止時裏BCﾚｼﾞｽﾀ値保存
004E F5			PUSH	AF		;
停止時裏AFﾚｼﾞｽﾀ値保存
004F 08			EX	AF,AF'		;
停止時表A,Fﾚｼﾞｽﾀに変更
0050 D9			EXX			;
停止時表B,C,D,E,H,Lﾚｼﾞｽﾀに変更
0051 E5			PUSH	HL		;
停止時表HLﾚｼﾞｽﾀ値保存
0052 D5			PUSH	DE		;
停止時表DEﾚｼﾞｽﾀ値保存
0053 C5			PUSH	BC		;
停止時表BCﾚｼﾞｽﾀ値保存
0054 F5			PUSH	AF		;
停止時表AFﾚｼﾞｽﾀ値保存
0055 ED57		LD	A,I		;
Iﾚｼﾞｽﾀ値取得
0057 3218FF		LD	(REGSV+24),A	;
Iﾚｼﾞｽﾀ値保存
005A C3AA01		JP	SETUP		;
命令行入力開始へ
005D

005D		;	* 初期化 *
005D

005D ED3836	START1:	IN0	A,(RFR)		;
ﾘﾌﾚｯｼｭ制御ﾚｼﾞｽﾀ値取得
0060 E603		AND	00000011B	;
ﾘｾｯﾄからの移行(=0)か検査
0062 C43206		CALL	NZ,FDCS3	;
ﾘｾｯﾄ以外でFDC完了まで待機
0065 AF			XOR	A		;
0値取得
0066 D360		OUT	(PPT),A		;
FDCﾏｽﾀ ﾘｾｯﾄ(/MR)有効出力設定
0068		;

0068 ED3834		IN0	A,(ITR)		;
INT/TRAP制御ﾚｼﾞｽﾀ値取得
006B 07			RLCA			;
未定義命令割り込み(TRAP)有無検査
006C 3013		JR	NC,START2	;
未定義命令割り込み無しで分岐
006E		;

006E 116208		LD	DE,UIMSG	;
未定義命令実行警告文字列基準ﾎﾟｲﾝﾀ取得
0071 CD4D07		CALL	MSGOUT		;
未定義命令実行警告表示
0074 ED3834		IN0	A,(ITR)		;
INT/TRAP制御ﾚｼﾞｽﾀ値取得
0077 CD9707		CALL	COA		;
INT/TRAP制御ﾚｼﾞｽﾀ値16進2桁表示
007A CD5B07		CALL	COSP		;
空白表示
007D E1			POP	HL		;
未定義命令実行ｱﾄﾞﾚｽ取得
007E CD9207		CALL	COHL		;
未定義命令実行ｱﾄﾞﾚｽ16進4桁表示
0081		;

0081 3EC1	START2:	LD	A,0C1H		;
(共通1:C000H:ﾊﾞﾝｸ:1000H:共通0)指定値取得
0083 ED393A		OUT0	(BAR),A		;
共通0=ROM,その他ｼｽﾃﾑRAM設定
0086 3E40		LD	A,M1BAS		;
ｼｽﾃﾑRAMﾊﾞﾝｸ番号取得
0088 ED3938		OUT0	(CBR),A		;
共通1領域基準ｱﾄﾞﾚｽ設定
008B ED3939		OUT0	(BBR),A		;
ﾊﾞﾝｸ領域基準ｱﾄﾞﾚｽ設定
008E 3E20		LD	A,INTTBL	;
割り込みﾍﾞｸﾀ ﾃｰﾌﾞﾙ下位ｱﾄﾞﾚｽ取得
0090 ED3933		OUT0	(ILR),A		;
割り込みﾍﾞｸﾀ基準ｱﾄﾞﾚｽ下位初期化
0093 3EC3		LD	A,11000011B	;
ﾘﾌﾚｯｼｭ許可,3ｻｲｸﾙ,80ｻｲｸﾙ間隔指定値取得
0095 ED3936		OUT0	(RFR),A		;
ﾘﾌﾚｯｼｭ開始
0098 AF			XOR	A		;
割り込みﾍﾞｸﾀ ﾃｰﾌﾞﾙ上位ｱﾄﾞﾚｽ取得
0099 ED47		LD	I,A		;
割り込みﾍﾞｸﾀ基準ｱﾄﾞﾚｽ上位初期化
009B ED56		IM	1		;
割り込み種別1設定
009D		;

009D 3100FF		LD	SP,STACK	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化
00A0		;

00A0 217E0B		LD	HL,ASPR		;
I/O初期値ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ取得
00A3 010006		LD	BC,6*256+A0A	;
設定ﾊﾞｲﾄ数,非同期ｼﾘｱﾙ0制御ﾚｼﾞｽﾀA ｱﾄﾞﾚｽ取得
00A6 ED93		OTIMR			;
非同期ｼﾘｱﾙ0,1初期化
00A8 010C05		LD	BC,5*256+T0DL	;
設定ﾊﾞｲﾄ数,ﾀｲﾏ0ﾃﾞｰﾀ下位ﾚｼﾞｽﾀ ｱﾄﾞﾚｽ取得
00AB ED93		OTIMR			;
ﾀｲﾏ0初期化
00AD 011404		LD	BC,4*256+T1DL	;
設定ﾊﾞｲﾄ数,ﾀｲﾏ1ﾃﾞｰﾀ下位ﾚｼﾞｽﾀ ｱﾄﾞﾚｽ取得
00B0 ED93		OTIMR			;
ﾀｲﾏ1初期化
00B2 012B02		LD	BC,2*256+D1IL	;
設定ﾊﾞｲﾄ数,DMA1転送I/Oｱﾄﾞﾚｽ下位ﾚｼﾞｽﾀ ｱﾄﾞﾚｽ取得
00B5 ED93		OTIMR			;
DMA1初期化(I/Oｱﾄﾞﾚｽ)
00B7 012E05		LD	BC,5*256+D1CL	;
DMA1 転送ﾊﾞｲﾄ数下位ﾚｼﾞｽﾀ
00BA ED93		OTIMR			;
DMA1初期化
00BC		;

00BC 3E8C		LD	A,10001100B	;
ﾎﾟｰﾄ種別制御値取得
00BE D353		OUT	(P1X),A		;
PPIﾎﾟｰﾄA:ﾓｰﾄﾞ0出力,ﾎﾟｰﾄB:ﾓｰﾄﾞ1出力設定
00C0 3E80		LD	A,10000000B	;
ﾎﾟｰﾄA初期値取得
00C2 D350		OUT	(P1A),A		;
PPIﾎﾟｰﾄA出力初期化(ﾓｰﾀON信号のみ有効)
00C4 AF			XOR	A		;
ﾎﾟｰﾄB初期値取得
00C5 D351		OUT	(P1B),A		;
PPIﾎﾟｰﾄB出力初期化
00C7 3E07		LD	A,00000111B	;
ﾎﾟｰﾄCﾋﾞｯﾄ3=H制御値取得
00C9 D353		OUT	(P1X),A		;
/STB=H
00CB 3E01		LD	A,00000001B	;
ﾎﾟｰﾄCﾋﾞｯﾄ0=H制御値取得
00CD D353		OUT	(P1X),A		;
PPIﾎﾟｰﾄB割り込み許可
00CF		;

00CF DB52		IN	A,(P1C)		;
ﾎﾟｰﾄC値取得
00D1 07			RLCA			;
ｸﾛｯｸ周波数(6.144or9.214MHz)検査
00D2 3E01		LD	A,BPS6		;
6.144MHz用19200bps値仮取得
00D4 3002		JR	NC,START3	;
6.144MHzで分岐
00D6		;

00D6 3E20		LD	A,BPS9		;
9.214MHz用19200bps値仮取得
00D8 ED3903	START3:	OUT0	(A1B),A		;
非同期ｼﾘｱﾙ1 19200bps設定
00DB		;

00DB 3E20		LD	A,00100000B	;
拡張出力ﾎﾟｰﾄ初期値取得
00DD D360		OUT	(PPT),A		;
拡張出力ﾎﾟｰﾄ初期化(FDCﾏｽﾀ ﾘｾｯﾄ(/MR) H復帰)
00DF 3277FF		LD	(PPTSV),A	;
拡張出力ﾎﾟｰﾄ値保存(初期化)
00E2		;

00E2 3ED0		LD	A,FINT		;
強制割り込み(打ち切り)命令ｺｰﾄﾞ取得
00E4 321CFF		LD	(FDCFLG),A	;
FDC動作中ﾌﾗｸﾞ設定
00E7 D340		OUT	(F1C),A		;
FDC現動作強制打ち切り、割り込み発生
00E9 CD3206		CALL	FDCS3		;
FDC処理完了待機
00EC 3EC0		LD	A,FCMSK		;
拡張動作,書き込み補償値取得
00EE D343		OUT	(F1D),A		;
動作制御ｺｰﾄﾞ指定
00F0 3EFE		LD	A,FASM		;
種別指定命令ｺｰﾄﾞ取得
00F2 CD1B06		CALL	FDCS		;
FDC拡張動作(その他)設定
00F5 3E92		LD	A,10010010B	;
FDCﾊﾟﾗﾒｰﾀ値取得
00F7 D343		OUT	(F1D),A		;
FDCﾊﾟﾗﾒｰﾀ値指定
00F9 3EFD		LD	A,FASP		;
ﾊﾟﾗﾒｰﾀ指定命令ｺｰﾄﾞ取得
00FB CD1B06		CALL	FDCS		;
8MHz,30msｾｯﾄｱｯﾌﾟ,3msｽﾃｯﾌﾟ設定
00FE

00FE		;	* 再始動初期化 *
00FE

00FE F3		MON:	DI			;
全割り込み禁止
00FF 3100FF		LD	SP,STACK	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化
0102 2100FF		LD	HL,P1		;
変数領域基準ﾎﾟｲﾝﾀ取得
0105 1101FF		LD	DE,P1+1		;
変数領域基準+1ﾎﾟｲﾝﾀ取得
0108 017600		LD	BC,0+(P2-P1)-1	;
変数領域ﾊﾞｲﾄ数-1取得
010B 3600		LD	(HL),0		;
変数領域先頭ﾊﾞｲﾄ初期化
010D EDB0		LDIR			;
変数領域全初期化
010F 3EFF		LD	A,-1		;
真(-1)値取得
0111 321BFF		LD	(PRNRDY),A	;
ﾌﾟﾘﾝﾀ出力可ﾌﾗｸﾞ初期化
0114 321CFF		LD	(FDCFLG),A	;
FDC動作中ﾌﾗｸﾞ初期化
0117 3E04		LD	A,00000100B	;
割り込み制御値取得
0119 ED3934		OUT0	(ITR),A		;
/INT2割り込み許可
011C FB			EI			;
全割り込み許可
011D ED3808		IN0	A,(A0R)		;
非同期ｼﾘｱﾙ0受信ﾃﾞｰﾀ ﾚｼﾞｽﾀ初期化(空化)
0120 ED3808		IN0	A,(A0R)		;
(1段のﾊﾞｯﾌｧ用に+1)
0123 ED3809		IN0	A,(A1R)		;
非同期ｼﾘｱﾙ1受信ﾃﾞｰﾀ ﾚｼﾞｽﾀ初期化(空化)
0126 ED3809		IN0	A,(A1R)		;
(1段のﾊﾞｯﾌｧ用に+1)
0129		;

0129 3ED0	MON1:	LD	A,FINT		;
強制割り込み(打ち切り)命令ｺｰﾄﾞ取得
012B 321CFF		LD	(FDCFLG),A	;
FDC動作中ﾌﾗｸﾞ設定
012E D340		OUT	(F1C),A		;
FDC現動作強制打ち切り、割り込み発生
0130 CD3206		CALL	FDCS3		;
FDC処理完了待機
0133 3EC0		LD	A,FCMSK		;
拡張動作,書き込み補償値取得
0135 D343		OUT	(F1D),A		;
動作制御ｺｰﾄﾞ指定
0137 3EFE		LD	A,FASM		;
種別指定命令ｺｰﾄﾞ取得
0139 CD1B06		CALL	FDCS		;
FDC拡張動作(その他)設定(FDC初期化)
013C DB50		IN	A,(P1A)		;
PPIﾎﾟｰﾄA値取得
013E F620		OR	00100000B	;
倍密度(MFM/FM)ﾋﾞｯﾄ設定
0140 D350		OUT	(P1A),A		;
倍密度(MFM/FM=H)設定
0142 1E00		LD	E,0		;
FD無/有ﾌﾗｸﾞ初期化
0144 010804		LD	BC,4*256+08H	;
ﾄﾞﾗｲﾌﾞ数ｶｳﾝﾀ,選択ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ値初期化
0147 C5		MON2:	PUSH	BC		;
ﾄﾞﾗｲﾌﾞ数ｶｳﾝﾀ,選択ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ値一時保存
0148 D5			PUSH	DE		;
FD無/有ﾌﾗｸﾞ一時保存
0149 DB50		IN	A,(P1A)		;
PPIﾎﾟｰﾄA値取得
014B E6F0		AND	11110000B	;
FDDﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ解除
014D B1			OR	C		;
対応ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ設定
014E D350		OUT	(P1A),A		;
対応ﾄﾞﾗｲﾌﾞのみ選択出力
0150 CDB905		CALL	FDHOME		;
FDDﾍｯﾄﾞ原点位置移動
0153 3ED0		LD	A,FINT		;
強制割り込み(打ち切り)命令ｺｰﾄﾞ取得
0155 321CFF		LD	(FDCFLG),A	;
FDC動作中ﾌﾗｸﾞ設定
0158 D340		OUT	(F1C),A		;
FDCﾍｯﾄﾞ原点位置移動動作中止(割り込み発生)
015A CD3206		CALL	FDCS3		;
FDC処理完了待機(FDC状態ｺｰﾄﾞ取得)
015D 07			RLCA			;
対応ﾄﾞﾗｲﾌﾞ準備可か検査
015E DB50		IN	A,(P1A)		;
PPIﾎﾟｰﾄA値取得
0160 3815		JR	C,MON3		;
対応ﾄﾞﾗｲﾌﾞ準備不可(無し)で分岐
0162		;

0162 3E04		LD	A,4		;
最大ﾄﾞﾗｲﾌﾞ数値取得
0164 90			SUB	B		;
0基準試行数取得
0165 87			ADD	A,A		;
(×2)4ﾊﾞｲﾄ単位ｵﾌｾｯﾄ取得(×4)
0166 87			ADD	A,A		;
(×4)
0167 5F			LD	E,A		;
ｵﾌｾｯﾄ下位設定
0168 1600		LD	D,0		;
ｵﾌｾｯﾄ上位0設定
016A 21940B		LD	HL,DSKTBL	;
FDD割り当てﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ取得
016D 19			ADD	HL,DE		;
対応FDD割り当てﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ取得
016E 1173FF		LD	DE,DRVTBL	;
ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ変換ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ取得
0171 010400		LD	BC,4		;
転送ﾊﾞｲﾄ数設定
0174 EDB0		LDIR			;
FDD割り当て(ﾋﾞｯﾄ変換)ﾃｰﾌﾞﾙ設定
0176 AF			XOR	A		;
FD挿入無し値取得
0177 D1		MON3:	POP	DE		;
FD無/有ﾌﾗｸﾞ復帰
0178 C1			POP	BC		;
ﾄﾞﾗｲﾌﾞ数ｶｳﾝﾀ,選択ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ値復帰
0179 B3			OR	E		;
FD無/有ﾌﾗｸﾞ更新
017A 5F			LD	E,A		;
FD無/有ﾌﾗｸﾞ更新保存
017B CB39		SRL	C		;
次選択ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ値取得
017D 10C8		DJNZ	MON2		;
ﾄﾞﾗｲﾌﾞ数分継続へ
017F		;

017F DB50		IN	A,(P1A)		;
PPIﾎﾟｰﾄA値取得
0181 E6F0		AND	11110000B	;
全ﾄﾞﾗｲﾌﾞ選択ﾋﾞｯﾄ解除
0183 D350		OUT	(P1A),A		;
全ﾄﾞﾗｲﾌﾞ非選択出力設定
0185 7B			LD	A,E		;
FD無/有ﾌﾗｸﾞ値取得
0186 E60F		AND	00001111B	;
FD無/有ﾌﾗｸﾞ値以外解除
0188 FE0F		CP	00001111B	;
FD挿入有無検査
018A C2EB02		JP	NZ,BOOT		;
FD挿入有りでCP/Mﾌﾞｰﾄへ分岐
018D		;

018D 21A00B		LD	HL,DSKTBL+4*3	;
既定FDD割り当てﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ取得
0190 1173FF		LD	DE,DRVTBL	;
ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ変換ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ取得
0193 010400		LD	BC,4		;
転送ﾊﾞｲﾄ数設定
0196 EDB0		LDIR			;
FDD割り当て(ﾋﾞｯﾄ変換)ﾃｰﾌﾞﾙ既定設定
0198 CDB207		CALL	CIST		;
ｺﾝｿｰﾙ入力状態取得
019B CA2901		JP	Z,MON1		;
FD挿入orｷｰ入力まで継続待機へ
019E		;

019E ED3809		IN0	A,(A1R)		;
非同期ｼﾘｱﾙ1(ｺﾝｿｰﾙ)受信ﾃﾞｰﾀ ﾚｼﾞｽﾀ初期化(空化)
01A1 ED3809		IN0	A,(A1R)		;
(1段のﾊﾞｯﾌｧ用に+1)
01A4		;

01A4 114A08		LD	DE,SMMSG	;
ﾓﾆﾀ開始文字列ﾎﾟｲﾝﾀ取得
01A7 CD4D07		CALL	MSGOUT		;
ﾓﾆﾀ開始表示
01AA

01AA		;	* 命令入力と実行 *
01AA

01AA 3100FF	SETUP:	LD	SP,STACK	;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期化
01AD CDF706		CALL	CRLF		;
ｺﾝｿｰﾙ ｶｰｿﾙ復帰改行
01B0 0E3E		LD	C,'>'		;
指示子文字ｺｰﾄﾞ取得
01B2 CD5D07		CALL	COCHR		;
指示子表示
01B5 CD5B06	COMIN:	CALL	LININ		;
命令行取得(入力)
01B8 7E			LD	A,(HL)		;
命令先頭文字取得
01B9

01B9		;	* ﾀﾞﾝﾌﾟ(Dump)命令 *
01B9

01B9 FE44	NXT0:	CP	'D'		;
ﾀﾞﾝﾌﾟ命令か検査
01BB 203D		JR	NZ,NXT1		;
ﾀﾞﾝﾌﾟ命令以外で次検査へ
01BD		;

01BD CDC706	DUMP:	CALL	PRIN2		;
命令行から2値取得
01C0 7D			LD	A,L		;
第1値下位ﾊﾞｲﾄ取得
01C1 E6F0		AND	11110000B	;
直前の16ﾊﾞｲﾄ境界値取得
01C3 6F			LD	L,A		;
第1値下位を直前の16ﾊﾞｲﾄ境界値に変更
01C4 E5		DUMP1:	PUSH	HL		;
(開始)ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ一時保存
01C5 CD5807		CALL	COHLS		;
対応ｱﾄﾞﾚｽ16進4桁+空白表示
01C8 0610		LD	B,16		;
ﾊﾞｲﾄ数ｶｳﾝﾀ初期化
01CA CD5B07	DUMP2	CALL	COSP		;
空白表示
01CD 7E			LD	A,(HL)		;
対応ﾊﾞｲﾄ値取得
01CE CD9707		CALL	COA		;
対応ﾊﾞｲﾄ16進2桁表示
01D1 23			INC	HL		;
ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ進行(+1)
01D2 10F6		DJNZ	DUMP2		;
16ﾊﾞｲﾄ分継続へ
01D4		;

01D4 CD5B07		CALL	COSP		;
空白表示
01D7 CD5B07		CALL	COSP		;
空白表示
01DA E1			POP	HL		;
ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ復帰
01DB 0610		LD	B,16		;
ﾊﾞｲﾄ数ｶｳﾝﾀ初期化
01DD 7E		DUMP3:	LD	A,(HL)		;
対応ﾊﾞｲﾄ値取得
01DE 0E2E		LD	C,'.'		;
制御ｺｰﾄﾞ用置換文字ｺｰﾄﾞ仮取得
01E0 FE20		CP	' '		;
制御ｺｰﾄﾞか検査
01E2 3805		JR	C,DUMP4		;
制御ｺｰﾄﾞで分岐
01E4		;

01E4 FE7F		CP	DEL		;
DELor上側ｺｰﾄﾞか検査
01E6 3001		JR	NC,DUMP4	;
DELor上側ｺｰﾄﾞで分岐
01E8		;

01E8 4F			LD	C,A		;
対応ﾊﾞｲﾄを文字ｺｰﾄﾞとして指定
01E9 CD5D07	DUMP4:	CALL	COCHR		;
対応文字表示
01EC 23			INC	HL		;
ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ進行(+1)
01ED 10EE		DJNZ	DUMP3		;
16ﾊﾞｲﾄ分継続へ
01EF		;

01EF CDF706		CALL	CRLF		;
ｺﾝｿｰﾙ ｶｰｿﾙ復帰改行
01F2 CDF307		CALL	ENDCHK		;
終了ｱﾄﾞﾚｽ検査
01F5 30CD		JR	NC,DUMP1	;
終了ｱﾄﾞﾚｽ(第2値)まで継続へ
01F7		;

01F7 C3AA01		JP	SETUP		;
命令行入力開始へ
01FA

01FA		;	* ﾒﾓﾘ塗り潰し(Fill)命令 *
01FA

01FA FE46	NXT1:	CP	'F'		;
ﾒﾓﾘ塗り潰し命令か検査
01FC 2017		JR	NZ,NXT2		;
ﾒﾓﾘ塗り潰し命令以外で次検査へ
01FE		;

01FE CDC306	WRBLK:	CALL	PRIN3		;
命令行から3値取得
0201 D9			EXX			;
B,C,D,E,H,Lﾚｼﾞｽﾀ交換
0202 2A1AFF		LD	HL,(PRNFLG)	;
印字要求ﾌﾗｸﾞ,ﾌﾟﾘﾝﾀ出力可ﾌﾗｸﾞ値取得(一時保存)
0205 D9			EXX			;
B,C,D,E,H,Lﾚｼﾞｽﾀ交換
0206 71		WRBLK1:	LD	(HL),C		;
対応ﾒﾓﾘ ﾊﾞｲﾄを第3値に設定
0207 23			INC	HL		;
ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ(第1値)進行(+1)
0208 CDF307		CALL	ENDCHK		;
終了ｱﾄﾞﾚｽ検査
020B 30F9		JR	NC,WRBLK1	;
終了ｱﾄﾞﾚｽ(第2値)まで継続へ
020D		;

020D D9			EXX			;
B,C,D,E,H,Lﾚｼﾞｽﾀ交換
020E 221AFF		LD	(PRNFLG),HL	;
印字要求ﾌﾗｸﾞ,ﾌﾟﾘﾝﾀ出力可ﾌﾗｸﾞ値設定(復帰)
0211 D9			EXX			;
B,C,D,E,H,Lﾚｼﾞｽﾀ交換
0212 C3AA01		JP	SETUP		;
命令行入力開始へ
0215

0215		;	* ﾌﾟﾛｸﾞﾗﾑ実行(Go)命令 *
0215

0215 FE47	NXT2:	CP	'G'		;
ﾌﾟﾛｸﾞﾗﾑ実行命令か検査
0217 2008		JR	NZ,NXT3		;
ﾌﾟﾛｸﾞﾗﾑ実行命令以外で次検査へ
0219		;

0219 CDCB06	GO:	CALL	PRIN1		;
命令行から1値取得
021C 113800		LD	DE,RST7		;
RST7分岐先ｱﾄﾞﾚｽ取得
021F D5			PUSH	DE		;
実行ﾌﾟﾛｸﾞﾗﾑ用復帰ｱﾄﾞﾚｽをｽﾀｯｸに設定
0220 E9			JP	(HL)		;
指定ｱﾄﾞﾚｽから実行へ
0221

0221		;	* ﾒﾓﾘ検査(memory check)命令 *
0221

0221 FE4A	NXT3:	CP	'J'		;
ﾒﾓﾘ検査命令か検査
0223 201F		JR	NZ,NXT4		;
ﾒﾓﾘ検査命令以外で次検査へ
0225		;

0225 CDC706	MEMCHK:	CALL	PRIN2		;
命令行から2値取得
0228 7E		MEMCK1:	LD	A,(HL)		;
対応ﾊﾞｲﾄ値取得
0229 47			LD	B,A		;
対応ﾊﾞｲﾄ値一時保存
022A 2F			CPL			;
全ﾋﾞｯﾄ論理反転値取得
022B 77			LD	(HL),A		;
論理反転値ﾒﾓﾘ書き込み
022C AE			XOR	(HL)		;
書き込み値読み戻し検査
022D 280B		JR	Z,MEMCK2	;
一致で分岐
022F		;

022F 08			EX	AF,AF'		;
A,Fﾚｼﾞｽﾀ交換(不一致ﾋﾞｯﾄ値一時保存)
0230 CD5807		CALL	COHLS		;
異常ｱﾄﾞﾚｽ16進4桁+空白表示
0233 08			EX	AF,AF'		;
A,Fﾚｼﾞｽﾀ交換(不一致ﾋﾞｯﾄ値復帰)
0234 CD9707		CALL	COA		;
不一致ﾋﾞｯﾄ値16進2桁表示
0237 CDF706		CALL	CRLF		;
ｺﾝｿｰﾙ ｶｰｿﾙ復帰改行
023A 70		MEMCK2:	LD	(HL),B		;
対応ﾊﾞｲﾄ値元値書き戻し
023B 23			INC	HL		;
ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ進行(+1)
023C CDF307		CALL	ENDCHK		;
終了ｱﾄﾞﾚｽ検査
023F 30E7		JR	NC,MEMCK1	;
終了ｱﾄﾞﾚｽ(第2値)まで継続へ
0241		;

0241 C3AA01		JP	SETUP		;
命令行入力開始へ
0244

0244		;	* ﾒﾓﾘ移動(memory Move)命令 *
0244

0244 FE4D	NXT4:	CP	'M'		;
ﾒﾓﾘ移動命令か検査
0246 2023		JR	NZ,NXT5		;
ﾒﾓﾘ移動命令以外で次検査へ
0248		;

0248 CDC306	MOVBLK:	CALL	PRIN3		;
命令行から3値取得
024B CD5102		CALL	MOVB		;
指定ﾒﾓﾘ領域移動
024E C3AA01		JP	SETUP		;
命令行入力開始へ
0251		;

0251 C5		MOVB:	PUSH	BC		;
転送先先頭ｱﾄﾞﾚｽ(第3値)一時保存
0252 C5			PUSH	BC		;
転送先先頭ｱﾄﾞﾚｽ(第3値)一時保存
0253 EB			EX	DE,HL		;
DE:転送元先頭ｱﾄﾞﾚｽ(第1値),HL:転送元終了ｱﾄﾞﾚｽ(第2値)
0254 ED52		SBC	HL,DE		;
転送ﾊﾞｲﾄ数-1値取得
0256 44			LD	B,H		;
転送ﾊﾞｲﾄ数-1値上位仮指定
0257 4D			LD	C,L		;
転送ﾊﾞｲﾄ数-1値下位仮指定
0258 E1			POP	HL		;
転送先先頭ｱﾄﾞﾚｽ復帰
0259 ED52		SBC	HL,DE		;
転送順検査
025B EB			EX	DE,HL		;
転送元先頭ｱﾄﾞﾚｽをDEへ移動
025C D1			POP	DE		;
転送先先頭ｱﾄﾞﾚｽ復帰
025D 3808		JR	C,MOVB1		;
転送元>転送先で分岐
025F		;

025F 09			ADD	HL,BC		;
転送元最終ｱﾄﾞﾚｽ取得
0260 EB			EX	DE,HL		;
DE:転送元最終ｱﾄﾞﾚｽ,HL:転送先先頭ｱﾄﾞﾚｽ
0261 09			ADD	HL,BC		;
転送先最終ｱﾄﾞﾚｽ取得
0262 EB			EX	DE,HL		;
DE:転送先最終ｱﾄﾞﾚｽ,HL:転送元最終ｱﾄﾞﾚｽ
0263 03			INC	BC		;
転送ﾊﾞｲﾄ数取得
0264 EDB8		LDDR			;
最終(最上位)ｱﾄﾞﾚｽ側から領域ｺﾋﾟｰ
0266 C9			RET			;
呼び出し元へ復帰
0267		;

0267 03		MOVB1:	INC	BC		;
転送ﾊﾞｲﾄ数取得
0268 EDB0		LDIR			;
先頭(最下位)ｱﾄﾞﾚｽ側から領域ｺﾋﾟｰ
026A C9			RET			;
呼び出し元へ復帰
026B

026B		;	* ﾒﾓﾘ変更(memory substitute)命令 *
026B

026B FE53	NXT5:	CP	'S'		;
ﾒﾓﾘ変更命令か検査
026D 206D		JR	NZ,NXT6		;
ﾒﾓﾘ変更命令以外で次検査へ
026F		;

026F CDCB06	MEM:	CALL	PRIN1		;
命令行から1値取得
0272 E5		MEM1:	PUSH	HL		;
ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ一時保存
0273 CD5807		CALL	COHLS		;
対応ｱﾄﾞﾚｽ16進4桁+空白表示
0276 7E			LD	A,(HL)		;
対応ﾊﾞｲﾄ値取得
0277 CD9707		CALL	COA		;
対応ﾊﾞｲﾄ値16進2桁表示
027A CD5B07		CALL	COSP		;
空白表示
027D 0E3A		LD	C,':'		;
分離記号文字ｺｰﾄﾞ取得
027F CD5D07		CALL	COCHR		;
分離記号表示
0282 CD5B06		CALL	LININ		;
変更指示行入力
0285 2B			DEC	HL		;
(SKPSPのため)行文字列ﾎﾟｲﾝﾀ補正(-1)
0286 CD3B07		CALL	SKPSP		;
有効文字先頭ﾎﾟｲﾝﾀ取得
0289 EB			EX	DE,HL		;
行有効文字先頭ﾎﾟｲﾝﾀをDEへ移動
028A E1			POP	HL		;
ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ復帰
028B 1A			LD	A,(DE)		;
指示行対応文字ﾊﾞｲﾄ取得
028C FE0D		CP	CR		;
指示行終了検査
028E 2008		JR	NZ,MEM3		;
終了以外で分岐
0290		;

0290 23			INC	HL		;
ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ進行(+1:次開始位置)
0291 183E		JR	MEM7		;
後処理継続へ
0293		;

0293 EB		MEM2:	EX	DE,HL		;
DE:ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ,HL:指示行ﾎﾟｲﾝﾀ
0294 CD3B07		CALL	SKPSP		;
次指示行有効文字先頭ﾎﾟｲﾝﾀ取得
0297 EB			EX	DE,HL		;
HL:ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ,DE:次指示行有効文字先頭ﾎﾟｲﾝﾀ
0298		;

0298 1A		MEM3:	LD	A,(DE)		;
指示行対応文字ﾊﾞｲﾄ取得
0299 FE5E		CP	'^'		;
ｱﾄﾞﾚｽ後退か検査
029B 2003		JR	NZ,MEM4		;
ｱﾄﾞﾚｽ後退以外で分岐
029D		;

029D 2B			DEC	HL		;
ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ後退(-1)
029E 18F3		JR	MEM2		;
指示行解析実行継続へ
02A0		;

02A0 FE27	MEM4:	CP	'~''		;
以降ASCII文字指定か検査
02A2 2822		JR	Z,MEM5		;
以降ASCII文字指定で分岐
02A4		;

02A4 FE0D		CP	CR		;
指示行終了検査
02A6 2829		JR	Z,MEM7		;
指示行終了で後処理継続へ
02A8		;

02A8 CDFF07		CALL	CVBIN		;
上位ﾆﾌﾞﾙ対応文字ﾊﾞｲﾅﾘ値に変換
02AB 3829		JR	C,MEM8		;
無効文字で分岐
02AD		;

02AD 07			RLCA			;
(×2)下位ﾆﾌﾞﾙ(ﾋﾞｯﾄ3～0)を上位ﾆﾌﾞﾙ(ﾋﾞｯﾄ7～4)へ移動(×16)
02AE 07			RLCA			;
(×4)
02AF 07			RLCA			;
(×8)
02B0 07			RLCA			;
(×16)
02B1 47			LD	B,A		;
上位ﾆﾌﾞﾙ一時保存
02B2 EB			EX	DE,HL		;
DE:ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ,HL:指示行ﾎﾟｲﾝﾀ
02B3 CD3B07		CALL	SKPSP		;
次指示行有効文字先頭ﾎﾟｲﾝﾀ取得
02B6 EB			EX	DE,HL		;
HL:ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ,DE:次指示行有効文字先頭ﾎﾟｲﾝﾀ
02B7 1A			LD	A,(DE)		;
指示行対応下位ﾆﾌﾞﾙ文字ﾊﾞｲﾄ取得
02B8 FE0D		CP	CR		;
指示行終了検査
02BA 2815		JR	Z,MEM7		;
指示行終了で後処理継続へ
02BC		;

02BC CDFF07		CALL	CVBIN		;
下位ﾆﾌﾞﾙ対応文字ﾊﾞｲﾅﾘ値に変換
02BF 3815		JR	C,MEM8		;
無効文字で分岐
02C1		;

02C1 B0			OR	B		;
1ﾊﾞｲﾄ分(上位ﾆﾌﾞﾙ+下位ﾆﾌﾞﾙ)値取得
02C2 77			LD	(HL),A		;
対応ﾊﾞｲﾄ値更新
02C3 23			INC	HL		;
ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ進行(+1)
02C4 18CD		JR	MEM2		;
指示行解析実行継続へ
02C6		;

02C6 13		MEM5:	INC	DE		;
指示行ASCII文字列先頭ﾎﾟｲﾝﾀ取得
02C7 1A		MEM6:	LD	A,(DE)		;
対応ASCII文字ﾊﾞｲﾄ取得
02C8 FE0D		CP	CR		;
指示行終了検査
02CA 2805		JR	Z,MEM7		;
指示行終了で後処理継続へ
02CC		;

02CC 77			LD	(HL),A		;
対応ﾊﾞｲﾄ値ASCII文字ｺｰﾄﾞに更新
02CD 13			INC	DE		;
指示行ASCII文字列ﾎﾟｲﾝﾀ進行(+1)
02CE 23			INC	HL		;
ｱﾄﾞﾚｽ ﾎﾟｲﾝﾀ進行(+1)
02CF 18F6		JR	MEM6		;
指示行終了まで継続へ
02D1		;

02D1 CDF706	MEM7:	CALL	CRLF		;
ｺﾝｿｰﾙ ｶｰｿﾙ復帰改行
02D4 189C		JR	MEM1		;
新規指示行入力継続へ
02D6		;

02D6 CDF706	MEM8:	CALL	CRLF		;
ｺﾝｿｰﾙ ｶｰｿﾙ復帰改行
02D9 C3AA01		JP	SETUP		;
命令行入力開始へ
02DC

02DC		;	* CP/Mﾌﾞｰﾄ(Boot)命令 *
02DC

02DC FE42	NXT6:	CP	'B'		;
CP/Mﾌﾞｰﾄ命令か検査
02DE 202B		JR	NZ,NXT7		;
CP/Mﾌﾞｰﾄ命令以外で次検査へ
02E0		;

02E0 CD3B07		CALL	SKPSP		;
次指示行有効文字先頭ﾎﾟｲﾝﾀ取得
02E3 FE0D		CP	CR		;
行終了子検査
02E5 C28506		JP	NZ,CERR		;
終了子以外で誤り警告表示後再入力開始へ
02E8		;

02E8 C32901		JP	MON1		;
FD挿入待機後ﾌﾞｰﾄ(BOOT)処理へ
02EB

02EB		;	( 実ﾌﾞｰﾄ処理 )
02EB

02EB 3E13	BOOT:	LD	A,18+1		;
18ms遅延値取得
02ED D343		OUT	(F1D),A		;
FDC18ms遅延指定
02EF 3EFC		LD	A,FDLY		;
FDC遅延命令ｺｰﾄﾞ取得
02F1 CD1B06		CALL	FDCS		;
FDC18ms間待機(ﾋﾞｼﾞｰ)
02F4 3EC8		LD	A,0C8H		;
(共通1:C000H:ﾊﾞﾝｸ:8000H:共通0)指定値取得
02F6 ED393A		OUT0	(BAR),A		;
共通0領域1000H→8000Hまでに拡大設定
02F9 210010		LD	HL,CPMTOP	;
CP/M(ROM)領域先頭ｱﾄﾞﾚｽ取得
02FC 1100DC		LD	DE,CCP		;
CP/M(RAM)領域先頭ｱﾄﾞﾚｽ取得
02FF 010020		LD	BC,1024*8	;
転送ﾊﾞｲﾄ数取得
0302 EDB0		LDIR			;
CP/M(CCP,BDOS,BIOS)をRAMへｺﾋﾟｰ
0304 2173FF		LD	HL,DRVTBL	;
ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ変換ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ取得(独自機能用)
0307 F3			DI			;
全割り込み禁止
0308 C300F2		JP	BIOS		;
CP/Mｺｰﾙﾄﾞ ﾌﾞｰﾄ開始へ
030B

030B		;	* ﾚｼﾞｽﾀ表示(register display)命令 *
030B

030B FE58	NXT7:	CP	'X'		;
ﾚｼﾞｽﾀ表示命令か検査
030D 202B		JR	NZ,NXT8		;
ﾚｼﾞｽﾀ表示命令以外で次検査へ
030F		;

030F CD3B07	DSPREG:	CALL	SKPSP		;
次指示行有効文字先頭ﾎﾟｲﾝﾀ取得
0312 FE0D		CP	CR		;
行終了子検査
0314 C28506		JP	NZ,CERR		;
終了子以外で誤り警告表示後再入力開始へ
0317		;

0317 CDF706		CALL	CRLF		;
ｺﾝｿｰﾙ ｶｰｿﾙ復帰改行
031A 11260B		LD	DE,RGMSG	;
ﾚｼﾞｽﾀ名文字列ﾎﾟｲﾝﾀ取得
031D CD4D07		CALL	MSGOUT		;
ﾚｼﾞｽﾀ名文字列表示
0320 1100FF		LD	DE,REGSV	;
ﾚｼﾞｽﾀ値保存域基準ﾎﾟｲﾝﾀ取得
0323 060C		LD	B,12		;
ﾚｼﾞｽﾀ ﾍﾟｱ数ｶｳﾝﾀ初期化
0325 1A		DSPRG1:	LD	A,(DE)		;
対応ﾚｼﾞｽﾀ ﾍﾟｱ下位ﾊﾞｲﾄ値取得
0326 6F			LD	L,A		;
対応ﾚｼﾞｽﾀ ﾍﾟｱ下位ﾊﾞｲﾄ値指定
0327 13			INC	DE		;
ﾚｼﾞｽﾀ値保存域ﾎﾟｲﾝﾀ進行(+1)
0328 1A			LD	A,(DE)		;
対応ﾚｼﾞｽﾀ ﾍﾟｱ上位ﾊﾞｲﾄ値取得
0329 67			LD	H,A		;
対応ﾚｼﾞｽﾀ ﾍﾟｱ上位ﾊﾞｲﾄ値指定
032A 13			INC	DE		;
ﾚｼﾞｽﾀ値保存域ﾎﾟｲﾝﾀ進行(+1)
032B CD5807		CALL	COHLS		;
対応ﾚｼﾞｽﾀ ﾍﾟｱ16進4桁+空白表示
032E 10F5		DJNZ	DSPRG1		;
12ﾚｼﾞｽﾀ ﾍﾟｱ分継続へ
0330		;

0330 1A			LD	A,(DE)		;
Iﾚｼﾞｽﾀ値取得
0331 CD9707		CALL	COA		;
Iﾚｼﾞｽﾀ値16進2桁表示
0334 CDF706		CALL	CRLF		;
ｺﾝｿｰﾙ ｶｰｿﾙ復帰改行
0337 C3AA01		JP	SETUP		;
命令行入力開始へ
033A

033A		;	* ﾃﾞｨｽｸ仕様設定(disk Parameter)命令 *
033A

033A FE50	NXT8:	CP	'P'		;
ﾃﾞｨｽｸ仕様設定命令か検査
033C C2C103		JP	NZ,NXT9		;
ﾃﾞｨｽｸ仕様設定命令以外で次検査へ
033F		;

033F CD4207	SETDPR:	CALL	TRMCHK		;
次分離子,終了子位置までﾎﾟｲﾝﾀ移動
0342 DA8506		JP	C,CERR		;
終了子で誤り警告表示後再入力開始へ
0345		;

0345 2B			DEC	HL		;
命令行ﾎﾟｲﾝﾀ後退(-1)
0346 7E			LD	A,(HL)		;
ﾄﾞﾗｲﾌﾞ文字取得
0347 D641		SUB	'A'		;
0基準ﾄﾞﾗｲﾌﾞ番号取得
0349 FE04		CP	DRVMAX-1	;
FDﾄﾞﾗｲﾌﾞ範囲検査
034B D28506		JP	NC,CERR		;
無効ﾄﾞﾗｲﾌﾞ番号で誤り警告表示後再入力開始へ
034E		;

034E CD8503		CALL	SETDRV		;
指定ﾄﾞﾗｲﾌﾞ選択
0351 23			INC	HL		;
命令行ﾎﾟｲﾝﾀ進行(+1)
0352 CD4207		CALL	TRMCHK		;
次分離子,終了子位置までﾎﾟｲﾝﾀ移動
0355 2B			DEC	HL		;
命令行ﾎﾟｲﾝﾀ後退(-1)
0356 7E			LD	A,(HL)		;
記録密度文字取得
0357 FE44		CP	'D'		;
倍密度か検査
0359 0620		LD	B,00100000B	;
倍密度ﾋﾞｯﾄ値取得
035B 2807		JR	Z,STDPR1	;
倍密度で分岐
035D		;

035D FE53		CP	'S'		;
単密度か検査
035F 0600		LD	B,00000000B	;
単密度ﾋﾞｯﾄ値取得
0361 C28506		JP	NZ,CERR		;
単密度以外で誤り警告表示後再入力開始へ
0364		;

0364 CD9003	STDPR1:	CALL	SETDEN		;
記録密度設定
0367 23			INC	HL		;
命令行ﾎﾟｲﾝﾀ進行(+1)
0368 CD4207		CALL	TRMCHK		;
次分離子,終了子位置までﾎﾟｲﾝﾀ移動
036B D28506		JP	NC,CERR		;
終了子以外で誤り警告表示後再入力開始へ
036E		;

036E 2B			DEC	HL		;
命令行ﾎﾟｲﾝﾀ後退(-1)
036F 7E			LD	A,(HL)		;
面番号文字取得
0370 D630		SUB	'0'		;
0基準面番号取得
0372 FE02		CP	1+1		;
面番号範囲検査
0374 D28506		JP	NC,CERR		;
範囲外で誤り警告表示後再入力開始へ
0377		;

0377 07			RLCA			;
(×2)ﾋﾞｯﾄ0をﾋﾞｯﾄ4位置へ移動(×16)
0378 07			RLCA			;
(×4)
0379 07			RLCA			;
(×8)
037A 07			RLCA			;
(×16)
037B 47			LD	B,A		;
面(1/0)ﾋﾞｯﾄ値指定
037C CDAB03		CALL	SETSID		;
面(1/0)設定
037F CDF706		CALL	CRLF		;
ｺﾝｿｰﾙ ｶｰｿﾙ復帰改行
0382 C3AA01		JP	SETUP		;
命令行入力開始へ
0385

0385		;	( 指定ﾄﾞﾗｲﾌﾞ選択 )
0385

0385 CDB303	SETDRV:	CALL	DRVCNV		;
物理ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ値取得
0388 DB50		IN	A,(P1A)		;
PPIﾎﾟｰﾄA値取得
038A E6F0		AND	11110000B	;
ﾄﾞﾗｲﾌﾞ選択ﾋﾞｯﾄ解除
038C B0			OR	B		;
指定ﾄﾞﾗｲﾌﾞ選択ﾋﾞｯﾄ設定
038D D350		OUT	(P1A),A		;
指定ﾄﾞﾗｲﾌﾞ選択出力設定
038F C9			RET			;
呼び出し元へ復帰
0390

0390		;	( 記録密度設定 )
0390

0390 CD3206	SETDEN:	CALL	FDCS3		;
FDC処理完了待機
0393 DB50		IN	A,(P1A)		;
PPIﾎﾟｰﾄA値取得
0395 E6DF		AND	11011111B	;
記録密度(MFM/FM)ﾋﾞｯﾄ解除
0397 B0			OR	B		;
指定記録密度ﾋﾞｯﾄ設定
0398 D350		OUT	(P1A),A		;
指定記録密度(MFM/FM)出力設定
039A 0F			RRCA			;
(÷2)記録密度(MFM/FM)ﾋﾞｯﾄをﾋﾞｯﾄ3位置へ移動(÷4)
039B 0F			RRCA			;
(÷4)
039C 2F			CPL			;
論理反転
039D E608		AND	00001000B	;
FDC用記録密度(FM/MFM)ﾋﾞｯﾄ以外解除
039F F6C0		OR	FCMSK		;
拡張動作,書き込み補償ﾋﾞｯﾄ追加
03A1 D343		OUT	(F1D),A		;
FDC指定値設定
03A3 3EFE		LD	A,FASM		;
種別指定命令ｺｰﾄﾞ取得
03A5 321CFF		LD	(FDCFLG),A	;
FDC動作中ﾌﾗｸﾞ設定
03A8 D340		OUT	(F1C),A		;
FDC記録密度設定
03AA C9			RET			;
呼び出し元へ復帰
03AB

03AB		;	( 面(1/0)設定 )
03AB

03AB DB50	SETSID:	IN	A,(P1A)		;
PPIﾎﾟｰﾄA値取得
03AD E6EF		AND	11101111B	;
面(1/0)ﾋﾞｯﾄ解除
03AF B0			OR	B		;
指定面ﾋﾞｯﾄ設定
03B0 D350		OUT	(P1A),A		;
指定面(1/0)ﾋﾞｯﾄ出力設定
03B2 C9			RET			;
呼び出し元へ復帰
03B3

03B3		;	(( 物理ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ値取得 ))
03B3

03B3 D5		DRVCNV:	PUSH	DE		;
DEﾚｼﾞｽﾀ値一時保存(現状DE未使用/無意味)
03B4 E5			PUSH	HL		;
HLﾚｼﾞｽﾀ値一時保存(命令行ﾎﾟｲﾝﾀ)
03B5 5F			LD	E,A		;
ﾄﾞﾗｲﾌﾞ番号ｵﾌｾｯﾄ指定
03B6 1600		LD	D,0		;
上位0設定
03B8 2173FF		LD	HL,DRVTBL	;
ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ変換ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ取得
03BB 19			ADD	HL,DE		;
対応ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ変換ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ取得
03BC 7E			LD	A,(HL)		;
対応ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ値取得
03BD 47			LD	B,A		;
対応ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ値ｺﾋﾟｰ
03BE E1			POP	HL		;
DEﾚｼﾞｽﾀ値復帰(命令行ﾎﾟｲﾝﾀ)
03BF D1			POP	DE		;
DEﾚｼﾞｽﾀ値復帰(現状DE未使用/無意味)
03C0 C9			RET			;
呼び出し元へ復帰
03C1

03C1		;	* ﾃﾞｨｽｸ読み込み(disk Read)命令 *
03C1

03C1 FE52	NXT9:	CP	'R'		;
ﾃﾞｨｽｸ読み込み命令か検査
03C3 2019		JR	NZ,NXT10	;
ﾃﾞｨｽｸ読み込み命令以外で次検査へ
03C5		;

03C5 CDBF06	DREAD:	CALL	PRIN4		;
命令行から4値取得
03C8 B7			OR	A		;
ｾｸﾀ数0指定検査
03C9 321DFF		LD	(SECCNT),A	;
連続読み込みｾｸﾀ数保存
03CC CA8506		JP	Z,CERR		;
0で誤り警告表示後再入力開始へ
03CF		;

03CF CDB905		CALL	FDHOME		;
FDDﾍｯﾄﾞ原点位置移動
03D2 C24105		JP	NZ,FERR		;
失敗でFD操作異常表示後命令行入力開始へ
03D5		;

03D5 CD7C05		CALL	RDDSK		;
ｾｸﾀ読み込み処理
03D8 C24105		JP	NZ,FERR		;
失敗でFD操作異常表示後命令行入力開始へ
03DB		;

03DB C3AA01		JP	SETUP		;
命令行入力開始へ
03DE

03DE		;	* ﾃﾞｨｽｸ書き込み(disk Write)命令 *
03DE

03DE FE57	NXT10:	CP	'W'		;
ﾃﾞｨｽｸ書き込み命令か検査
03E0 2019		JR	NZ,NXT11	;
ﾃﾞｨｽｸ書き込み命令以外で次検査へ
03E2		;

03E2 CDBF06	DWRITE:	CALL	PRIN4		;
命令行から4値取得
03E5 B7			OR	A		;
ｾｸﾀ数0指定検査
03E6 321DFF		LD	(SECCNT),A	;
連続書き込みｾｸﾀ数保存
03E9 CA8506		JP	Z,CERR		;
0で誤り警告表示後再入力開始へ
03EC		;

03EC CDB905		CALL	FDHOME		;
FDDﾍｯﾄﾞ原点位置移動
03EF C24105		JP	NZ,FERR		;
失敗でFD操作異常表示後命令行入力開始へ
03F2		;

03F2 CD8905		CALL	WRDSK		;
ｾｸﾀ書き込み処理
03F5 C24105		JP	NZ,FERR		;
失敗でFD操作異常表示後命令行入力開始へ
03F8		;

03F8 C3AA01		JP	SETUP		;
命令行入力開始へ
03FB

03FB		;	* ﾊﾞﾝｸ変更(bank Location)命令 *
03FB

03FB FE4C	NXT11:	CP	'L'		;
ﾊﾞﾝｸ変更命令か検査
03FD 2009		JR	NZ,NXT12	;
ﾊﾞﾝｸ変更命令以外で次検査へ
03FF		;

03FF CDCB06	LOC:	CALL	PRIN1		;
命令行から1値取得
0402 ED2939		OUT0	(BBR),L		;
ﾊﾞﾝｸ番号更新設定
0405 C3AA01		JP	SETUP		;
命令行入力開始へ
0408

0408		;	* ﾃﾞｨｽｸ ﾌｫｰﾏｯﾄ(disk Initialize)命令 *
0408

0408 FE49	NXT12:	CP	'I'		;
ﾃﾞｨｽｸ ﾌｫｰﾏｯﾄ命令か検査
040A C23305		JP	NZ,NXT13	;
ﾃﾞｨｽｸ ﾌｫｰﾏｯﾄ命令以外で次検査へ
040D		;

040D CDC706	FMT:	CALL	PRIN2		;
命令行から2値取得
0410 7C			LD	A,H		;
10(0AH)基準ﾄﾞﾗｲﾌﾞ番号上位ﾊﾞｲﾄ取得
0411 B7			OR	A		;
0検査
0412 C28506		JP	NZ,CERR		;
0以外で誤り警告表示後再入力開始へ
0415		;

0415 7D			LD	A,L		;
10(0AH)ﾄﾞﾗｲﾌﾞ番号下位ﾊﾞｲﾄ取得
0416 D60A		SUB	0AH		;
0基準ﾄﾞﾗｲﾌﾞ番号取得
0418 FE04		CP	DRVMAX-1	;
FDﾄﾞﾗｲﾌﾞ番号範囲検査
041A D28506		JP	NC,CERR		;
範囲外で誤り警告表示後再入力開始へ
041D		;

041D CD8503		CALL	SETDRV		;
指定ﾄﾞﾗｲﾌﾞ選択
0420 212801		LD	HL,0128H	;
'128'指定対応値取得
0423 AF			XOR	A		;
対応物理ﾚｺｰﾄﾞ長(PRL)値仮取得,ｷｬﾘｰ ﾌﾗｸﾞ解除
0424 ED52		SBC	HL,DE		;
128ﾊﾞｲﾄ/ｾｸﾀ指定か検査
0426 2815		JR	Z,FMT1		;
128ﾊﾞｲﾄ/ｾｸﾀ指定で分岐
0428		;

0428 215602		LD	HL,0256H	;
'256'指定対応値取得
042B B7			OR	A		;
ｷｬﾘｰ ﾌﾗｸﾞ解除
042C ED52		SBC	HL,DE		;
256ﾊﾞｲﾄ/ｾｸﾀ指定か検査
042E 3E01		LD	A,1		;
対応物理ﾚｺｰﾄﾞ長(PRL)値仮取得
0430 280B		JR	Z,FMT1		;
256ﾊﾞｲﾄ/ｾｸﾀ指定で分岐
0432		;

0432 212410		LD	HL,1024H	;
'1024'指定対応値取得
0435 B7			OR	A		;
ｷｬﾘｰ ﾌﾗｸﾞ解除
0436 ED52		SBC	HL,DE		;
1024ﾊﾞｲﾄ/ｾｸﾀ指定か検査
0438 3E03		LD	A,3		;
対応物理ﾚｺｰﾄﾞ長(PRL)値仮取得
043A C28506		JP	NZ,CERR		;
1024ﾊﾞｲﾄ/ｾｸﾀ指定以外で誤り警告表示後再入力開始へ
043D

043D		;	( 面0 ﾄﾗｯｸ0 ﾌｫｰﾏｯﾄ )
043D

043D 3272FF	FMT1:	LD	(WORK),A	;
物理ﾚｺｰﾄﾞ長(PRL)値保存
0440 CDB905		CALL	FDHOME		;
FDDﾍｯﾄﾞ原点位置移動
0443 C24105		JP	NZ,FERR		;
失敗でFD操作異常表示後命令行入力開始へ
0446		;

0446 0600		LD	B,00000000B	;
面0ﾋﾞｯﾄ値取得
0448 CDAB03		CALL	SETSID		;
面0設定
044B 0600		LD	B,00000000B	;
単密度(FM)ﾋﾞｯﾄ値取得
044D CD9003		CALL	SETDEN		;
単密度(FM)設定
0450 CD3206		CALL	FDCS3		;
FDC処理完了待機
0453 0E00		LD	C,0		;
面0値取得
0455 CDB304		CALL	FMTP		;
面0ﾄﾗｯｸ ﾊﾟﾗﾒｰﾀ ﾃｰﾌﾞﾙ作成
0458 111A08		LD	DE,081AH	;
128ﾊﾞｲﾄ/ｾｸﾀ値,26ｾｸﾀ/ﾄﾗｯｸ値取得
045B CDD804		CALL	FMTS		;
面0ﾄﾗｯｸ0ﾌｫｰﾏｯﾄ
045E 3A72FF		LD	A,(WORK)	;
物理ﾚｺｰﾄﾞ長(PRL)値取得
0461 B7			OR	A		;
片面単密度(1S:128ﾊﾞｲﾄ/ｾｸﾀ)か検査
0462 2818		JR	Z,FMT2		;
片面単密度で分岐
0464

0464		;	( 面1 ﾄﾗｯｸ0 ﾌｫｰﾏｯﾄ )
0464

0464 0610		LD	B,00010000B	;
面1ﾋﾞｯﾄ値取得
0466 CDAB03		CALL	SETSID		;
面1設定
0469 0620		LD	B,00100000B	;
倍密度(MFM)ﾋﾞｯﾄ値取得
046B CD9003		CALL	SETDEN		;
倍密度(MFM)設定
046E CD3206		CALL	FDCS3		;
FDC処理完了待機
0471 0E01		LD	C,1		;
面1値取得
0473 CDB304		CALL	FMTP		;
面1ﾄﾗｯｸ ﾊﾟﾗﾒｰﾀ ﾃｰﾌﾞﾙ作成
0476 111A09		LD	DE,091AH	;
256ﾊﾞｲﾄ/ｾｸﾀ値,26ｾｸﾀ/ﾄﾗｯｸ値取得
0479 CDD804		CALL	FMTS		;
面1ﾄﾗｯｸ0ﾌｫｰﾏｯﾄ
047C

047C		;	( ﾄﾗｯｸ1～75 ﾌｫｰﾏｯﾄ )
047C

047C DB41	FMT2:	IN	A,(F1T)		;
ﾄﾗｯｸ番号取得
047E FE4C		CP	75+1		;
最終ﾄﾗｯｸ完了検査
0480 D2AA01		JP	NC,SETUP	;
完了で命令行入力開始へ
0483		;

0483 3E31		LD	A,FSTP		;
ﾍｯﾄﾞ1ﾄﾗｯｸ分移動命令ｺｰﾄﾞ取得
0485 CD1B06		CALL	FDCS		;
ﾍｯﾄﾞ1ﾄﾗｯｸ分内周側移動
0488 2650		LD	H,'P'		;
FDCｽﾃｯﾌﾟ動作識別文字取得
048A E6D9		AND	11011001B	;
完了検査
048C C24105		JP	NZ,FERR		;
失敗でFD操作異常表示後命令行入力開始へ
048F

048F		;	(( 面0側ﾄﾗｯｸ ﾌｫｰﾏｯﾄ ))
048F

048F DB50		IN	A,(P1A)		;
PPIﾎﾟｰﾄA値取得
0491 E6EF		AND	11101111B	;
面ﾋﾞｯﾄ解除
0493 D350		OUT	(P1A),A		;
面0出力設定
0495 0E00		LD	C,0		;
面0値取得
0497 CDB304		CALL	FMTP		;
面0ﾄﾗｯｸ ﾊﾟﾗﾒｰﾀ ﾃｰﾌﾞﾙ作成
049A CDD804		CALL	FMTS		;
面0側対象ﾄﾗｯｸ ﾌｫｰﾏｯﾄ
049D 3A72FF		LD	A,(WORK)	;
物理ﾚｺｰﾄﾞ長(PRL)値取得
04A0 B7			OR	A		;
片面単密度か検査
04A1 28D9		JR	Z,FMT2		;
片面単密度で分岐
04A3

04A3		;	(( 面1側ﾄﾗｯｸ ﾌｫｰﾏｯﾄ ))
04A3

04A3 DB50		IN	A,(P1A)		;
PPIﾎﾟｰﾄA値取得
04A5 F610		OR	00010000B	;
面ﾋﾞｯﾄ設定
04A7 D350		OUT	(P1A),A		;
面1出力設定
04A9 0E01		LD	C,1		;
面1値取得
04AB CDB304		CALL	FMTP		;
面1ﾄﾗｯｸ ﾊﾟﾗﾒｰﾀ ﾃｰﾌﾞﾙ作成
04AE CDD804		CALL	FMTS		;
面1側対象ﾄﾗｯｸ ﾌｫｰﾏｯﾄ
04B1 18C9		JR	FMT2		;
ﾄﾗｯｸ75完了まで継続へ
04B3

04B3		;	(( ﾄﾗｯｸ ﾊﾟﾗﾒｰﾀ ﾃｰﾌﾞﾙ作成 ))
04B3		;	入: C:面番号
04B3		;	出: BC:ﾄﾗｯｸ ﾊﾟﾗﾒｰﾀ ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ D:ﾊﾞｲﾄ数/1ｾｸﾀ ｺｰﾄﾞ値 E:ｾｸﾀ数/1ﾄﾗｯｸ
04B3

04B3 2120FF	FMTP:	LD	HL,LINBF	;
ﾄﾗｯｸ ﾊﾟﾗﾒｰﾀ ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ取得
04B6 061A		LD	B,26		;
ｾｸﾀ数ｶｸﾝﾀ初期化(最大数分作成)
04B8 71		FMTP1:	LD	(HL),C		;
対応ﾊﾞｲﾄに面番号設定
04B9 23			INC	HL		;
ﾄﾗｯｸ ﾊﾟﾗﾒｰﾀ ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ進行(+1)
04BA 3E1B		LD	A,26+1		;
最大ｾｸﾀ数+1値取得
04BC 90			SUB	B		;
1基準ｾｸﾀ番号取得
04BD 77			LD	(HL),A		;
対応ﾊﾞｲﾄにｾｸﾀ番号設定
04BE 23			INC	HL		;
ﾄﾗｯｸ ﾊﾟﾗﾒｰﾀ ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ進行(+1)
04BF 10F7		DJNZ	FMTP1		;
ｾｸﾀ数分継続へ
04C1		;

04C1 0120FF		LD	BC,LINBF	;
ﾄﾗｯｸ ﾊﾟﾗﾒｰﾀ ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ取得
04C4 3A72FF		LD	A,(WORK)	;
物理ﾚｺｰﾄﾞ長(PRL)値取得
04C7 FE03		CP	03H		;
1024ﾊﾞｲﾄ/ｾｸﾀか検査
04C9 11080B		LD	DE,0B08H	;
1024ﾊﾞｲﾄ/ｾｸﾀ値,8ｾｸﾀ/ﾄﾗｯｸ値取得
04CC C8			RET	Z		;
1024ﾊﾞｲﾄ/ｾｸﾀで呼び出し元へ復帰
04CD		;

04CD FE01		CP	01H		;
256ﾊﾞｲﾄ/ｾｸﾀか検査
04CF 111A09		LD	DE,091AH	;
256ﾊﾞｲﾄ/ｾｸﾀ値,26ｾｸﾀ/ﾄﾗｯｸ値取得
04D2 C8			RET	Z		;
256ﾊﾞｲﾄ/ｾｸﾀで呼び出し元へ復帰
04D3		;

04D3 B7			OR	A		;
128ﾊﾞｲﾄ/ｾｸﾀか検査
04D4 111A08		LD	DE,081AH	;
128ﾊﾞｲﾄ/ｾｸﾀ値,26ｾｸﾀ/ﾄﾗｯｸ値取得
04D7 C9			RET			;
呼び出し元へ復帰
04D8

04D8		;	(( 1ﾄﾗｯｸ ﾌｫｰﾏｯﾄ ))
04D8		;	入: BC:ﾄﾗｯｸ ﾊﾟﾗﾒｰﾀ ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ D:ﾊﾞｲﾄ数/1ｾｸﾀ ｺｰﾄﾞ値 E:ｾｸﾀ数/1ﾄﾗｯｸ
04D8

04D8 DB50	FMTS:	IN	A,(P1A)		;
PPIﾎﾟｰﾄA値取得
04DA F640		OR	01000000B	;
ﾍｯﾄﾞ ﾛｰﾄﾞ ﾋﾞｯﾄ設定
04DC D350		OUT	(P1A),A		;
ﾍｯﾄﾞ ﾛｰﾄﾞ ﾋﾞｯﾄ有効出力設定
04DE 3E28		LD	A,40		;
4s値取得
04E0 321EFF		LD	(T1M0),A	;
ﾍｯﾄﾞ ﾛｰﾄﾞ持続ﾀｲﾏ起動
04E3 CDF105		CALL	SKDMA1		;
DMA1にﾄﾗｯｸ ﾊﾟﾗﾒｰﾀ ﾃｰﾌﾞﾙ ｱﾄﾞﾚｽ設定
04E6 ED3832		IN0	A,(DWR)		;
DMA/ｳｪｲﾄ制御ﾚｼﾞｽﾀ値取得
04E9 E6FD		AND	11111101B	;
方向(DIM1)ﾋﾞｯﾄ解除
04EB ED3932		OUT0	(DWR),A		;
DMA1ﾒﾓﾘ→I/O方向設定
04EE ED3830		IN0	A,(DXS)		;
DMAｽﾃｰﾀｽ ﾚｼﾞｽﾀ値取得
04F1 E6DF		AND	11011111B	;
/DWE1ﾋﾞｯﾄ解除(DE1更新許可)
04F3 F680		OR	10000000B	;
DE1ﾋﾞｯﾄ設定(DMA1許可)
04F5 ED3930		OUT0	(DXS),A		;
DMA1許可設定
04F8 7B			LD	A,E		;
ｾｸﾀ数/ﾄﾗｯｸ値取得
04F9 D342		OUT	(F1S),A		;
FDCｾｸﾀ数/ﾄﾗｯｸ指定
04FB 7A			LD	A,D		;
ﾊﾞｲﾄ数/ｾｸﾀ値取得
04FC D343		OUT	(F1D),A		;
FDCﾊﾞｲﾄ数/ｾｸﾀ指定
04FE 3EF5		LD	A,FFMT		;
ﾌｫｰﾏｯﾄ命令ｺｰﾄﾞ取得
0500 CD1B06		CALL	FDCS		;
1ﾄﾗｯｸ分ﾌｫｰﾏｯﾄ
0503 2646		LD	H,'F'		;
FDCﾌｫｰﾏｯﾄ動作識別文字取得
0505 B7			OR	A		;
完了検査
0506 C24105		JP	NZ,FERR		;
失敗でFD操作異常表示後命令行入力開始へ
0509		;

0509 DB41		IN	A,(F1T)		;
ﾄﾗｯｸ番号取得
050B CD0706		CALL	SETLCR		;
低電流(LOW-C)設定
050E 3E02		LD	A,1+1		;
最低1ms遅延値取得
0510 D343		OUT	(F1D),A		;
FDC最低1ms指定
0512 3EFC		LD	A,FDLY		;
FDC遅延命令ｺｰﾄﾞ取得
0514 CD1B06		CALL	FDCS		;
最低1ms待機
0517 ED3830		IN0	A,(DXS)		;
DMAｽﾃｰﾀｽ ﾚｼﾞｽﾀ値取得
051A E65F		AND	01011111B	;
DMA1許可(DE1)ﾋﾞｯﾄ解除
051C ED3930		OUT0	(DXS),A		;
DMA1禁止設定
051F 7B			LD	A,E		;
ｾｸﾀ数/ﾄﾗｯｸ値取得
0520 D343		OUT	(F1D),A		;
FDC読み込みｾｸﾀ数指定
0522 3E01		LD	A,1		;
ﾄﾗｯｸ先頭ｾｸﾀ番号取得
0524 D342		OUT	(F1S),A		;
FDC先頭ｾｸﾀ番号指定
0526 3E94		LD	A,FMRD		;
複数ｾｸﾀ読み込み命令ｺｰﾄﾞ値取得
0528 CD1B06		CALL	FDCS		;
読み出し照合検査
052B 2656		LD	H,'V'		;
FDC照合動作識別文字取得
052D E6F9		AND	11111001B	;
成否検査
052F C24105		JP	NZ,FERR		;
失敗でFD操作異常表示後命令行入力開始へ
0532		;

0532 C9			RET			;
呼び出し元へ復帰
0533

0533		;	* ﾍﾙﾌﾟ表示(Help)命令 *
0533

0533 FE0D	NXT13:	CP	CR		;
ﾍﾙﾌﾟ表示命令か検査
0535 C28506		JP	NZ,CERR		;
ﾍﾙﾌﾟ表示命令以外で誤り警告表示後再入力開始へ
0538		;

0538 117608	MSGCL:	LD	DE,HPMSG	;
ﾍﾙﾌﾟ文字列ﾎﾟｲﾝﾀ取得
053B CD4D07		CALL	MSGOUT		;
ﾍﾙﾌﾟ表示
053E C3AA01		JP	SETUP		;
命令行入力開始へ
0541

0541

0541		;	[ ｻﾌﾞﾙｰﾁﾝ ]
0541

0541		;	* FD操作異常表示 *
0541		;	入: A:FDCｽﾃｰﾀｽ値 H:操作識別文字
0541

0541 F5		FERR:	PUSH	AF		;
FDCｽﾃｰﾀｽ値一時保存
0542 116E08		LD	DE,ERMSG	;
異常警告文字列ﾎﾟｲﾝﾀ取得
0545 CD4D07		CALL	MSGOUT		;
異常警告表示
0548 CD5B07		CALL	COSP		;
空白表示
054B 4C			LD	C,H		;
操作識別文字取得
054C CD5D07		CALL	COCHR		;
操作識別文字表示
054F 0E3D		LD	C,'='		;
分離文字取得
0551 CD5D07		CALL	COCHR		;
分離文字表示
0554 F1			POP	AF		;
FDCｽﾃｰﾀｽ値復帰
0555 CD8D07		CALL	COAS		;
FDCｽﾃｰﾀｽ値16進2桁表示
0558 DB50		IN	A,(P1A)		;
PPIﾎﾟｰﾄA値取得
055A CD8D07		CALL	COAS		;
密度,面,ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ値16進2桁表示
055D DB41		IN	A,(F1T)		;
FDCﾄﾗｯｸ値取得
055F CD8D07		CALL	COAS		;
ﾄﾗｯｸ番号16進2桁表示
0562 DB42		IN	A,(F1S)		;
FDCｾｸﾀ値取得
0564 CD8D07		CALL	COAS		;
ｾｸﾀ番号16進2桁表示
0567 DB43		IN	A,(F1D)		;
FDCﾃﾞｰﾀ値取得
0569 CD8D07		CALL	COAS		;
ﾃﾞｰﾀ値16進2桁表示
056C CDF706		CALL	CRLF		;
ｺﾝｿｰﾙ ｶｰｿﾙ復帰改行
056F 3ED0		LD	A,FINT		;
強制割り込み(打ち切り)命令ｺｰﾄﾞ取得
0571 321CFF		LD	(FDCFLG),A	;
FDC動作中ﾌﾗｸﾞ設定
0574 D340		OUT	(F1C),A		;
FDC現動作強制打ち切り、割り込み発生
0576 CD3206		CALL	FDCS3		;
FDC処理完了待機
0579 C3AA01		JP	SETUP		;
命令行入力開始へ
057C

057C		;	* ｾｸﾀ読み込み *
057C		;	出: ZF:結果(成功=1/失敗=0)ﾌﾗｸﾞ
057C

057C CDD405	RDDSK:	CALL	SEKDMA		;
ﾄﾗｯｸ移動,ｾｸﾀ指定,DMA設定
057F 7A			LD	A,D		;
FDC状態ｺｰﾄﾞ値取得
0580 C0			RET	NZ		;
失敗で呼び出し元へ復帰
0581		;

0581 210252		LD	HL,'R'*256+02H	;
FDC読み込み動作識別文字,I/O→ﾒﾓﾘ指定ﾋﾞｯﾄ値取得
0584 019E94		LD	BC,FMRD*256+9EH	;
複数ｾｸﾀ読み込み命令ｺｰﾄﾞ値,完了検査ﾏｽｸ値取得
0587 180B		JR	DSKX		;
後処理へ
0589

0589		;	* ｾｸﾀ書き込み *
0589		;	出: ZF:結果(成功=1/失敗=0)ﾌﾗｸﾞ
0589

0589 CDD405	WRDSK:	CALL	SEKDMA		;
ﾄﾗｯｸ移動,ｾｸﾀ指定,DMA設定
058C 7A			LD	A,D		;
FDC状態ｺｰﾄﾞ値取得
058D C0			RET	NZ		;
失敗で呼び出し元へ復帰
058E		;

058E 210057		LD	HL,'W'*256+00H	;
FDC書き込み動作識別文字,ﾒﾓﾘ→I/Oﾋﾞｯﾄ値取得
0591 01FFB4		LD	BC,FMWR*256+255	;
複数ｾｸﾀ書き込み命令ｺｰﾄﾞ値,完了検査ﾏｽｸ値取得
0594

0594		;	( ｾｸﾀ読み書き )
0594		;	入: B:FDC命令ｺｰﾄﾞ C:完了検査ﾏｽｸ値 H:FDC動作識別文字 L:転送方向ﾋﾞｯﾄ値
0594		;	出: ZF:結果(成功=1/失敗=0)ﾌﾗｸﾞ
0594

0594 DB50	DSKX:	IN	A,(P1A)		;
PPIﾎﾟｰﾄA値取得
0596 F640		OR	01000000B	;
ﾍｯﾄﾞ ﾛｰﾄﾞ ﾋﾞｯﾄ設定
0598 D350		OUT	(P1A),A		;
ﾍｯﾄﾞ ﾛｰﾄﾞ信号出力設定
059A ED3832		IN0	A,(DWR)		;
DMA/ｳｪｲﾄ制御ﾚｼﾞｽﾀ値取得
059D E6FD		AND	11111101B	;
方向(DIM1)ﾋﾞｯﾄ解除
059F B5			OR	L		;
方向ﾋﾞｯﾄ設定
05A0 ED3932		OUT0	(DWR),A		;
DMA1方向設定
05A3 ED3830		IN0	A,(DXS)		;
DMAｽﾃｰﾀｽ ﾚｼﾞｽﾀ値取得
05A6 E6DF		AND	11011111B	;
/DWE1ﾋﾞｯﾄ解除(DE1更新許可)
05A8 F680		OR	10000000B	;
DE1ﾋﾞｯﾄ設定(DMA1許可)
05AA ED3930		OUT0	(DXS),A		;
DMA1許可設定
05AD 78			LD	A,B		;
対応FDC命令ｺｰﾄﾞ取得(読み/書き)
05AE CD1B06		CALL	FDCS		;
複数ｾｸﾀ連続読み/書き
05B1 3E14		LD	A,2*10		;
2s値取得
05B3 321EFF		LD	(T1M0),A	;
ﾍｯﾄﾞ ﾛｰﾄﾞ持続ﾀｲﾏ起動
05B6 7A			LD	A,D		;
完了時FDC状態ｺｰﾄﾞ値取得
05B7 A1			AND	C		;
完了検査
05B8 C9			RET			;
結果ﾌﾗｸﾞと共に呼び出し元へ復帰
05B9

05B9		;	* FDDﾍｯﾄﾞ原点位置移動 *
05B9		;	出: ZF:結果(成功=1/失敗=0)ﾌﾗｸﾞ
05B9

05B9 3E00	FDHOME:	LD	A,FHME		;
ﾍｯﾄﾞ原点位置移動命令ｺｰﾄﾞ取得
05BB CD1B06		CALL	FDCS		;
FDCﾍｯﾄﾞ原点位置移動実行
05BE 07			RLCA			;
ﾄﾞﾗｲﾌﾞ準備不可ﾌﾗｸﾞをｷｬﾘｰ ﾌﾗｸﾞへ移動
05BF 380B		JR	C,FDHM1		;
ﾄﾞﾗｲﾌﾞ準備不可で分岐
05C1		;

05C1 3E13		LD	A,18+1		;
18ms遅延値取得
05C3 D343		OUT	(F1D),A		;
FDC18ms遅延指定
05C5 3EFC		LD	A,FDLY		;
FDC遅延命令ｺｰﾄﾞ取得
05C7 321CFF		LD	(FDCFLG),A	;
FDC動作中ﾌﾗｸﾞ設定
05CA D340		OUT	(F1C),A		;
FDC18ms間待機(ﾋﾞｼﾞｰ)開始
05CC 7A		FDHM1:	LD	A,D		;
原点位置移動完了時FDC状態ｺｰﾄﾞ値取得
05CD EE04		XOR	00000100B	;
ﾄﾗｯｸ0ﾋﾞｯﾄ値論理反転
05CF E685		AND	10000101B	;
最終的な結果ﾌﾗｸﾞ(ZF)取得
05D1 2648		LD	H,'H'		;
FDCﾎｰﾑ動作識別文字取得
05D3 C9			RET			;
結果ﾌﾗｸﾞ(ZF)と共に呼び出し元へ復帰
05D4

05D4		;	* ﾄﾗｯｸ移動,ｾｸﾀ指定,DMA設定 *
05D4		;	入: L:ﾄﾗｯｸ番号  出: ZF:成功(1)/失敗(0)ﾌﾗｸﾞ
05D4

05D4 CD3206	SEKDMA:	CALL	FDCS3		;
FDC処理完了待機
05D7 7D			LD	A,L		;
目的ﾄﾗｯｸ番号取得
05D8 D343		OUT	(F1D),A		;
FDC目的ﾄﾗｯｸ番号指定
05DA CD0706		CALL	SETLCR		;
低電流(LOW-C)設定
05DD 3E10		LD	A,FSEK		;
ﾍｯﾄﾞ目的ﾄﾗｯｸ位置移動命令ｺｰﾄﾞ取得
05DF CD1B06		CALL	FDCS		;
ﾍｯﾄﾞ目的ﾄﾗｯｸ位置移動
05E2 E699		AND	10011001B	;
完了検査
05E4 2653		LD	H,'S'		;
FDCｼｰｸ動作識別文字取得
05E6 C0			RET	NZ		;
失敗で呼び出し元へ復帰
05E7		;

05E7 7B			LD	A,E		;
開始ｾｸﾀ番号取得
05E8 D342		OUT	(F1S),A		;
FDC開始ｾｸﾀ番号指定
05EA 3A1DFF		LD	A,(SECCNT)	;
指定ｾｸﾀ数取得
05ED 3D			DEC	A		;
最終ｾｸﾀ ｵﾌｾｯﾄ値取得
05EE 83			ADD	A,E		;
最終ｾｸﾀ番号取得
05EF D343		OUT	(F1D),A		;
FDC最終ｾｸﾀ番号指定
05F1		;

05F1 ED0928	SKDMA1:	OUT0	(D1ML),C	;
DMA1ﾒﾓﾘ ｱﾄﾞﾚｽ下位指定値設定
05F4 ED0129		OUT0	(D1MH),B	;
DMA1ﾒﾓﾘ ｱﾄﾞﾚｽ上位指定値設定
05F7 0E04		LD	C,M1BAS/16	;
ｼｽﾃﾑRAMﾊﾞﾝｸ番号取得
05F9 ED092A		OUT0	(D1MB),C	;
DMA1ﾊﾞﾝｸ番号設定
05FC 010040		LD	BC,1024*16	;
転送ﾊﾞｲﾄ数取得(最大値:16Kﾊﾞｲﾄ)
05FF ED092E		OUT0	(D1CL),C	;
DMA1転送ﾊﾞｲﾄ数下位設定
0602 ED012F		OUT0	(D1CH),B	;
DMA1転送ﾊﾞｲﾄ数上位設定
0605 AF			XOR	A		;
完了ｺｰﾄﾞ(ﾌﾗｸﾞ)取得
0606 C9			RET			;
呼び出し元へ復帰
0607

0607		;	* 低電流(LOW-C)設定 *
0607

0607 FE2B	SETLCR:	CP	43		;
ﾄﾗｯｸ43以上か検査
0609 2E00		LD	L,00000000B	;
LOW-C=L値取得
060B 3802		JR	C,STLCR1	;
ﾄﾗｯｸ43未満で分岐
060D		;

060D 2E10		LD	L,00010000B	;
LOW-C=H値取得
060F 3A77FF	STLCR1:	LD	A,(PPTSV)	;
拡張出力ﾎﾟｰﾄ値取得
0612 E62F		AND	00101111B	;
低電流(LOW-C)ﾋﾞｯﾄ解除
0614 B5			OR	L		;
指定低電流ﾋﾞｯﾄ設定
0615 3277FF		LD	(PPTSV),A	;
拡張出力ﾎﾟｰﾄ値保存
0618 D360		OUT	(PPT),A		;
指定低電流(LOW-C)ﾋﾞｯﾄ出力設定
061A C9			RET			;
呼び出し元へ復帰
061B

061B		;	* FDC命令実行 *
061B

061B 57		FDCS:	LD	D,A		;
FDC命令ｺｰﾄﾞ一時退避
061C CD3206		CALL	FDCS3		;
FDC処理完了待機
061F 3EFF		LD	A,-1		;
真(-1)値取得
0621 321CFF		LD	(FDCFLG),A	;
FDC動作中ﾌﾗｸﾞ設定
0624 7A			LD	A,D		;
FDC命令ｺｰﾄﾞ復帰
0625 D340		OUT	(F1C),A		;
対応FDC命令実行開始
0627 DB40	FDCS2:	IN	A,(F1C)		;
FDC状態ｺｰﾄﾞ取得
0629 57			LD	D,A		;
FDC状態ｺｰﾄﾞ一時退避
062A 07			RLCA			;
ﾄﾞﾗｲﾌﾞ準備可/不可検査
062B 7A			LD	A,D		;
FDC状態ｺｰﾄﾞ復帰
062C D8			RET	C		;
ﾄﾞﾗｲﾌﾞ準備不可で呼び出し元へ復帰
062D		;

062D 0F			RRCA			;
FDC動作中(ﾋﾞｼﾞｰ)か検査
062E 38F7		JR	C,FDCS2		;
FDC動作完了まで検査継続待機
0630		;

0630 07			RLCA			;
FDC状態ｺｰﾄﾞ ﾋﾞｯﾄ位置復帰
0631 C9			RET			;
呼び出し元へ復帰
0632

0632		;	( FDC命令完了検査 )
0632

0632 DB40	FDCS3:	IN	A,(F1C)		;
FDC状態ｺｰﾄﾞ取得
0634 0F			RRCA			;
FDC動作中(ﾋﾞｼﾞｰ)か検査
0635 38FB		JR	C,FDCS3		;
FDC動作完了まで検査継続待機
0637		;

0637 07			RLCA			;
FDC状態ｺｰﾄﾞ ﾋﾞｯﾄ位置復帰
0638 C9			RET			;
呼び出し元へ復帰
0639

0639		;	[ ﾓﾆﾀ機能 ]
0639

0639 79		FUNC:	LD	A,C		;
機能番号取得
063A FE0C		CP	12		;
範囲検査
063C D0			RET	NC		;
範囲外で呼び出し元へ復帰
063D		;

063D 69			LD	L,C		;
機能番号ｵﾌｾｯﾄ下位設定
063E 2600		LD	H,0		;
上位0設定
0640 29			ADD	HL,HL		;
ﾜｰﾄﾞ単位に変換(×2)
0641 01660B		LD	BC,FNCTBL	;
機能処理ｱﾄﾞﾚｽ ﾃｰﾌﾞﾙ基準ﾎﾟｲﾝﾀ取得
0644 09			ADD	HL,BC		;
対応機能処理ｱﾄﾞﾚｽ ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ取得
0645 4E			LD	C,(HL)		;
対応機能処理ｱﾄﾞﾚｽ下位仮取得
0646 23			INC	HL		;
対応機能処理ｱﾄﾞﾚｽ ﾃｰﾌﾞﾙ ﾎﾟｲﾝﾀ進行(+1)
0647 66			LD	H,(HL)		;
対応機能処理ｱﾄﾞﾚｽ上位取得
0648 69			LD	L,C		;
対応機能処理ｱﾄﾞﾚｽ下位設定
0649 4B			LD	C,E		;
引数ｺﾋﾟｰ
064A E9			JP	(HL)		;
対応機能実行へ
064B

064B		;	* ｺﾝｿｰﾙから行入力 *
064B		;	入: DE:指定行ﾊﾞｯﾌｧ先頭ｱﾄﾞﾚｽ
064B

064B CD5B06	FLININ:	CALL	LININ		;
ｺﾝｿｰﾙからの1行入力取得
064E 3E52		LD	A,82		;
ﾊﾞｯﾌｧ内最大ﾊﾞｲﾄ数取得
0650 12			LD	(DE),A		;
ﾊﾞｯﾌｧ内最大ﾊﾞｲﾄ数設定
0651 13			INC	DE		;
指定ﾊﾞｯﾌｧ入力ﾊﾞｲﾄ数値ﾎﾟｲﾝﾀ取得
0652 2B			DEC	HL		;
入力ﾊﾞｲﾄ数値ﾎﾟｲﾝﾀ取得
0653 4E			LD	C,(HL)		;
入力ﾊﾞｲﾄ数取得
0654 0C			INC	C		;
転送ﾊﾞｲﾄ数取得
0655 0600		LD	B,0		;
上位0設定
0657 35			DEC	(HL)		;
入力ﾊﾞｲﾄ数を終了子分減数(-1)
0658 EDB0		LDIR			;
入力行を指定ﾊﾞｯﾌｧへｺﾋﾟｰ
065A C9			RET			;
呼び出し元へ復帰
065B

065B		;	( ｺﾝｿｰﾙからの1行入力取得 )
065B		;	出: HL:入力文字先頭ﾎﾟｲﾝﾀ
065B

065B 2120FF	LININ:	LD	HL,LINBF	;
行ﾊﾞｯﾌｧ基準ﾎﾟｲﾝﾀ取得
065E 0650		LD	B,80		;
入力ﾊﾞｲﾄ数ｶｳﾝﾀ初期化(最大ﾊﾞｲﾄ数)
0660 CDC307	LININ1:	CALL	CICHR		;
ｺﾝｿｰﾙから次1文字(ﾊﾞｲﾄ)取得
0663 FE0D		CP	CR		;
行終了ｺｰﾄﾞ検査
0665 282D		JR	Z,LINTRM	;
行終了ｺｰﾄﾞで分岐
0667		;

0667 FE0A		CP	LF		;
行終了ｺｰﾄﾞ検査
0669 2829		JR	Z,LINTRM	;
行終了ｺｰﾄﾞで分岐
066B		;

066B FE08		CP	BS		;
ﾊﾞｯｸ ｽﾍﾟｰｽ(BS)ｺｰﾄﾞか検査
066D 2830		JR	Z,DELBS		;
ﾊﾞｯｸ ｽﾍﾟｰｽ(BS)ｺｰﾄﾞで分岐
066F		;

066F FE18		CP	CAN		;
行取り消し(CAN)ｺｰﾄﾞか検査
0671 2831		JR	Z,LINCAN	;
行取り消し(CAN)ｺｰﾄﾞで分岐
0673		;

0673 FE20		CP	' '		;
その他制御ｺｰﾄﾞか検査
0675 38E9		JR	C,LININ1	;
その他制御ｺｰﾄﾞで再入力へ
0677		;

0677 FE7F		CP	DEL		;
取り消し(DEL)ｺｰﾄﾞか検査
0679 2824		JR	Z,DELBS		;
取り消し(DEL)ｺｰﾄﾞで分岐
067B		;

067B 30E3		JR	NC,LININ1	;
上側配置ｺｰﾄﾞで再入力へ
067D		;

067D 77			LD	(HL),A		;
対応文字ﾊﾞｲﾄをﾊﾞｯﾌｧへ保存
067E 23			INC	HL		;
行ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ進行(+1)
067F 4F			LD	C,A		;
対応文字ｺｰﾄﾞをｺﾋﾟｰ
0680 CD5D07		CALL	COCHR		;
戻し出力表示
0683 10DB		DJNZ	LININ1		;
行終了ｺｰﾄﾞか最大ﾊﾞｲﾄ数まで継続へ
0685

0685		;	(( 誤り処理(警告表示後再入力開始) ))
0685

0685 CDF706	CERR:	CALL	CRLF		;
ｺﾝｿｰﾙ ｶｰｿﾙ復帰改行
0688 116E08		LD	DE,ERMSG	;
誤り警告文字列ﾎﾟｲﾝﾀ取得
068B CD4D07		CALL	MSGOUT		;
誤り警告表示
068E CDF706		CALL	CRLF		;
ｺﾝｿｰﾙ ｶｰｿﾙ復帰改行
0691 C3AA01		JP	SETUP		;
命令行入力開始へ
0694

0694		;	(( 行終了ｺｰﾄﾞ ))
0694

0694 360D	LINTRM:	LD	(HL),CR		;
ﾊﾞｯﾌｧに終了子設定
0696 3E51		LD	A,81		;
最大入力ﾊﾞｲﾄ数+1値取得
0698 90			SUB	B		;
入力ﾊﾞｲﾄ数取得
0699 211FFF		LD	HL,CHRCNT	;
入力ﾊﾞｲﾄ数値ﾎﾟｲﾝﾀ取得
069C 77			LD	(HL),A		;
入力ﾊﾞｲﾄ数保存設定
069D 23			INC	HL		;
入力文字ﾊﾞｲﾄ先頭ﾎﾟｲﾝﾀ取得
069E C9			RET			;
呼び出し元へ復帰
069F

069F		;	(( 1文字(ﾊﾞｲﾄ)取り消し ))
069F

069F CDAB06	DELBS:	CALL	DELCHR		;
1ﾊﾞｲﾄ取り消し処理
06A2 18BC		JR	LININ1		;
再入力へ
06A4

06A4		;	(( 行取り消し ))
06A4

06A4 CDAB06	LINCAN	CALL	DELCHR		;
1ﾊﾞｲﾄ取り消し処理
06A7 20FB		JR	NZ,LINCAN	;
ﾊﾞｯﾌｧ空まで継続へ
06A9		;

06A9 18B5		JR	LININ1		;
再入力へ
06AB

06AB		;	((( 1ﾊﾞｲﾄ取り消し処理 )))
06AB		;	出: ZF:残文字有(0)/無(1)ﾌﾗｸﾞ
06AB

06AB 3E50	DELCHR:	LD	A,80		;
最大入力ﾊﾞｲﾄ数取得
06AD 90			SUB	B		;
入力ﾊﾞｲﾄ数取得
06AE C8			RET	Z		;
入力無しで呼び出し元へ復帰
06AF		;

06AF 0E08		LD	C,BS		;
ｶｰｿﾙ後退ｺｰﾄﾞ取得
06B1 CD5D07		CALL	COCHR		;
ｺﾝｿｰﾙ ｶｰｿﾙ1文字分後退
06B4 CD5B07		CALL	COSP		;
空白表示
06B7 0E08		LD	C,BS		;
ｶｰｿﾙ後退ｺｰﾄﾞ取得
06B9 CD5D07		CALL	COCHR		;
ｺﾝｿｰﾙ ｶｰｿﾙ1文字分後退
06BC 04			INC	B		;
入力ﾊﾞｲﾄ数ｶｳﾝﾀ後退(+1)
06BD 2B			DEC	HL		;
行ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ後退(-1)
06BE C9			RET			;
呼び出し元へ復帰
06BF

06BF		;	( 命令行引数取得(16進文字→ﾊﾞｲﾅﾘ変換) )
06BF

06BF 0E04	PRIN4:	LD	C,4		;
引数数4指定
06C1 180C		JR	PRIN41		;
4引数取得処理へ
06C3		;

06C3 0E03	PRIN3:	LD	C,3		;
引数数3指定
06C5 180E		JR	PRIN31		;
3引数取得処理へ
06C7		;

06C7 0E02	PRIN2:	LD	C,2		;
引数数2指定
06C9 1810		JR	PRIN21		;
2引数取得処理へ
06CB		;

06CB 0E01	PRIN1:	LD	C,1		;
引数数1指定
06CD 1812		JR	PRIN11		;
1引数取得処理へ
06CF		;

06CF CD0607	PRIN41:	CALL	GETPR		;
1引数(ﾊﾞｲﾅﾘ)値変換取得
06D2 38B1		JR	C,CERR		;
最後が終了子で誤り警告表示後再入力開始へ
06D4		;

06D4 D5			PUSH	DE		;
4引数の先頭引数値一時保存
06D5 CD0607	PRIN31:	CALL	GETPR		;
1引数(ﾊﾞｲﾅﾘ)値変換取得
06D8 38AB		JR	C,CERR		;
最後が終了子で誤り警告表示後再入力開始へ
06DA		;

06DA D5			PUSH	DE		;
4引数の第2,3引数の先頭引数値一時保存
06DB CD0607	PRIN21:	CALL	GETPR		;
1引数(ﾊﾞｲﾅﾘ)値変換取得
06DE 38A5		JR	C,CERR		;
最後が終了子で誤り警告表示後再入力開始へ
06E0		;

06E0 D5			PUSH	DE		;
4引数の第3,3引数の第2,2引数の先頭引数値一時保存
06E1 CD0607	PRIN11:	CALL	GETPR		;
1引数(ﾊﾞｲﾅﾘ)値変換取得
06E4 309F		JR	NC,CERR		;
最後が終了子以外で誤り警告表示後再入力開始へ
06E6		;

06E6 D5			PUSH	DE		;
最終引数値一時保存
06E7 79			LD	A,C		;
指定引数数取得
06E8 FE03		CP	3		;
3引数か検査
06EA 2808		JR	Z,PRIN32	;
3引数で分岐
06EC		;

06EC FE02		CP	2		;
2引数か検査
06EE 2805		JR	Z,PRIN22	;
2引数で分岐
06F0		;

06F0 3804		JR	C,PRIN12	;
1引数で分岐
06F2		;

06F2 E1			POP	HL		;
最終引数値復帰
06F3 7D			LD	A,L		;
最終引数値ｺﾋﾟｰ(有効値はﾊﾞｲﾄ範囲)
06F4 C1		PRIN32:	POP	BC		;
4引数の第3,3引数の第2,2引数の先頭引数値復帰
06F5 D1		PRIN22:	POP	DE		;
4引数の第2,3引数の先頭引数値復帰
06F6 E1		PRIN12:	POP	HL		;
4引数の先頭引数値復帰
06F7

06F7		;	(( ｺﾝｿｰﾙ ｶｰｿﾙ復帰改行 ))
06F7

06F7 F5		CRLF:	PUSH	AF		;
AFﾚｼﾞｽﾀ値一時保存
06F8 C5			PUSH	BC		;
BCﾚｼﾞｽﾀ値一時保存
06F9 0E0D		LD	C,CR		;
ｶｰｿﾙ復帰ｺｰﾄﾞ取得
06FB CD5D07		CALL	COCHR		;
ｺﾝｿｰﾙ ｶｰｿﾙ復帰
06FE 0E0A		LD	C,LF		;
ｶｰｿﾙ改行ｺｰﾄﾞ取得
0700 CD5D07		CALL	COCHR		;
ｺﾝｿｰﾙ ｶｰｿﾙ改行
0703 C1			POP	BC		;
BCﾚｼﾞｽﾀ値復帰
0704 F1			POP	AF		;
AFﾚｼﾞｽﾀ値復帰
0705 C9			RET			;
呼び出し元へ復帰
0706

0706		;	(( 1引数(ﾊﾞｲﾅﾘ)値変換取得 ))
0706

0706 CD3B07	GETPR:	CALL	SKPSP		;
次命令行有効文字先頭ﾎﾟｲﾝﾀ取得
0709 E5			PUSH	HL		;
命令行今回開始ﾎﾟｲﾝﾀ一時保存
070A CD4207		CALL	TRMCHK		;
次分離子,終了子まで飛ばし(ﾎﾟｲﾝﾀ移動)
070D D1			POP	DE		;
命令行今回開始ﾎﾟｲﾝﾀ復帰
070E F5			PUSH	AF		;
終了子ﾌﾗｸﾞ一時保存
070F E5			PUSH	HL		;
命令行次回検索開始ﾎﾟｲﾝﾀ一時保存
0710 E5			PUSH	HL		;
命令行次回検索開始ﾎﾟｲﾝﾀ一時保存
0711 B7			OR	A		;
ｷｬﾘｰ ﾌﾗｸﾞ解除
0712 ED52		SBC	HL,DE		;
引数文字ﾊﾞｲﾄ数取得
0714 7D			LD	A,L		;
引数文字ﾊﾞｲﾄ数ｺﾋﾟｰ
0715 FE05		CP	4+1		;
4桁越えか検査
0717 3802		JR	C,GETPR1	;
4桁以内で分岐
0719		;

0719 3E04		LD	A,4		;
4桁越えで有効桁数指定
071B 47		GETPR1:	LD	B,A		;
変換ﾊﾞｲﾄ数ｶｳﾝﾀ初期化
071C E1			POP	HL		;
命令行次回検索開始ﾎﾟｲﾝﾀ復帰
071D 58			LD	E,B		;
ｵﾌｾｯﾄ(変換ﾊﾞｲﾄ数)設定
071E 1600		LD	D,0		;
上位0設定
0720 B7			OR	A		;
ｷｬﾘｰ ﾌﾗｸﾞ解除
0721 ED52		SBC	HL,DE		;
命令行変換開始ﾎﾟｲﾝﾀ取得
0723 EB			EX	DE,HL		;
命令行変換開始ﾎﾟｲﾝﾀをDEへ移動
0724 210000		LD	HL,0		;
結果ﾊﾞｲﾅﾘ値初期化
0727 1A		GETPR2:	LD	A,(DE)		;
対応ﾊﾞｲﾄ(16進1桁文字)取得
0728 CDFF07		CALL	CVBIN		;
16進1文字→ﾊﾞｲﾅﾘ変換
072B DA8506		JP	C,CERR		;
無効文字で誤り警告表示後再入力開始へ
072E		;

072E 29			ADD	HL,HL		;
(×2)直前までの結果値16進1桁左移動(×16)
072F 29			ADD	HL,HL		;
(×4)
0730 29			ADD	HL,HL		;
(×8)
0731 29			ADD	HL,HL		;
(×16)
0732 B5			OR	L		;
今回16進1桁値合成
0733 6F			LD	L,A		;
結果値下位書き戻し
0734 13			INC	DE		;
命令行ﾎﾟｲﾝﾀ進行(+1)
0735 10F0		DJNZ	GETPR2		;
引数最終文字まで継続へ
0737		;

0737 EB			EX	DE,HL		;
結果ﾊﾞｲﾅﾘ値をDEへ保存
0738 E1			POP	HL		;
命令行次回検索開始ﾎﾟｲﾝﾀ復帰
0739 F1			POP	AF		;
終了子ﾌﾗｸﾞ復帰
073A C9			RET			;
呼び出し元へ復帰
073B

073B		;	(( 空白飛ばし(有効文字先頭ﾎﾟｲﾝﾀ取得) ))
073B		;	入: HL:行ﾊﾞｯﾌｧ検索開始位置-1  出: HL:有効文字先頭ﾎﾟｲﾝﾀ
073B

073B 23		SKPSP:	INC	HL		;
行ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ進行(+1)
073C 7E			LD	A,(HL)		;
対応文字ﾊﾞｲﾄ値取得
073D FE20		CP	' '		;
空白(ｽﾍﾟｰｽ)検査
073F C0			RET	NZ		;
空白以外で呼び出し元へ復帰
0740		;

0740 18F9		JR	SKPSP		;
空白以外の文字まで継続へ
0742

0742		;	(( 分離子,終了子まで飛ばし(次空白飛ばし開始ﾎﾟｲﾝﾀ取得) ))
0742		;	入: HL:行ﾊﾞｯﾌｧ検索開始位置-1
0742		;	出: CF:分離子(=0)/終了子(=1) HL:分離子,終了子位置ﾎﾟｲﾝﾀ
0742

0742 23		TRMCHK:	INC	HL		;
行ﾊﾞｯﾌｧ ﾎﾟｲﾝﾀ進行(+1)
0743 7E			LD	A,(HL)		;
対応文字ﾊﾞｲﾄ値取得
0744 FE2C		CP	','		;
分離子検査
0746 C8			RET	Z		;
分離子で呼び出し元へ復帰
0747		;

0747 FE0D		CP	CR		;
終了子検査
0749 3F			CCF			;
終了子ﾌﾗｸﾞ(C)設定
074A C8			RET	Z		;
終了子で呼び出し元へ復帰
074B		;

074B 18F5		JR	TRMCHK		;
分離子or終了子まで継続へ
074D

074D		;	( ｺﾝｿｰﾙ入出力 )
074D

074D		;	(( ｺﾝｿｰﾙ文字列表示 ))
074D

074D 1A		MSGOUT:	LD	A,(DE)		;
対応文字ﾊﾞｲﾄ取得
074E FE24		CP	'$'		;
終了子検査
0750 C8			RET	Z		;
終了子で呼び出し元へ復帰
0751		;

0751 4F			LD	C,A		;
対応文字ｺｰﾄﾞ指定
0752 CD5D07		CALL	COCHR		;
対応文字表示
0755 13			INC	DE		;
文字列ﾎﾟｲﾝﾀ進行(+1)
0756 18F5		JR	MSGOUT		;
終了子まで継続へ
0758

0758		;	(( HL値16進4桁+空白表示 ))
0758

0758 CD9207	COHLS:	CALL	COHL		;
HL値16進4桁表示
075B

075B		;	(( 空白(ｽﾍﾟｰｽ)表示 ))
075B

075B 0E20	COSP:	LD	C,' '		;
空白(ｽﾍﾟｰｽ)ｺｰﾄﾞ取得
075D

075D		;	(( ｺﾝｿｰﾙ1文字(ﾊﾞｲﾄ)表示 ))
075D

075D ED3805	COCHR:	IN0	A,(A1S)		;
非同期ｼﾘｱﾙ1 ｽﾃｰﾀｽ ﾚｼﾞｽﾀ値取得
0760 E602		AND	00000010B	;
送信可/不可検査
0762 28F9		JR	Z,COCHR		;
送信可まで待機
0764		;

0764 79			LD	A,C		;
指定文字ｺｰﾄﾞ取得
0765 FE10		CP	C_P		;
印字ON/OFFｺｰﾄﾞか検査
0767 281B		JR	Z,COCHR2	;
印字ON/OFFｺｰﾄﾞで分岐
0769		;

0769 ED0907		OUT0	(A1T),C		;
対応ｺｰﾄﾞ送信開始
076C 3A1AFF		LD	A,(PRNFLG)	;
印字要求ﾌﾗｸﾞ値取得
076F B7			OR	A		;
印字要求有無検査
0770 C4DE07		CALL	NZ,LIST		;
印字要求有りで指定文字印字
0773 CDB207	COCHR1:	CALL	CIST		;
ｺﾝｿｰﾙ入力状態取得
0776 C8			RET	Z		;
入力無しで呼び出し元へ復帰
0777		;

0777 CDC307		CALL	CICHR		;
ｺﾝｿｰﾙから次1文字(ﾊﾞｲﾄ)取得
077A FE03		CP	C_C		;
打ち切りｺｰﾄﾞか検査
077C CAAA01		JP	Z,SETUP		;
打ち切りｺｰﾄﾞで命令行入力開始へ
077F		;

077F FE13		CP	C_S		;
出力一時停止ｺｰﾄﾞか検査
0781 C0			RET	NZ		;
出力一時停止ｺｰﾄﾞ以外で呼び出し元へ復帰
0782		;

0782 183F		JR	CICHR		;
ｺﾝｿｰﾙから次1文字(ﾊﾞｲﾄ)取得後呼び出し元へ復帰へ
0784		;

0784 3A1AFF	COCHR2:	LD	A,(PRNFLG)	;
印字要求ﾌﾗｸﾞ値取得
0787 2F			CPL			;
印字要求ﾌﾗｸﾞ値反転(交互ON/OFF)
0788 321AFF		LD	(PRNFLG),A	;
印字要求ﾌﾗｸﾞ更新保存
078B 18E6		JR	COCHR1		;
入力再検査へ
078D

078D		;	(( A値16進2桁+空白表示 ))
078D

078D CD9707	COAS:	CALL	COA		;
A値16進2桁表示
0790 18C9		JR	COSP		;
空白表示後呼び出し元へ復帰へ
0792

0792		;	(( HL値16進4桁表示 ))
0792

0792 7C		COHL:	LD	A,H		;
Hﾚｼﾞｽﾀ値取得
0793 CD9707		CALL	COA		;
Hﾚｼﾞｽﾀ値16進2桁表示
0796 7D			LD	A,L		;
Lﾚｼﾞｽﾀ値取得
0797

0797		;	(( A値16進2桁表示 ))
0797

0797 F5		COA:	PUSH	AF		;
Aﾚｼﾞｽﾀ値一時保存
0798 CDA407		CALL	CVASCH		;
上位ﾆﾌﾞﾙ→ASCII文字変換
079B CD5D07		CALL	COCHR		;
上位ﾆﾌﾞﾙ16進1桁表示
079E F1			POP	AF		;
Aﾚｼﾞｽﾀ値復帰
079F CDA807		CALL	CVASCL		;
下位ﾆﾌﾞﾙ→ASCII文字変換
07A2 18B9		JR	COCHR		;
下位ﾆﾌﾞﾙ16進1桁表示後呼び出し元へ復帰へ
07A4

07A4		;	((( 上位ﾆﾌﾞﾙ→ASCII文字変換 )))
07A4

07A4 0F		CVASCH:	RRCA			;
(÷2)上位ﾆﾌﾞﾙを下位ﾆﾌﾞﾙ位置へ移動(÷16)
07A5 0F			RRCA			;
(÷4)
07A6 0F			RRCA			;
(÷8)
07A7 0F			RRCA			;
(÷16)
07A8

07A8		;	((( 下位ﾆﾌﾞﾙ→ASCII文字変換 )))
07A8

07A8 E60F	CVASCL:	AND	00001111B	;
上位ﾆﾌﾞﾙ解除
07AA C690		ADD	A,90H		;
下位ﾆﾌﾞﾙ値(仮)取得
07AC 27			DAA			;
9以下=9nH,10以上=0(10-n)H
07AD CE40		ADC	A,40H		;
10以上値補正
07AF 27			DAA			;
9以下=3nH,10以上=4(10-n+1)H
07B0 4F			LD	C,A		;
ASCIIｺｰﾄﾞ保存
07B1 C9			RET			;
呼び出し元へ復帰
07B2

07B2		;	( ｺﾝｿｰﾙ入力状態取得 )
07B2		;	出: ZF:受信値有(0)/無(1)ﾌﾗｸﾞ
07B2

07B2 ED3805	CIST:	IN0	A,(A1S)		;
非同期ｼﾘｱﾙ1 ｽﾃｰﾀｽ ﾚｼﾞｽﾀ値取得
07B5 F5			PUSH	AF		;
非同期ｼﾘｱﾙ1 ｽﾃｰﾀｽ ﾚｼﾞｽﾀ値一時保存
07B6 E670		AND	01110000B	;
正常/異常検査
07B8 2805		JR	Z,CIST1		;
正常で分岐
07BA		;

07BA 3E6C		LD	A,01101100B	;
異常解除ｺｰﾄﾞ取得
07BC ED3901		OUT0	(A1A),A		;
非同期ｼﾘｱﾙ1 異常状態解除
07BF F1		CIST1:	POP	AF		;
非同期ｼﾘｱﾙ1 ｽﾃｰﾀｽ ﾚｼﾞｽﾀ値復帰
07C0 E680		AND	10000000B	;
受信値有無ﾋﾞｯﾄ以外解除
07C2 C9			RET			;
受信値有無ﾌﾗｸﾞと共に呼び出し元へ復帰
07C3

07C3		;	( ｺﾝｿｰﾙから1文字(ﾊﾞｲﾄ)取得 )
07C3

07C3 CDB207	CICHR:	CALL	CIST		;
ｺﾝｿｰﾙ入力状態取得
07C6 28FB		JR	Z,CICHR		;
入力有りまで待機
07C8		;

07C8 ED3809		IN0	A,(A1R)		;
非同期ｼﾘｱﾙ1(ｺﾝｿｰﾙ)受信ﾃﾞｰﾀ取得
07CB E67F		AND	01111111B	;
ASCIIｺｰﾄﾞ範囲規制
07CD FE10		CP	C_P		;
印字ON/OFFｺｰﾄﾞか検査
07CF C0			RET	NZ		;
印字ON/OFFｺｰﾄﾞ以外で呼び出し元へ復帰
07D0		;

07D0 3A1AFF		LD	A,(PRNFLG)	;
印字要求ﾌﾗｸﾞ値取得
07D3 2F			CPL			;
印字要求ﾌﾗｸﾞ値反転(交互ON/OFF)
07D4 321AFF		LD	(PRNFLG),A	;
印字要求ﾌﾗｸﾞ更新保存
07D7 18EA		JR	CICHR		;
再入力へ
07D9

07D9		;	( ﾌﾟﾘﾝﾀ出力状態取得(可/不可検査) )
07D9		;	出: ZF:出力可(0)/不可(1)ﾌﾗｸﾞ
07D9

07D9 3A1BFF	LISTST:	LD	A,(PRNRDY)	;
ﾌﾟﾘﾝﾀ出力可ﾌﾗｸﾞ値取得
07DC B7			OR	A		;
出力可/不可検査
07DD C9			RET			;
出力可/不可ﾌﾗｸﾞと共に呼び出し元へ復帰
07DE

07DE		;	( ﾌﾟﾘﾝﾀ1文字(ﾊﾞｲﾄ)出力 )
07DE

07DE CDD907	LIST:	CALL	LISTST		;
ﾌﾟﾘﾝﾀ出力状態取得(可/不可検査)
07E1 28FB		JR	Z,LIST		;
出力可まで待機
07E3		;

07E3 79			LD	A,C		;
指定文字ｺｰﾄﾞ取得
07E4 D351		OUT	(P1B),A		;
ﾌﾟﾘﾝﾀ ﾃﾞｰﾀ出力設定
07E6 3E06		LD	A,06H		;
/STB=L制御値取得(ﾋﾞｯﾄ3=L)
07E8 D353		OUT	(P1X),A		;
/STB=L設定
07EA AF			XOR	A		;
偽(0)値取得
07EB 321BFF		LD	(PRNRDY),A	;
ﾌﾟﾘﾝﾀ出力可ﾌﾗｸﾞ解除
07EE 3E07		LD	A,07H		;
/STB=H制御値取得(ﾋﾞｯﾄ3=H)
07F0 D353		OUT	(P1X),A		;
/STB=H設定
07F2 C9			RET			;
呼び出し元へ復帰
07F3

07F3		;	(( 終了ｱﾄﾞﾚｽ検査 ))
07F3		;	入: DE:終了ｱﾄﾞﾚｽ HL:現ｱﾄﾞﾚｽ  出: CF:到達(1)/未到達(0)ﾌﾗｸﾞ
07F3

07F3 7D		ENDCHK:	LD	A,L		;
現ｱﾄﾞﾚｽ下位ﾊﾞｲﾄ取得
07F4 B4			OR	H		;
現ｱﾄﾞﾚｽ0検査
07F5 37			SCF			;
到達ﾌﾗｸﾞ仮設定
07F6 C8			RET	Z		;
現ｱﾄﾞﾚｽ0で到達ﾌﾗｸﾞと共に呼び出し元へ復帰
07F7		;

07F7 D5			PUSH	DE		;
終了ｱﾄﾞﾚｽ一時保存
07F8 EB			EX	DE,HL		;
DE:現ｱﾄﾞﾚｽ,HL:終了ｱﾄﾞﾚｽ
07F9 B7			OR	A		;
ｷｬﾘｰ ﾌﾗｸﾞ解除
07FA ED52		SBC	HL,DE		;
終了ｱﾄﾞﾚｽ到達検査
07FC EB			EX	DE,HL		;
現ｱﾄﾞﾚｽをHLへ移動(復帰)
07FD D1			POP	DE		;
終了ｱﾄﾞﾚｽ復帰
07FE C9			RET			;
到達/未到達ﾌﾗｸﾞと共に呼び出し元へ復帰
07FF

07FF		;	( 16進1文字→ﾊﾞｲﾅﾘ変換 )
07FF		;	入: A:16進文字1桁(ﾊﾞｲﾄ)  出: CF:有効(0)/無効(1)文字ﾌﾗｸﾞ A:対応ﾊﾞｲﾅﾘ値
07FF

07FF D630	CVBIN:	SUB	'0'		;
0基準ﾊﾞｲﾅﾘ仮変換
0801 FE0A		CP	9+1		;
元が'0'～'9'か検査
0803 3807		JR	C,CVBIN1	;
元が'0'～'9'で分岐
0805		;

0805 D611		SUB	'A'-'0'		;
元の'A'～'F'を0～5に一時的変換
0807 D8			RET	C		;
元が'9'の次から'A'の前まで(無効)で呼び出し元へ復帰
0808		;

0808 C60A		ADD	A,10		;
元の'A'～'F'を10(0AH)～15(0FH)に変換
080A FE10		CP	0FH+1		;
元の'0'未満と'F'越えか検査
080C 3F		CVBIN1:	CCF			;
ｷｬﾘｰ ﾌﾗｸﾞ反転
080D C9			RET			;
有効/無効ﾌﾗｸﾞ(CF)と共に呼び出し元へ復帰
080E

080E		;	* ﾀｲﾏ1割り込み処理 (100ms) *
080E

080E F5		T1INT:	PUSH	AF		;
AFﾚｼﾞｽﾀ一時保存
080F E5			PUSH	HL		;
HLﾚｼﾞｽﾀ一時保存
0810 ED3810		IN0	A,(TXC)		;
(割り込み要求ﾌﾗｸﾞ解除処理)
0813 ED3814		IN0	A,(T1DL)	;
(割り込み要求ﾌﾗｸﾞ解除処理)
0816 211EFF		LD	HL,T1M0		;
ﾍｯﾄﾞ ﾛｰﾄﾞ持続ﾀｲﾏ値ﾎﾟｲﾝﾀ取得
0819 7E			LD	A,(HL)		;
ﾍｯﾄﾞ ﾛｰﾄﾞ持続ﾀｲﾏ値取得
081A B7			OR	A		;
動作/停止検査
081B 2809		JR	Z,T1INT1	;
停止で分岐
081D		;

081D 35			DEC	(HL)		;
ﾍｯﾄﾞ ﾛｰﾄﾞ持続ﾀｲﾏ減数(-1)
081E 2006		JR	NZ,T1INT1	;
計時中で分岐
0820		;

0820 DB50		IN	A,(P1A)		;
計時完了でPPIﾎﾟｰﾄA値取得
0822 E6BF		AND	10111111B	;
ﾍｯﾄﾞ ﾛｰﾄﾞ信号ﾋﾞｯﾄ解除
0824 D350		OUT	(P1A),A		;
ﾍｯﾄﾞ ﾛｰﾄﾞ信号=L(無効)
0826 E1		T1INT1:	POP	HL		;
HLﾚｼﾞｽﾀ復帰
0827 F1			POP	AF		;
AFﾚｼﾞｽﾀ復帰
0828 FB			EI			;
全割り込み許可
0829 C9			RET			;
割り込みから復帰
082A

082A		;	* /INT2割り込み処理 *
082A

082A F5		I2NT:	PUSH	AF		;
AFﾚｼﾞｽﾀ一時保存
082B E5			PUSH	HL		;
HLﾚｼﾞｽﾀ一時保存
082C		;

082C DB53	PRN:	IN	A,(P1X)		;
PPI制御ﾚｼﾞｽﾀ値取得
082E 07			RLCA			;
/ACK割り込み有無検査
082F 3005		JR	NC,FDC		;
/ACK割り込み無しで分岐
0831		;

0831 3EFF		LD	A,-1		;
真(-1)値取得
0833 321BFF		LD	(PRNRDY),A	;
ﾌﾟﾘﾝﾀ出力可ﾌﾗｸﾞ設定
0836		;

0836 211CFF	FDC:	LD	HL,FDCFLG	;
FDC動作中ﾌﾗｸﾞ値ﾎﾟｲﾝﾀ取得
0839 DB40		IN	A,(F1C)		;
FDC割り込みﾌﾗｸﾞ解除
083B 7E			LD	A,(HL)		;
FDC作業中ﾌﾗｸﾞ値取得
083C 3600		LD	(HL),0		;
FDC作業中ﾌﾗｸﾞ解除
083E B7			OR	A		;
異常割り込み検査
083F 2003		JR	NZ,I2NT1	;
正常(完了)割り込みで分岐
0841		;

0841 C30000	RES:	JP	0		;
異常割り込みでﾓﾆﾀ再始動へ
0844		;

0844 E1		I2NT1:	POP	HL		;
HLﾚｼﾞｽﾀ復帰
0845 F1			POP	AF		;
AFﾚｼﾞｽﾀ復帰
0846 FB			EI			;
全割り込み許可
0847 C9			RET			;
割り込みから復帰
0848

0848		;	* その他割り込み処理 *
0848

0848 FB		IRET:	EI			;
全割り込み許可
0849 C9			RET			;
割り込みから復帰
084A

084A

084A		;	[ 定数 ]
084A

084A		;	* 表示用文字列 *
084A

084A		;	( ﾓﾆﾀ開始文字列 )
084A

084A 0D0A2A2A	SMMSG:	DB	CR,LF,'***  SDT-II V1.0  ***$'

084E 2A202053

0852 44542D49

0856 49205631

085A 2E302020

085E 2A2A2A24

0862

0862		;	( 未定義命令実行警告文字列 )
0862

0862 0D0A2A20	UIMSG:	DB	CR,LF,'* Trap.  $'

0866 54726170

086A 2E202024

086E

086E		;	( 誤り警告文字列 )
086E

086E 2A204552	ERMSG:	DB	'* ERROR$'

0872 524F5224

0876

0876		;	( ﾍﾙﾌﾟ文字列 )
0876

0876 0D0A	HPMSG:	DB	CR,LF

0878 42202020		DB	'B                 : Boot to CP/M.',CR,LF

087C 20202020

0880 20202020

0884 20202020

0888 20203A20

088C 426F6F74

0890 20746F20

0894 43502F4D

0898 2E0D0A

089B 44207373		DB	'D ssss,eeee       : Dump memory block.',CR,LF

089F 73732C65

08A3 65656520

08A7 20202020

08AB 20203A20

08AF 44756D70

08B3 206D656D

08B7 6F727920

08BB 626C6F63

08BF 6B2E0D0A

08C3 46207373		DB	'F ssss,eeee,dd    : Fill memory block.',CR,LF

08C7 73732C65

08CB 6565652C

08CF 64642020

08D3 20203A20

08D7 46696C6C

08DB 206D656D

08DF 6F727920

08E3 626C6F63

08E7 6B2E0D0A

08EB 47207373		DB	'G ssss            : Goto memory.',CR,LF

08EF 73732020

08F3 20202020

08F7 20202020

08FB 20203A20

08FF 476F746F

0903 206D656D

0907 6F72792E

090B 0D0A

090D 49206472		DB	'I drv,bps         : Format disk.',CR,LF

0911 762C6270

0915 73202020

0919 20202020

091D 20203A20

0921 466F726D

0925 61742064

0929 69736B2E

092D 0D0A

092F 4A207373		DB	'J ssss,eeee       : Memory check.',CR,LF

0933 73732C65

0937 65656520

093B 20202020

093F 20203A20

0943 4D656D6F

0947 72792063

094B 6865636B

094F 2E0D0A

0952 4C206262		DB	'L bb              : Set bank base.',CR,LF

0956 20202020

095A 20202020

095E 20202020

0962 20203A20

0966 53657420

096A 62616E6B

096E 20626173

0972 652E0D0A

0976 4D207373		DB	'M ssss,eeee,dddd  : Move memory block.',CR,LF

097A 73732C65

097E 6565652C

0982 64646464

0986 20203A20

098A 4D6F7665

098E 206D656D

0992 6F727920

0996 626C6F63

099A 6B2E0D0A

099E 50206472		DB	'P drv,den,side    : Set disk parameter.',CR,LF

09A2 762C6465

09A6 6E2C7369

09AA 64652020

09AE 20203A20

09B2 53657420

09B6 6469736B

09BA 20706172

09BE 616D6574

09C2 65722E0D

09C6 0A

09C7 52207472		DB	'R trk,sec,dddd,c  : Read sector.',CR,LF

09CB 6B2C7365

09CF 632C6464

09D3 64642C63

09D7 20203A20

09DB 52656164

09DF 20736563

09E3 746F722E

09E7 0D0A

09E9 53207373		DB	'S ssss            : Change memory.',CR,LF

09ED 73732020

09F1 20202020

09F5 20202020

09F9 20203A20

09FD 4368616E

0A01 6765206D

0A05 656D6F72

0A09 792E0D0A

0A0D 57207472		DB	'W trk,sec,ssss,c  : Write sector.',CR,LF

0A11 6B2C7365

0A15 632C7373

0A19 73732C63

0A1D 20203A20

0A21 57726974

0A25 65207365

0A29 63746F72

0A2D 2E0D0A

0A30 58202020		DB	'X                 : Display register.',CR,LF

0A34 20202020

0A38 20202020

0A3C 20202020

0A40 20203A20

0A44 44697370

0A48 6C617920

0A4C 72656769

0A50 73746572

0A54 2E0D0A

0A57 0D0A		DB	CR,LF

0A59 20206262		DB	'  bb: Bank base address     '

0A5D 3A204261			' bps: Bytes per sector      ',CR,LF

0A61 6E6B2062

0A65 61736520

0A69 61646472

0A6D 65737320

0A71 20202020

0A75 20627073

0A79 3A204279

0A7D 74657320

0A81 70657220

0A85 73656374

0A89 6F722020

0A8D 20202020

0A91 0D0A

0A93 20202063		DB	'   c: Sector count.         '

0A97 3A205365			'  dd: Data.                 ',CR,LF

0A9B 63746F72

0A9F 20636F75

0AA3 6E742E20

0AA7 20202020

0AAB 20202020

0AAF 20206464

0AB3 3A204461

0AB7 74612E20

0ABB 20202020

0ABF 20202020

0AC3 20202020

0AC7 20202020

0ACB 0D0A

0ACD 64646464		DB	'dddd: Destination address   '

0AD1 3A204465			'eeee: End address.          ',CR,LF

0AD5 7374696E

0AD9 6174696F

0ADD 6E206164

0AE1 64726573

0AE5 73202020

0AE9 65656565

0AED 3A20456E

0AF1 64206164

0AF5 64726573

0AF9 732E2020

0AFD 20202020

0B01 20202020

0B05 0D0A

0B07 73737373		DB	'ssss: Start address.        ',CR,LF,'$'

0B0B 3A205374

0B0F 61727420

0B13 61646472

0B17 6573732E

0B1B 20202020

0B1F 20202020

0B23 0D0A24

0B26

0B26		;	( ﾚｼﾞｽﾀ名文字列 )
0B26

0B26 41204620	RGMSG:	DB	'A F  B C  D E  H L  '

0B2A 20422043			'A~'F~' B~'C~' D~'E~' H~'L~' '

0B2E 20204420			'IX   IY   SP   PC   I'

0B32 45202048

0B36 204C2020

0B3A 41274627

0B3E 20422743

0B42 27204427

0B46 45272048

0B4A 274C2720

0B4E 49582020

0B52 20495920

0B56 20205350

0B5A 20202050

0B5E 43202020

0B62 49

0B63 0D0A24		DB	CR,LF,'$'

0B66

0B66		;	* ﾓﾆﾀ機能呼び出し処理ｱﾄﾞﾚｽ ﾃｰﾌﾞﾙ *
0B66

0B66 AA01	FNCTBL:	DW	SETUP		;
 0: ﾓﾆﾀ再始動(命令行入力開始へ)
0B68 C307		DW	CICHR		;
 1: ｺﾝｿｰﾙから1文字(ﾊﾞｲﾄ)取得
0B6A 5D07		DW	COCHR		;
 2: ｺﾝｿｰﾙ1文字(ﾊﾞｲﾄ)表示
0B6C FE00		DW	MON		;
 3: (未定義)ﾓﾆﾀ開始
0B6E FE00		DW	MON		;
 4: (未定義)ﾓﾆﾀ開始
0B70 DE07		DW	LIST		;
 5: ﾌﾟﾘﾝﾀ1文字(ﾊﾞｲﾄ)出力
0B72 FE00		DW	MON		;
 6: (未定義)ﾓﾆﾀ開始
0B74 FE00		DW	MON		;
 7: (未定義)ﾓﾆﾀ開始
0B76 FE00		DW	MON		;
 8: (未定義)ﾓﾆﾀ開始
0B78 4D07		DW	MSGOUT		;
 9: ｺﾝｿｰﾙ文字列表示
0B7A 4B06		DW	FLININ		;
10: ｺﾝｿｰﾙから行入力
0B7C B207		DW	CIST		;
11: ｺﾝｿｰﾙ入力状態取得
0B7E

0B7E		;	* I/O初期化値 *
0B7E

0B7E		;	( 非同期ｼﾘｱﾙ初期化値 )
0B7E

0B7E 64		ASPR:	DB	01100100B	;
0C-A: 受信許可,送信許可,8ﾋﾞｯﾄ+ﾊﾟﾘﾃｨなし+1ｽﾄｯﾌﾟ ﾋﾞｯﾄ
0B7F 64			DB	01100100B	;
1C-A: 受信許可,送信許可,8ﾋﾞｯﾄ+ﾊﾟﾘﾃｨなし+1ｽﾄｯﾌﾟ ﾋﾞｯﾄ
0B80 02			DB	00000010B	;
0C-B: PS=0,DR=0,SS2～0=2 (6.144MHz時÷640で9600bps)
0B81 01			DB	00000001B	;
1C-B: PS=0,DR=0,SS2～0=1 (6.144MHz時÷320で19200bps)
0B82 00			DB	00000000B	;
0S  : 受信割り込み禁止,送信割り込み禁止
0B83 00			DB	00000000B	;
1S  : 受信割り込み禁止,送信割り込み禁止
0B84

0B84		;	( ﾀｲﾏ初期化値 )
0B84

0B84 6400	TMPR:	DW	100		;
0D: 初期ｶｳﾝﾀ値
0B86 000C		DW	T06M		;
0R: 6.144MHz時10msｶｳﾝﾀ値
0B88 22			DB	00100010B	;
XC: 割り込み:T1許可,T0禁止,ｶｳﾝﾄ:T1許可,T0禁止
0B89 6400		DW	100		;
1D: 初期ｶｳﾝﾀ値
0B8B 0078		DW	T16M		;
1R: 6.144MHz時100msｶｳﾝﾀ値
0B8D

0B8D		;	( DMA初期化値 )
0B8D

0B8D 43		DMAPR:	DB	F1D		;
1IL: DMA1I/O FDCﾃﾞｰﾀ ﾚｼﾞｽﾀ
0B8E 00			DB	00H		;
1IH: 同上(上位ｱﾄﾞﾚｽ=0)
0B8F 0040		DW	1024*16		;
1BC: DMA1転送ﾊﾞｲﾄ数=16Kﾊﾞｲﾄ(仮)
0B91 00			DB	00000000B	;
DXS: DMA1,0動作禁止
0B92 00			DB	00		;
DXM: DMA0転送先+1,転送元+1,ｻｲｸﾙ ｽﾁｰﾙ(仮)
0B93 08			DB	00001000B	;
DWR: ｳｪｲﾄなし,/DREQ1=ｴｯｼﾞ
0B94

0B94		;	* FDD割り当てﾋﾞｯﾄ値ﾃｰﾌﾞﾙ *
0B94

0B94 08040201	DSKTBL:	DB	08H,04H,02H,01H	;A:  8B, B:  8A, C:3.5B, D:3.5A

0B98 04080102		DB	04H,08H,01H,02H	;A:  8A, B:  8B, C:3.5A, D:3.5B

0B9C 02010804		DB	02H,01H,08H,04H	;A:3.5B, B:3.5A, C:  8B, D:  8A

0BA0 01020408		DB	01H,02H,04H,08H	;A:3.5A, B:3.5B, C:  8A, D:  8B

0BA4

0BA4			ORG	1000H-1		;

0FFF

0FFF 00			DB	0

1000		CPMTOP	EQU	$		;
CP/M(CCP+BDOS+BIOS)ﾃﾞｰﾀ先頭ｱﾄﾞﾚｽ
1000

1000

1000		;	[ 変数 ]
1000

1000			ORG	0FF00H		;

FF00

FF00		STACK	EQU	$		;
ｽﾀｯｸ ﾎﾟｲﾝﾀ初期ｱﾄﾞﾚｽ
FF00		;

FF00		P1	EQU	$		;
初期化領域先頭ｱﾄﾞﾚｽ
FF00		;

FF00		REGSV	DS	26		;
RST7時ﾚｼﾞｽﾀ保存領域
FF1A		PRNFLG	DS	1		;
印字要求ﾌﾗｸﾞ(0=無し,-1=有り)
FF1B		PRNRDY	DS	1		;
ﾌﾟﾘﾝﾀ出力可ﾌﾗｸﾞ(0=不可,-1=可)
FF1C		FDCFLG	DS	1		;
FDC動作中ﾌﾗｸﾞ(0=作業無し,0以外=作業中)
FF1D		SECCNT	DS	1		;
連続読み書きｾｸﾀ数
FF1E		T1M0	DS	1		;
ﾍｯﾄﾞ ﾛｰﾄﾞ持続ﾀｲﾏ(100ms)
FF1F		CHRCNT	DS	1		;
行入力文字(ﾊﾞｲﾄ)数
FF20		LINBF	DS	82		;
(命令)行入力ﾊﾞｯﾌｧ
FF72		WORK	DS	1		;
物理ﾚｺｰﾄﾞ長(PRL)
FF73		DRVTBL	DS	4		;
ﾄﾞﾗｲﾌﾞ ﾋﾞｯﾄ変換ﾃｰﾌﾞﾙ
FF77		;

FF77		P2	EQU	$		;
初期化領域最終ｱﾄﾞﾚｽ+1
FF77		;

FF77		PPTSV	DS	1		;
拡張出力ﾎﾟｰﾄ値
FF78

FF78			END