NEXTOR DDG 04 04 03

From Z80 Machines Wiki
Jump to: navigation, search

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とは異なり、ドライバにゼロのドライバユニットがある場合でも、(要求された場合は)タイマ割り込みルーチンが実行されます。