知識ベース

コモドールDOS

Commodore DOSはCBM DOSとも呼ばれ、Commodoreの8ビットコンピューターで使用されるディスクオペレーティングシステムです。ディスクからコンピューターのRAMにロードされ、そこで実行される他のほとんどのDOSとは異なり、CBM DOSはドライブ内で実行されます。DOSはドライブ内のROMチップに常駐し、1つ以上の専用MOS 6502ファミリーによって実行されます。 CPU。したがって、コモドール8ビットコンピューターとそのディスクドライブ間のデータ転送は、通常のディスク/ホスト転送よりもローカルエリアネットワーク接続により似ています。

CBM DOSバージョン

Commodore DOSの少なくとも7つの明確に番号付けされたバージョンが存在することが知られています。次のリストに、バージョン番号と関連するディスクドライブを示します。特に明記しない限り、ドライブは5¼インチの形式です。 「lp」コードは「ロープロファイル」ドライブを示します。モデル番号が15で始まるドライブは、Commodore独自のCBM-488シリアル(TALK / LISTEN)プロトコルを介して接続し、他のすべてはパラレルIEEE-488を使用します。

  • 1.0 – 2040および3040フロッピードライブにあります
  • 2.0 – 4040および3040フロッピードライブにあります
  • 2.5 – 8050フロッピードライブにあります
  • 2.6 – SX-64、1551、2031(+ "lp")、4031フロッピードライブに組み込まれたものを含む1540、1541にあります
  • 2.7 – 8050、8250(+ "lp")、およびSFD-1001フロッピードライブにあります
  • 3.0 – 1570、外部1571、および8280フロッピードライブ(8280:8インチ)、および9060および9090ハードドライブに搭載
  • 3.1 – C128DCRコンピューターの組み込み1571ドライブにあります
  • 10.0 – 1581(3½インチ)にあります

バージョン2.6は、C64システムの一部として1541で使用されているため、最も一般的に使用され、既知のDOSバージョンでした。

相対的なファイルのバグを修正した1571の改訂ファームウェアもV3.0として識別されました。したがって、2つのバージョンをバージョン番号だけで区別することはできません。

技術概要

1541ディレクトリとファイルの種類

1541 Commodoreフロッピーディスクには、フラットな名前空間(サブディレクトリなし)に最大144個のファイルを含めることができます。ディレクトリは、ハブから35トラック片面ディスクの端までの中間にある予約済みトラック18に保存されます。ファイル名の長さは最大16バイトで、理論的に一意です。ディレクトリ構造で直接アクセス方法を使用することにより、ファイルの名前を別のファイルに変更できますが、そのようなファイルへのアクセスは困難または不可能な場合があります。同じ名前のファイルは、通常、ファイルに通知するか視覚的に管理する以外の目的には使用されません。たとえば、The Final Cartridge IIIで使用されている人気のあるトリックの1つは、DEL タイプの「----------------」という名前のファイルをディレクトリに追加することでした。グループを形成するためにそれらの線の周りに再配置されます。多くのゲーム開発者、ウェアーズグループメンバー、デモシーンハッカーも、より巧妙なカスタムディレクトリエントリを使用していました。

ファイル名にはシフトされたスペース文字($ A0)が含まれる場合があり、ディレクトリリストがBASICから表示されている場合、$ A0文字を超えるファイル名の部分は、ファイル名の最初の部分と引用符。これにより、BASICはそれを完全なファイル名の一部とは見なしません。この機能は、SAVE "PROGRAM⇧Shift–space Commodore–DUDE"、8,1などのディレクトリエントリを作成するために使用できます。これは、たとえば32 "PROGRAM"、8,1 PRGとしてディレクトリリストに表示されます。ユーザーがカーソルを行の先頭に移動し、ファイルサイズ全体にLOADという単語を入力してRETURNキーを押すと、BASICはそれをLOAD "PROGRAM"、8,1 ...として解釈し、プログラムをメモリにロードします。 。コンピューターはLOAD後のコマンドを無視するため、コロンまたはセカンダリアドレスの後は実行されません。または、ユーザーは⇧Shift–RUN / STOPを押して、プログラムを自動的にLOADおよびRUNできます。

ファイル名に埋め込まれたヌルバイトは、BASICによるロード後にリストを中断します。 NULLバイトが3つある場合、BASICを使用してリストするのが難しくなります。多くの機械語プログラマーは、BASICプログラマーがコードにアクセスして改ざんするのをより困難にするために、ヌルバイトを実験します。

BASICでは、LOAD "$ 0"、8(またはデュアルドライブの場合はLOAD "$ 1"、8)に続いてLISTを使用して、実行不可能な擬似BASICプログラムとしてディレクトリにアクセスできます。最初の行には、0または1の行番号(ドライブ番号を示す)があり、ディスクの名前とID、および作成されたDOSバージョンの略記コードが反転表示されます(コードは、 DOSバージョンは互換性のないディスク形式を使用します。「2A」はほとんどの5.25インチDOSバージョンで使用され、「3D」は-3.5インチで使用されます1581)。この後の行には、ファイルのサイズ(ディスクブロック単位)が疑似「行番号」としてあり、その後に引用符で囲まれたファイル名と3文字のタイプコードが続きます。最後の行は、ディスク上の未割り当てブロックの数(再び「行番号」として)を示し、その後に「BLOCKS FREE」という語が続きます。

Commodore 64では、LOAD "$"、8,1と入力すると、ディレクトリをBASIC RAMにロードする代わりに、画面がゴミであふれます。これは、ドライブがディレクトリに$ 0401(1025)のロードアドレスを割り当てるためです。これは、コモドールPETのBASICの開始に相当しますが、C64のデフォルトの画面メモリに対応します(最初の行の2番目の文字画面の)。

LOAD "$"、8コマンドでディレクトリを表示すると、メモリ内のBASICプログラムが上書きされます。 DOSウェッジと、Epyx FastLoad、Action Replay、The Final Cartridge IIIなどのさまざまなサードパーティカートリッジおよびエクステンダーにより、現在のBASICプログラムを破壊することなくディレクトリを画面メモリにロードする特別なコマンドを使用してディスクディレクトリを表示できます。 Commodore BASICの一部のバージョンには、同じ機能を実行するDIRECTORYまたはCATALOGコマンドが含まれています。

次のファイルタイプがサポートされています。

SEQシーケンシャルファイルは、最初から最後まで直線的に読み取ることができるデータファイルです。 SEQファイルは一般に、ワードプロセッサまたは他のそのようなエディタによって作成されたドキュメントまたはテキストファイルを保存するために使用されます。順次ファイルは、特殊な内部構造を持たないという点で、LinuxまたはUNIXのフラットファイルに似ています。 UNIXライクなオペレーティングシステムにはlseekカーネルコールに類似したものがないため、シーケンシャルファイル内の任意の場所に配置することはできません。 PRG PRGファイルには通常、実行可能プログラムコードが含まれていますが、データファイルにも使用できます。 PRGの最初の2バイトは、カーネルの「ロードファイル」ルーチンによって読み取られ、ロードアドレスを決定するために使用されます(リトルエンディアン形式で格納されます)。 REL相対ファイルは、レコード指向のアクセスを可能にするために、サイドセクターと呼ばれるインデックスメカニズムが存在する、シーケンシャルファイルタイプのバリエーションです。レコードのサイズは最大254バイトで、1から始まる基数でアドレス指定され、ファイルの任意の部分への真のランダムアクセスを許可します。 USRユーザー指定のファイルは、順次ファイルの内部構造と同じ内部構造を持っています。このファイルタイプに対するCommodoreの当初の目的は、DOSの開発を容易にすることでした。これは、ファイルの内容をドライブのマイクロプロセッサで実行するためにドライブバッファにコピーできるためです。このファイルタイプを使用したプログラムはほとんどありません。非標準の低レベルのディスク構造を使用する一部のアプリケーションでは、データをUSR形式で保存します。これは、ユーザーに「コピーや削除を試みないでください」という表示と見なされるようになりました。最も顕著なのは、GEOSの「VLIR」ファイルがUSRファイルとして表示されることです。 DEL構造的にシーケンシャルファイルに類似した、文書化されていない内部使用ファイルタイプ。このファイルタイプの作成は、ディスクディレクトリを直接操作することにより達成する必要があります。

ディレクトリリストのファイルタイプの先頭にアスタリスク(*)が存在する場合(たとえば、* SEQ)、書き込み後にファイルが適切に閉じられなかったことを示します。書き込み用に開かれたファイルを閉じるようにドライブが命令されると、関連するバッファーがディスクにフラッシュされ、使用されているブロックを正確に反映するようにブロック可用性マップ(BAM)が更新されます。プログラムのクラッシュやその他の問題(ユーザーがファイルを開いているときにディスクを削除するなど)の結果、「孤立ファイル」(「ポイズン」または「スプラット」ファイルとも呼ばれる)が発生した場合、バッファーはフラッシュされず、BAMディスク使用量を正確に反映しないため、ディスクが破損する危険があります。有害なファイルには通常アクセスできません(ただし、「変更」モードで開くことができます)。DOSスクラッチコマンドを使用してファイルを削除しようとすると、クロスリンクなどのファイルシステムの破損が発生する可能性があります。これらのファイルの1つを削除する唯一の実用的な方法は、ファイルを「変更」モードで開く(および修正する)か、ディスクを検証する(以下のDOS検証コマンドを参照)ことです。後者はBAMを再構築し、有害なファイルを削除しますディレクトリからの参照。悪名高い置換と保存のバグにより、スプラットファイルが作成される可能性があります。

* DELは、削除されたファイルのディスク上のディレクトリエントリに書き込まれる特別なタイプです。このようなファイルは、通常のディレクトリリストには表示されず、それらのデータブロックとディレクトリエントリは、後で作成されるファイルによって再利用されます。一部のユーティリティプログラムでは、データブロックとディレクトリエントリが他のファイルによってまだ上書きされていない場合、そのようなファイルの「削除」を許可します。 DELファイルは、一般的にバナーリストまたはコメントセクションをディレクトリリストに挿入するために使用されます。

後にが付いたファイルタイプ(PRG など)は「ロック」されており、削除できません。ただし、読み取り用に開くことはできます。このステータスを明示的に設定またはクリアできるCommodore DOSコマンドはありませんが、多くのサードパーティユーティリティがこれを実行できるように作成されています。これらのユーティリティは、通常、ダイレクトアクセスコマンドを使用してディレクトリを読み取り、生データに必要な変更を加えてから、変更をディスクに書き戻します。

ファイルアクセス

ファイルへのアクセスは、主にホストコンピューターの問題です。コンピューターのカーネルROMには、ファイルにアクセスするために必要なプリミティブルーチンが含まれており、BASIC ROMには、BASIC構文を使用したファイルアクセスのための高レベルの抽象化が含まれています。 DOS自体に関係するコンポーネントは、ファイル名の解析とセカンダリアドレスです。このセクションでは、完全を期すために必要なBASICコマンドの概要を説明します。

Commodoreディスクユニットでファイルを開くには、他の環境でのファイルを開く手順に漠然と類似したいくつかのパラメーターの処理が必要です。 DOSはドライブのコントローラーで実際に実行されているため、ファイルを開くシーケンスは、明確な解釈を保証するのに十分な情報をドライブに渡す必要があります。シーケンシャルファイルに書き込むBASICの典型的なステートメントは次のとおりです。

OPEN 3,8,4、 "0:ADDRESSBOOK、S、W"

OPEN動詞に続くパラメーターは次のとおりです。

3このパラメーター( ファイル番号 )は、 コンピューターのオペレーティングシステム内で開かれたファイルを論理的に識別し、UNIXライクなオペレーティングシステムのファイル記述子に類似しています。ドライブに送信されることはないため、ドライブのオペレーティングシステムが認識したり使用したりすることはありません。ファイル番号は1から254までの範囲で、プログラマーによって割り当てられ、複数のファイルを同時に開く場合は一意でなければなりません。ファイルが開かれると、すべてのプログラムの入出力手順でファイル番号が使用されます。アセンブリ言語プログラムでは、この値はLA(論理アドレス)と呼ばれることがよくあります。これは、ファイル番号が格納されているメモリの場所を指すニーモニックに由来する略語です。ファイル番号が127を超えると、システムはキャリッジリターンごとに余分なラインフィードを書き込みます(例として、ドキュメントのダブルスペースに便利です)。8このパラメーター、 デバイス番号は、コンピューターに接続されている特定の周辺機器を識別します。デバイス0〜3は、それぞれキーボード、テープカセット、RS-232インターフェイス、およびビデオディスプレイをアドレス指定します。これらはすべて、カーネルROMによって直接制御されます。デバイス番号4以上。周辺バスに接続されているプリンタやディスクドライブなどのデバイス。ディスクドライブの場合、デバイス番号はユニット内のドライブメカニズムではなく、ユニットのコントローラを指します。慣例により、システム上の最初のディスクドライブユニットにはデバイス番号8、2番目のドライブ(存在する場合は9)、最大15まで(8つのディスクドライブが接続されている場合)があります。デバイス番号スキームは、Commodore PET / CBMモデルで使用されたIEEE-488または汎用インターフェースバス(GPIB)から派生しました。アセンブリ言語プログラムでは、この値は、デバイス番号が格納されているメモリの場所のニーモニックから、FAまたはPA(物理アドレス)と呼ばれることがよくあります。 4このパラメーター、0〜15の範囲のセカンダリアドレスは、デバイスのコントローラーで確立された特定の通信チャネルを指し、周辺バスで「通話」または「リッスン」するように命令されたときにデバイスに渡されます。 。ファイル番号と同様に、二次アドレスはプログラマーによって決定され、問題のデバイスに対して一意でなければなりません。 0から14までの範囲はデバイスとの間でデータを渡すために使用されますが、15は「コマンドチャネル」と呼ばれ、デバイスのコントローラーにコマンドを発行するために使用されます(ディスクファイルの名前を変更するなど)デバイスはそのような操作をサポートできます。ディスクドライブでは、セカンダリアドレス0〜14はコントローラー内のバッファーにマップされるため、特定のディスク上の特定のファイルとの通信が確立されます。上記のように、ドライブはファイル番号を認識しないため、同時に開いている複数のファイルを区別するためにセカンダリアドレスのみを使用できます。一方、ホストオペレーティングシステムはセカンダリアドレスを認識しません。ファイルにアクセスするたびにドライブに送信されますが、ホストによって使用されることはありません。アセンブリ言語プログラムでは、この値はしばしばSA(セカンダリアドレス)と呼ばれます。 コマンド文字列 "0:ADDRESSBOOK、S、W"パラメーターは、コモドールのドキュメントでコマンド文字列として正式に参照されており、アクセスされるデバイスのコントローラーによって解釈されます。ディスクドライブユニットの場合、正式なコマンド文字列構造は、ドライブメカニズム番号(0 :、デバイス番号と混同しないため)、ファイル名(ADDRESSBOOK)、ファイルタイプ(S、この例では連続)およびアクセスモード(W、この例では書き込み用にオープン)。実際には、これらのパラメーターの一部は省略される場合があります。ファイルを読み取り用に開く場合は、ファイル名のみが必要です。ドライブ番号は、ディスク装置のコントローラーに接続されているドライブ機構を識別し、複数の機構を制御できるSCSIコントローラーの論理装置番号に類似しています(たとえば、1980年代にST-412 / ST-506ハードドライブで動作するように開発されたOMTI SASIコントローラ。フロッピーディスクユニットでは、最初のメカニズムはドライブ0:で、2番目のメカニズムは1:です。単一のドライブフロッピーユニットと通信する場合、ドライブ番号を省略するのはかなり一般的な方法です。0:はそのようなユニットのデフォルトであるため、番号を省略するとDOSでいくつかのあいまいなバグが引き起こされる可能性があるため、推奨される方法ではありません(コロンだけで0:と同等であり、これらのバグを回避するには十分です。この規則の例外は、ドライブ番号が「論理ユニット」(単一の物理ドライブ上に作成された仮想ドライブ)を指すLt. Kernalハードディスクサブシステムであり、4または10などの構文が必要な場合です。開くファイルが論理ユニット0にありませんでした(デュアルフロッピーユニットのドライブメカニズム0に相当)。

LOADおよびSAVEコマンドを使用して、ファイルをロードおよび保存することもできます。ここでもファイル名指定子を使用できます。たとえば、SAVE "FILE"、8はBASICプログラムをPRG(プログラム)ファイルに保存し、SAVE "0:FILE、SEQ、WRITE"、8,1はBASICプログラムを順次ファイル。セカンダリアドレスが指定されていないか、0として指定されている場合(たとえば、LOAD "FILE"、8)、ファイルはBASICメモリ領域(C64ではデフォルトで$ 0801から開始)から保存/ロードされます。セカンダリアドレスがゼロ以外の値として指定されている場合(たとえば、LOAD "FILE"、8,1)、プログラムはファイル自体(PRGヘッダーの最初の2バイトであるPRGヘッダー)で指定されたアドレスからロードされます。 file)—この形式のコマンドは、マシンコードプログラムをロードする際により一般的です。

このマシンは、インストールされているメモリ拡張に応じて、いくつかの異なる場所でBASIC RAMを起動できるため、VIC-20でロードリロケーションが最初に導入されました。古いCommodore PETシリーズは再配置をサポートしていなかったため、LOAD "FILE"、8およびLOAD "FILE"、8,1は同じ効果があります。ファイルは保存元と同じメモリ領域にロードされます。ホストで負荷の再配置が発生します。これは、デバイス内部でのみ使用されるセカンダリアドレスについて上記で述べたことの例外です。 PETはファイルを再配置できないため、後のCommodoreマシンで作成されたBASICプログラムは、セクターエディターを使用して変更し、ヘッダーバイトを変更する必要があります。また、PETの組み込み機械言語モニターを使用して、BASICプログラムのロード後にリンクアドレスを変更することもできます。

コマンドLOAD "*"、8,1は、ファイルで指定されたメモリ位置から始まるディスク上の最初のプログラムをロードします。これは、プラットフォームで最も人気のあるロードコマンドの1つです。たとえば、商用ソフトウェアの大部分を起動する方法です。注目すべきは、そのディスク上の他のファイルが以前にアクセスされていない場合にのみ、ワイルドカード展開が最初のカタログ名を選択するという事実です。最後に使用したファイルの名前はメモリに保持され、後続のLOAD "*"、8,1コマンドは最初ではなくそのファイルをロードします。 (ただし、LOAD "0:*"、8,1またはLOAD ":*"、8,1は常にディスク上の最初のファイルをロードします。)

2ドライブユニットのディスクのディレクトリは、LOAD "$ 0"、8およびLOAD "$ 1"、8としてアクセスされます。 "0:$"および "1:$"はディレクトリにアクセスしませんが、1つのドライブまたはその他の名前はたまたま「$」という名前です。コロンとテンプレートを追加することにより、部分ディレクトリをロードできます。たとえば、LOAD "$ 0:K * = P"、8は、名前が文字Kで始まりPRGタイプのファイルのみを表示する部分ディレクトリをロードします;このような部分ディレクトリにはすべて、最初のディスク名行と最後の「BLOCKS FREE」行が含まれています。

置換保存のバグ

Commodore DOSは、「Save-with-Replace」コマンドも提供します。このコマンドを使用すると、既存のファイルを最初にスクラッチすることなく、既存のファイルの上にファイルを保存できます。これは、OPENまたはSAVE操作中にファイル名の前に@記号を追加することにより行われました-たとえば、SAVE "@MY PROGRAM"、8。 4040ドライブから始まって、コマンドの実装にバグがあるという噂が何年も広まりました。最初、これは一部の解説者によって否定されました。バグの存在を証明する賞が提供されました。 1985年初頭のCompute!雑誌は読者にこのコマンドの使用を避けるよう助言しました。その年、さまざまな著者が、Save-with-Replaceバグが本物であることを証明し、それをトリガーする方法を含む記事を独立して公開しました。

影響を受けるデバイスには、シングルドライブ1541とデュアルドライブ4040が含まれます。 8050と8250は問題を示しませんでした。それは、後にドライブ番号のない任意のディスク操作は、バグにつながるのに十分であることが示されたものの、保存時にドライブ番号:一部の解説はバグが常に明示的に0を指定することで回避することができ示唆しました。このバグは、影響を受けるDOS実装が8050などの以前のCommodore PETデュアルドライブに含まれていたDOSの修正バージョンであるという事実に由来します。これにより、シングルドライブシステムに「ファントムドライブ1:」が作成され、ある条件下では不必要なバッファ。 Save-with-Replaceコマンドは5つのドライブバッファーをすべて使用し、「ファントム」バッファーの割り当て方法が仕様を満たさなかったため、特定の条件下でスクランブルデータがディスクに書き込まれました。

1986年9月、Philip A. Slaymakerは、バグの原因を詳しく説明し、1541ドライブROMにパッチを提供する記事を公開しました。 EPROMバーナーを備えたリーダーは、ドライブにスワップ可能な独自のパッチROMを作成できます。コモドールは、Slaymakerの発見を知っており、元の1541のROMの公式アップデートを発行したことはありませんが、1541 ROMのリビジョン5、1541-cおよび1541-IIドライブのROMのバグを修正しました。 。 Commodoreではサポートされていませんが、EPROMを使用して1541-IIファームウェア(1541-cのファームウェアではない)を元の1541ドライブでも使用できることがわかっています。これにより、そのドライブのバグも修正されます。

コマンドチャンネル

前述のように、Commodore DOS自体は、ファイルへのアクセスに使用されるような構文を使用して、「コマンドチャネル」経由でアクセスされます。 DOSにコマンドを発行し、コマンドへの応答で生成されたステータスメッセージとエラーメッセージを取得するには、15をセカンダリアドレスとして使用してデバイスにファイルを開きます。次に例を示します。

OPEN 1,8,15

デバイスの状態を取得して表示するには、次のようにコーディングできます。

OPEN 1,8,15:INPUT#1、E、E $、T、S:PRINT E、E $、T、S:CLOSE 1

上記の例では、Eはエラー番号を保持し(存在する場合、エラーが存在しない場合はゼロになります)、E $はエラーの簡潔なテキスト記述であり、Tはエラーが発生したディスクトラックを表し、Sエラーが参照するトラックT上のセクターになります。エラーが存在しない場合、00、OK、00、00に相当するものが4つの変数に返されます。 INPUT#は実行モード専用の動詞であることに注意してください。また、多くのディスクコマンドを発行するプログラムでは、プログラムの開始時にデバイスのコマンドチャネルにファイルを開き、プログラムが終了するまでファイルを閉じないのが一般的です。

Commodore BASICバージョン4.0以降では、上記のコードの代わりにドライブステータスを取得するために使用できるDS $と呼ばれる擬似変数が提供されます。この予約変数は、以前のバージョンのBASICでは使用できないため、上記のようにコマンドチャネルを手動で読み取る必要があります。電源投入またはリセットの直後に、DOSリビジョンが返されることに注意してください。たとえば、1541は73、CBM DOS V2.6 1541,00,00を返します。エラーコード73はすべてのドライブモデルに共通であり、ドライブが電源オン状態にリセットされたかどうかを判断するために使用できます。

DOSコマンド

コマンド説明 BASIC 1.xおよび2.xの実装 DOSウェッジの実装 BASIC 3.0+の実装
新着ディスクをフォーマットし、使用のために準備し、ディスクに含まれているデータを削除します。 2文字の識別子パラメーターを省略すると、フォーマット済みのディスク上のすべてのファイルをすばやく削除します。 OPEN 15,8,15、 "N0: ディスク名識別子 ":CLOSE 15 @ N0: ディスク名識別子 HEADER「 ディスク名 」、 識別子
スクラッチディスクからファイル(またはワイルドカードマッチングを使用して複数のファイル)を削除します。 OPEN 15,8,15、 "S0: ファイル名 ":CLOSE 15 @ S0: ファイル名 SCRATCH「 ファイル名
リネームディスク上のファイルの名前を変更します。新しい名前が最初に来ることに注意してください(BASIC 3.0+コードを除く)! OPEN 15,8,15、 "R0: 新しい名前 = 古い名前 ":CLOSE 15 @ R0: 新しい名前 = 古い名前 RENAME " 古い名前 " TO " 新しい名前 "
初期化ドライブをリセットし、ディスクBAMを内部メモリに読み込みます。ディスクが同じIDを持つ別のディスクと交換される場合を除き、ドライブは通常これを単独で行うため、ほとんど必要ありません。 OPEN 15,8,15、 "I0:":CLOSE 15 @ I0: DCLEAR(BASIC 7.0+のみ)
検証 BAMをディスクディレクトリと調整し、すべての使用済みブロックを割り当て、ファイルで使用されていないすべてのブロックを解放し、閉じられていないファイルをすべてディレクトリから削除します。 MicrosoftオペレーティングシステムのCHKDSK / ScanDiskツールと同等。 OPEN 15,8,15、 "V0:":CLOSE 15 @ V0: 収集する
コピー同じディスク(または同じ2ドライブユニットの別のディスク)のファイルを異なるファイル名で複製します。新しい名前が最初に来ることに注意してください(BASIC 3.0+コードを除く)! 2ドライブユニットなしで別のディスクに複製するには、ユーティリティプログラムを使用する必要があります。 OPEN 15,8,15、 "C0: 新しい名前 = 0: 既存の名前 ":CLOSE 15 @ C0: 新しい名前 = 0: 既存の名前 COPY " 既存の名前 " TO " 新しい名前 "
複製するディスク全体を複製します。 2ドライブユニットでのみ利用可能です。それ以外の場合は、代わりにユーティリティプログラムを使用する必要があります。ターゲット(!)ドライブ番号が最初に来て、次にソースドライブ番号が来ます(BASIC 3.0+コードを除く)。 OPEN 15,8,15、 "D1 = 0":CLOSE 15 @ D1 = 0 バックアップD0からD1

RELativeタイプのファイル(RECORD#)、いくつかのブロックレベルの直接アクセスコマンド(BLOCK-READ、BLOCK-WRITE、BUFFER-POINTER)、ブロック管理(BLOCK-ALLOCATE、BLOCK-FREE)でシークするためのコマンドもあります。ドライブのメモリ操作およびドライブのプロセッサでのプログラムコードの実行(MEMORY-WRITE、MEMORY-READ、MEMORY-EXECUTE、BLOCK-EXECUTE)およびユーザー定義可能な機能(USERおよび&コマンド)。理論的にユーザー定義可能な関数の一部は、1.0以降のDOSバージョンの新しい機能にアクセスするために再割り当てされました。