NEXTOR DDG 04 04 03
From Z80 Machines Wiki
4.4.3. DRV_INIT(4136h)
これがドライバ初期化ルーチンです。これはカーネルによって2回呼び出されます。
1.情報収集のための最初の実行
入力:A = 0 B =利用可能なドライブレターの数 HL = 3ページの割り当て可能作業域の最大サイズ 出力:A =制御ドライブユニットの数(ドライブベースのドライバのみ) HL = 3ページの必要作業域のサイズ DRV_TIMIをタイマー割り込みにフックする必要がある場合はCy = 1、それ以外の場合は0
2.作業域およびハードウェアの初期化のための2回目の実行。
入力:A = 1 B =このコントローラに実際に割り当てられているドライブレターの数
このルーチンの2回目の実行から開始して、GWORKルーチンは、SLTWRKで現在のスロット用に予約されているスペースのアドレスを取得するためにいつでも使用できます。ドライバーは3ページ目の作業領域に関して次のように行動するべきです:
- 8バイト以下が必要な場合、このルーチンは最初の実行時にHL = 0を戻し、SLTWRKでこのスロット用にシステムによって予約されている8バイトのスペースを作業域として使用する必要があります。
XOR A EX AF,AF' XOR A LD IX,GWORK CALL CALBNK ;IXによって指し示される8バイトのスペースを使用してください
- 8バイト以上が必要な場合は、このルーチンは必要なスペースをHLで返し、SLTWRKでこのスロット用にシステムによって予約されているスペースの最初の2バイトから、割り当てられたスペースへのポインターを取得する必要があります。
XOR A EX AF,AF' XOR A LD IX,GWORK CALL CALBNK LD L,(IX) LD H,(IX+1) ;HLで指し示されるスペースをワークエリアとして使用してください
次の点にも注意してください。
- 最初の実行で使用可能なページ数より多くのページ3作業領域が要求された場合、2番目の実行は行われず、ドライブは割り当てられず、DRV_TIMIはタイマー割り込みにフックされません。つまり、Nextorは関係するコントローラを無視します。必要な作業域のサイズは、常に使用可能な限度内でなければなりません。
- ドライブベースのドライバの場合、オペレーティングシステムは、ドライバユニットと同じ数のドライブレターをドライバに割り当てます。ただし、使用可能なドライブレター数よりも多いドライブデバイスがある場合は、できるだけ多くのドライブが割り当てられ、初期化手順は通常どおり続行されます。これはデバイスベースのドライバにも当てはまりますが、Nextorは常にこれらのドライバに2つのドライブレターを割り当てようとします。
- ドライブベースのドライバの場合:MSX-DOSとは異なり、ドライバにゼロのドライバユニットがある場合でも、(要求された場合は)タイマ割り込みルーチンが実行されます。