コンピュータプログラミング において、自己再配置プログラムとは、実行時にアドレス依存の命令とデータを再配置するプログラムであり、そのため任意のアドレスでメモリにロードすることができます。 [1] [2]多くの場合、自己再配置コードは自己変更コードの一種でもあります。
概要
自己再配置は、プログラムが外部ストレージからメイン メモリにコピーされるときにリンカー-ローダーによって使用される再配置プロセスに似ています。違いは、再配置を実行するのはオペレーティング システムまたはシェルのローダーではなく、ロードされたプログラム自体である点です。
自己再配置の 1 つの形式は、プログラムが命令のコードを単一のコンピュータのメイン メモリ内のある一連の場所から別の一連の場所にコピーし、その後プロセッサ制御をメモリのソース場所にある命令からメモリの宛先場所にある命令に転送するときに発生します。したがって、プログラムのアルゴリズムによって操作されるデータは、プログラムを定義するバイト シーケンスです。
静的自己再配置は通常、ロード時(オペレーティングシステムがソフトウェアをロードして制御を渡した後、初期化が完了する前)に発生しますが、実行時の後の段階でプログラムの構成を変更するときにも発生することがあります。[3] [4]
例
ブートローダー
たとえば、自己再配置は、IBM PC 互換機などのアーキテクチャ上のオペレーティング システムのブートストラップの初期段階でよく使用されます。この段階では、低レベルのチェーンブート ローダー(マスター ブート レコード(MBR)、ボリューム ブート レコード(VBR)、 DOSなどのオペレーティング システムの初期ブート段階など) が、次の段階をメモリにロードするために、自身を所定の場所から移動します。
CP/M 拡張機能
CP/Mでは、デバッガのダイナミックデバッグツール(DDT)は、プログラムが実行される一時プログラム領域(TPA)を最大化するために、ページ境界の再配置を通じて利用可能なメモリの先頭に動的に再配置しました。[5] [6]
1988年、 Zシステムの代替コマンドラインプロセッサZCPR 3.4は、埋め込みスタブを通じて自己再配置可能な、いわゆるタイプ4プログラムを導入しました。 [7] [8] [9] [10] [11]
x86 DOS ドライバ
DOSでは、アプリケーションで使用できるメモリを最大化するために、より高度なドライバや常駐システム拡張(RSX)、または終了して常駐するプログラム(TSR) によって、外部から提供される「高」ローダー ( LOADHIGH / HILOAD、INSTALLHIGH / HIINSTALL、DEVICEHIGH / HIDEVICEなど[12] DOS 5 以降)よりも効率的に自分自身を上位メモリの「高」にロードすることで、アプリケーションで使用できるメモリを最大化するために、自己再配置が使用されることもあります。これは、オペレーティング システムがロードされるドライバの内部動作を認識していないため、初期化コードを含むブロックとしてドライバ全体を保持できる十分な大きさの空きメモリ領域にドライバをロードする必要があるためです。たとえ初期化コードが初期化後に解放されるとしてもです。TSR の場合、オペレーティング システムはプログラム セグメント プレフィックス(PSP) と環境セグメントも割り当てる必要があります。[13]これにより、ドライバが最適な空きメモリ領域にロードされなかったり、上位にロードされなくなったりする可能性があります。これとは対照的に、自己再配置ドライバはどこにでも(コンベンショナルメモリを含む)ロードでき、その(通常ははるかに小さい)常駐部分のみを上位メモリの適切な空きメモリ領域に再配置できます。さらに、高度な自己再配置TSRは(オペレーティングシステムによって上位メモリにすでにロードされている場合でも)、独自のPSPセグメントとコマンドラインバッファーの大部分を再配置し、環境セグメントを解放して、結果として生じるメモリフットプリントをさらに削減し、断片化を回避できます。[14]一部の自己再配置TSRは、元々TSRとしてロードされていた場合でも、その「性質」を動的に変更してデバイスドライバーに変形できるため、通常はメモリもいくらか解放されます。[4]最後に、外部ローダーがドライバーを拡張メモリ(EMS)、高メモリ領域(HMA)、または拡張メモリ( DPMSまたはCLOAKING経由) に再配置することは技術的に不可能です。これらの方法では、再配置対象領域へのアクセスを調整するために、従来のメモリまたは上位メモリに小さなドライバー固有のスタブが残っている必要があるためです。 [15] [nb 1] [nb 2]また、デバイスドライバーの場合は、ドライバーのヘッダーが常に最初のメガバイトに残っている必要があるためでもあります。[15] [13]これを実現するためには、ドライバーはこれらの地域への自力移転をサポートするように特別に設計されなければならない。[15]
一部の高度な DOS ドライバには、デバイス ドライバ (オペレーティング システムによってオフセット +0000h にロードされる) と TSR (オフセット +0100h にロードされる) の両方が含まれており、共通のコード部分を内部でファットバイナリとして共有しています。[13]共有コードが位置に依存しないように設計されていない場合は、再配置ローダーによって既に実行されているものと同様の何らかの形式の内部アドレス修正が必要です。これは、自己再配置の修正段階に似ていますが、コードはオペレーティング システムのローダーによって既にターゲットの場所にロードされています (ドライバ自体によって行われるのではなく)。
IBM DOS/360 および OS/360 プログラム
IBM DOS/360 には、ロード中にプログラムを再配置する機能がありませんでした。時には、異なるロード アドレス (パーティション) 用にそれぞれビルドされた、複数のバージョンのプログラムが維持されていました。自己再配置プログラムと呼ばれる特別なクラスのプログラムは、ロード後に自分自身を再配置するようにコーディングされていました。[16] IBM OS/360 は、実行可能プログラムをメモリにロードするときに再配置しました。プログラムのコピーは 1 つだけ必要でしたが、一度ロードされるとプログラムは移動できませんでした (いわゆるワンタイム位置独立コード)。
その他の例
(多数回の)自己再配置の極端な例として、動的自己再配置とも呼ばれるが、これは、例えばワームメモリテストで使用されるように、実行中でもメモリ内の固定アドレスに留まらないようにコンピュータプログラムを構築することが可能である。 [ 17] [18] [19] [20] Apple Wormも動的自己再配置である。[21]
参照
- 動的なデッドコードの除去
- RPLOADER - DOS の起動中にリモート/ネットワーク ブート コードが自身を再配置するのを支援する DR-DOS API
- ガベージコレクション
- 自己複製
- 自己言及
- クワイン(コンピューティング)
注記
- ^ スタブの要件の例外は、拡張メモリがメモリマネージャによってEMSUMB経由で永続的な上位メモリに変換され、EMS経由ではなく上位メモリとして事実上アクセスされる場合です。
- ^ドライバを HMAにロードするためのスタブ要件には、2 つの例外があります。ゲート A20ロジックのないマシンでハイ メモリが永続的に有効になっている場合はスタブは必要ありませんが、この条件は一般に満たされないため、汎用 DOS ドライバはこれを利用できません (事前にこの条件を明示的にテストしない限り)。それ以外の場合、DR DOS 6.0以降では、常駐システム拡張機能 ( SHAREやNLSFUNCなど) がマルチプレックス割り込み INT 2Fh のみをフックする場合もスタブは必要ありません。これは、バックドア インターフェイスを使用してカーネル空間の割り込みチェーンにフックし、カーネルのゲート A20 ハンドラがスタブの機能を提供できるためです。[a]それでも、ドライバは HMA で正しく機能するために自己再配置を実行する必要があります。
参考文献
- ^ ダムデレ、ダナンジェイ M. (1999)。システムプログラミングとオペレーティングシステム。教育。インド、ニューデリー:タタ・マグロウヒル。 p. 232.ISBN 0-07-463579-4. ISBN 978-0-07-463579-7 . 2020年2月1日時点のオリジナルよりアーカイブ。2011年11月8日閲覧。 (658ページ)
- ^ ダムデレ、ダナンジェイ M. (2006)。オペレーティング システム: 概念ベースのアプローチ。教育。インド、ニューデリー:タタ・マグロウヒル。 p. 231.ISBN 0-07-061194-7. ISBN 978-0-07-061194-8 . 2020年2月20日時点のオリジナルよりアーカイブ。2020年2月20日閲覧。 (799ページ)
- ^ Paul, Matthias R.; Frinke, Axel C. (1997-10-13) [1991], FreeKEYB - 拡張 DOS キーボードおよびコンソール ドライバ(ユーザー マニュアル) (6.5 版)[1] (注:FreeKEYBは、ほとんどのキーボードレイアウト、コードページ、国コードをサポートするUnicodeベースの動的構成可能ドライバーです。既製のマクロアセンブラーと、自動前処理および後処理分析ツールのフレームワークを使用して、バイナリコードと一緒に実行可能ファイルに埋め込まれる依存関係とコードモーフィングメタデータと、自己破棄、緩和、再配置ローダーを生成します。ドライバーは、TSRまたはデバイスドライバーとしてさまざまな方法でロードおよびインストールされることをサポートし、高度な自己再配置技術(通常のDOSメモリ、UMB、未使用のビデオメモリ、または生のメモリへのインストールを含み、プログラムセグメントプレフィックスオーバーロードと環境セグメント再結合も利用します)と、ロード時のバイトレベルの粒度の動的なデッドコード除去、およびハードウェア、オペレーティングシステム、ドライバー構成、および選択した機能セットとロケールに応じてメモリフットプリントを最小限に抑えるための実行時の自己変更コードと再構成を実装しています。)
- ^ ab Paul, Matthias R.; Frinke, Axel C. (2006-01-16)、FreeKEYB - 高度な国際 DOS キーボードおよびコンソール ドライバー(ユーザー マニュアル) (7 (暫定) 版)
- ^ Kildall, Gary Arlen (1978年2月) [1976]. 「絶対マシンコードの静的再配置のための簡単なテクニック」. Dr. Dobb's Journal of Computer Calisthenics & Orthodontia . 3 (2). People's Computer Company : 10–13 (66–69). ISBN 0-8104-5490-4. #22 ark:/13960/t8hf1g21p . 2017年8月19日閲覧。[2][3][4]。元々はKildall, Gary Arlen (1977) [1976年11月22~24日]に発表された。「絶対マシンコードの静的再配置のための単純な手法」。米国カリフォルニア州モントレーの海軍大学院で執筆。Titus, Harold A. (編)。会議記録: Tenth Annual Asilomar Conference on Circuits, Systems and Computers: Papers Presented November 22–24, 1976。Asilomar Hotel and Conference Grounds、カリフォルニア州パシフィックグローブ、米国: Western Periodicals Company。pp. 420–424。ISSN 1058-6393 。2021年12月6日閲覧。(609ページ)。 (この「サイズ変更」方法は、ページ境界再配置と呼ばれ、プログラム実行のTPA を最大化するためにMOVCPM CP/M-80ディスク イメージに静的に適用できます。また、CP/M デバッガのDynamic Debugging Tool (DDT) によって、自分自身をより上位のメモリに再配置するために動的に利用されました。同じアプローチは、再配置可能なPL/Mコードを生成するために、 IMS AssociatesのBruce H. Van Nattaによって独立して開発されました。段落境界再配置として、この方法の別のバリエーションが、DR DOS 6.0以降でKEYB、SHARE、およびNLSFUNCなどの動的HMA自己再配置 TSRによって後に利用されました。やや類似したアプローチに基づく、はるかに洗練されたバイト レベルの粒度の高いオフセット再配置方法は、Matthias R. Paul と Axel C. Frinke によって独立して考案および実装され、動的デッド コード除去によって常駐ドライバおよび TSR (FreeKEYB など) の実行時フットプリントを動的に最小化しました。)
- ^ Huitt, Robert; Eubanks, Gordon ; Rolander, Thomas "Tom" Alan ; Laws, David; Michel, Howard E.; Halla, Brian; Wharton, John Harrison ; Berg, Brian; Su, Weilian; Kildall, Scott ; Kampe, Bill (2014-04-25). Laws, David (ed.). 「Legacy of Gary Kildall: The CP/M IEEE Milestone Dedication」(PDF) (ビデオ トランスクリプション). Pacific Grove, California, USA: Computer History Museum . CHM 参照番号: X7170.2014. 2014-12-27 にオリジナルからアーカイブ(PDF)されました。2020-01-19に取得。
[…] Laws: […] 「 OS の
動的再配置
」とは何ですか。なぜ重要だったのか教えてください。
ユーバンクス
:
ゲイリーがやったことは
、
驚くべきものでした。学校で
彼
が研究室に飛び込んできて、「
再配置の方法が分かった」と言った日のことを覚えています。彼は、唯一のバイトは常に
上位バイト
になるという事実を利用しました
。そこで
ビットマップ
を作成しました。[…] コンピュータのメモリ容量は関係なく、オペレーティング システムは常に上位メモリに移動できます。したがって、メモリ容量の異なるマシンでこれを商品化できます。[…] 64K CP
/M
と 47K CP/M を販売することはできません。アドレスにハード コンパイルがあるのは馬鹿げています。そこでゲイリーは、ある夜、おそらく真夜中にコーディングのことを考えながらこれを思いつき、これによって CP/M の商品化が可能になりました。この再配置がなければ、非常に困難な問題になっていたと思います。人々にそれを買わせるには、複雑に思われるでしょうし、メモリを追加すると、別のオペレーティング システムを入手しなければなりません。[…]
Intel
[…]は、メモリ アドレスの
バイトを逆にしてい
ました。しかし、それらは常に同じ場所にあったので、正確には
256 バイト境界
で再配置できました。したがって、それらの場所のビットマップだけで、常に再配置できました。[…] Laws: 動的再配置について私が今まで聞いた中で最も雄弁な説明は、間違いなくこれです。[…]
[5][6] (33ページ)
- ^ Sage, Jay (1988年5月~6月). Carlson, Art (編). 「ZCPR 3.4 - タイプ4プログラム」. The Computer Journal (TCJ) - プログラミング、ユーザーサポート、アプリケーション. ZCPR3コーナー (32). コロンビアフォールズ、モンタナ州、米国: 10~17. ISSN 0748-9331. ark:/13960/t1wd4v943 . 2021年11月29日閲覧。[7][8]
- ^ Mitchell, Bridger (1988年7月~8月). Carlson, Art (編). 「Z3PLUS & Relocation - ZCPR3PLUSに関する情報、および自己再配置Z80コードの書き方」. The Computer Journal (TCJ) - プログラミング、ユーザーサポート、アプリケーション. Advanced CP/M (33). Columbia Falls, Montana, USA: 9–15. ISSN 0748-9331. ark:/13960/t36121780 . 2020年2月9日閲覧。[9][10]
- ^ Sage, Jay (1988年9月~10月). Carlson, Art (編). 「再配置可能コード、PRLファイル、ZCPR34、およびタイプ4プログラムの詳細」. The Computer Journal (TCJ) - プログラミング、ユーザーサポート、アプリケーション. ZCPR3コーナー (34). コロンビアフォールズ、モンタナ州、米国: 20~25. ISSN 0748-9331. ark:/13960/t0ks7pc39 . 2020年2月9日閲覧。[11][12][13]
- ^ Sage, Jay (1992年1月~2月). Carlson, Art; McEwen, Chris (編). 「ZCPRの10年」. The Computer Journal (TCJ) - プログラミング、ユーザーサポート、アプリケーション. Z-System Corner (54). S. Plainfield, New Jersey, USA: Socrates Press: 3–7. ISSN 0748-9331. ark:/13960/t89g6n689 . 2021年11月29日閲覧。[14][15][16]
- ^ Sage, Jay (1992年5月~6月) [1992年3月~6月]. Carlson, Art; McEwen, Chris (編). 「Type-3 and Type-4 Programs」. The Computer Journal (TCJ) - プログラミング、ユーザーサポート、アプリケーション. Z-System Corner - Some New Applications of Type-4 Programs (55). S. Plainfield, New Jersey, USA: Socrates Press: 13–19. ISSN 0748-9331. ark:/13960/t4dn54d22 . 2021-11-29閲覧。[17][18]
- ^ 「第10章 メモリの管理」。Caldera DR-DOS 7.02 ユーザーガイド。Caldera , Inc. 1998 [1993、1997]。2017年8月30日時点のオリジナルよりアーカイブ。 2017年8月30日閲覧。
- ^ abc Paul, Matthias R. (2002-04-06). "Re: [fd-dev] ANNOUNCE: CuteMouse 2.0 alpha 1". freedos-dev . 2020-02-07 にオリジナルからアーカイブ。2020-02-07に取得。
[…] ドライバーに SYS デバイス ドライバー ヘッダーを追加して、CTMOUSE を
1 つに
まとめ、通常の
TSR
とデバイス ドライバーの両方にできるようにします (FreeKEYB アドバンス キーボード ドライバーに似ています)。 […]
INSTALL = は DR DOS 3.41+ 以降でサポートされており、DR DOS は
[D]CONFIG.SYS
ディレクティブの順序を保持するため、
これは
DR DOSで実際には必要ありません […] しかし、 […]
MS-DOS
/
PC DOS
システムでの […] 柔軟性が向上します。
これらのシステムでは、ファイル内の順序に関係なく、常に
DEVICE
= ディレクティブが INSTALL= ステートメントよりも先に実行されます。 […] ソフトウェアでは、マウス ドライバーがデバイス ドライバーとして存在していることが必要になる場合があります。これは、昔からマウス ドライバーは常にデバイス ドライバーだったためです。これらのマウス ドライバーには、使用するプロトコルに応じて特定のデバイス ドライバー名が付けられており (たとえば、
マウス システム モードの場合は "
PC$MOUSE
"
)、一部のソフトウェアでは、使用するマウスの正しいタイプを見つけるためにこれらのドライバーを検索する場合があります。 […] もう 1 つの利点は、デバイス ドライバーは通常、メモリの消費量が少ないことです (
環境
や
PSP
が不要) […] これは基本的に、扱いにくいファイル ヘッダー、コマンド ラインを解析するための別のコード、別のエントリ ポイントと終了行、および ORG 0 / ORG 100h の違いを克服するためのセグメント マジックです。デバイス ドライバーの自己ロードハイイングは、ドライバー ヘッダーをそのままにして、ドライバーの残りの部分のみを再配置する必要があるため、少し扱いにくくなります […]
- ^ Paul, Matthias R. (2001-08-18). 「Re: [fd-dev] On GRAFTABL and DISPLAY.SYS (Was: Changing codepages in FreeDOS)」. freedos-dev . 2017-09-04 にオリジナルからアーカイブ。2017-09-04に取得。
[…] 少なくとも
MS-DOS 6.0
+
GRAFTABLは、その
PSP
セグメントの一部
(オフセット +60h 以上) を再配置して、その常駐サイズを最小限に抑えます。 […]
(注: DR-DOS 7.03以降のGRAFTABL 2.00+ も動的自己再配置をサポートしています。)
- ^ ABC さん Paul, Matthias R. (2002-02-02). 「Treiber dynamisch nachladen」 [ドライバーを動的にロードする] (ドイツ語)。ニュースグループ: de.comp.os.msdos。2017-09-09 にオリジナルからアーカイブ。2017-07-02に取得。(注: LOADHIGHなどのコマンドの使用法や、 XMSUMB API を利用したUMBへの自己再配置方法など、 DOS でのロード ハイ メソッドの概要を示します。また、セグメント内オフセット再配置を利用して TSR をHMAに再配置するために必要な、より高度な方法についても説明します。)
- ^ Boothe Management Systems (1972-11-01). 「スループット - あなたにふさわしいものをすべて手に入れていますか? - DOSRELO」。Computerworld - The Newsweekly For The Computer Community (広告). Vol. VI, no. 44. サンフランシスコ、カリフォルニア州、米国: Computerworld, Inc. p. 9. 2020-02-06 にオリジナルからアーカイブ。2020-02-07に取得。
[…] DOSRELO は、
DOS の問題プログラムを自己再配置する方法を提供します。DOSRELO は
、リンケージ エディターが
コア イメージ ライブラリにカタログする
前に、プログラムのオブジェクト コードにエントリ ポイント ロジックを追加することで、言語に関係なくすべてのプログラムの
自己
再
配置機能を実現します
。 […]
- ^ ワームメモリテスト(PDF) .ベクターグラフィック. 2015-10-21. 2019-05-15にオリジナルからアーカイブ(PDF)されました。2021-12-13に取得。(3 ページ) (注: Vector Graphic 3 のサービス マニュアルより)
- ^ Wilkinson, William "Bill" Albert (2003) [1996, 1984]. 「H89ワーム:H89のメモリテスト」。Bill WilkinsonのHeath Companyページ。2021-12-13にオリジナルからアーカイブ。2021-12-13に取得。
[…] 命令のフェッチに加えて、
Z80は
サイクルの半分を使用して
ダイナミック
RAMを
リフレッシュします
。 […] Z80は各
命令フェッチサイクルの半分を他の作業の実行に費やす必要があるため、データバイトほど
命令バイト
をフェッチする時間はありません。アクセスされているメモリ位置にある
RAMチップ
の1つが
少し遅い場合、Z80は命令をフェッチするときに間違ったビットパターンを取得する可能性がありますが、データを読み取るときは正しいビットパターンを取得します。 […] 組み込みのメモリテストでは、この種の問題は検出されません […] これは厳密にはデータの読み取り/書き込みテストです。テスト中、すべての命令フェッチはRAM からではなく
ROM
から行われます[…] その結果、
H89
はメモリ テストに合格しますが、一部のプログラムでは依然として不安定に動作します。 […] これは、RAM を介して自分自身を再配置することでメモリをテストするプログラムです。その際、CPU はプログラムの現在のアドレスを CRT に表示し
、
そのアドレスで命令をフェッチします。そのアドレスで RAM IC が正常であれば、CPU はテスト プログラムを次のメモリ位置に再配置し、新しいアドレスを出力して、手順を繰り返します。ただし、RAM IC の 1 つが低速で誤ったビット パターンを返す場合、CPU は命令を誤って解釈し、予期しない動作をします。ただし、ディスプレイがロックして、障害のある IC のアドレスが表示される可能性があります。これにより、問題が 8 つの IC に絞り込まれ、32 個もの IC をチェックする必要がなくなりました。[…] この[…] プログラムは、
メモリの下位から最後の作業アドレスまで RST 7 (RESTART 7) 命令をプッシュして
ワーム テストを実行します。プログラムの残りの部分は静止したままで、RST 7 コマンドの現在の位置の表示とその
再配置を処理します。ちなみに、このプログラムは、RST 7 命令がメモリを上方向に移動すると、
NOP
(NO OPERATION)の
痕跡
が残るため、ワーム テストと呼ばれています
。[…]
- ^ Steinman, Jan W. (1986-09-01). 米国オレゴン州ウェストリンで執筆。「The Worm Memory Test」。The Right to Assemble (TRTA)。Dr . Dobb's Journal of Software Tools for the Professional Programmer。11 (9). カリフォルニア州レッドウッドシティ、米国: M&T Publishing, Inc. / The People's Computer Company : 114–115 (662–663). ISSN 1044-789X. #119. ark:/13960/t74v34p9p CODEN DDJOEB 。2021-12-13に取得。[19] (2ページ)
- ^ Steinman, Jan W. (1986). 「III. 68000 の便利なルーチンとテクニック、16. ワーム メモリ テスト」(PDF) 。米国オレゴン州ウェストリンで執筆。Dr . Dobb の 68000 プログラミング ツールブック。米国ニューヨーク: Brady Book / Prentice Hall Press / Simon & Schuster, Inc. pp. 341–350。ISBN 0-13-216649-6. LCCN 86-25308. 2021-12-13 にオリジナルからアーカイブ(PDF)されました。2021-12-13に取得。(1+5+10+1ページ)
- ^ Dewdney, Alexander Keewatin (1985年3月). 「Computer Recreations - A Core War bestiary of virales, worms and other threats to computer memories」. Scientific American . 285 : 38–39. 2017年7月4日時点のオリジナルよりアーカイブ。 2017年7月4日閲覧。
さらに読む
- Harrell III, John B. (1983 年 10 月). 「DOSPLUS 3.5」. 80 Micro . Review (45). 1001001, Inc. : 160, 162, 164–168, 170. ISSN 0744-7868. ark:/13960/t8z906r42 . 2020 年 2 月 6 日閲覧。[20][21]
- Smith, Lee; Haines, Lionel (1989-02-02) [1987-08-14]. RISC OS アプリケーションイメージフォーマット (旧 Arthur イメージフォーマット) (技術メモ) (1.00 版). ケンブリッジ、英国: Acorn Computers Limited、プログラミング言語グループ。PLG-AIF。2017-08-30 にオリジナルからアーカイブ。2017-08-30に取得。
- ARM イメージ形式のプロパティ。1993 年。2017 年 8 月 31 日にオリジナルからアーカイブ。2017年 8 月 31 日に取得。
- Huck, Alex (2016-08-14). 「Nachladbare Treiber unter CP/M - PRL2COM」。Homecomputer DDR (ドイツ語)。2020-02-21 にオリジナルからアーカイブ。2020-02-21に取得。 Pohlers, Volker (2017-04-24) [2012-02-20, 2009, 2002, 1988-07-26, 1987-10-11]. 「PRL2COM」. Homecomputer DDR (ドイツ語)。 2020-02-21 にオリジナルからアーカイブ。 2020-02-21に取得。
