web-dev-qa-db-ja.com

ファイル形式の仕様を文書化する方法

プロジェクトの場合、いくつかの古いゲームや関連ソフトウェアのさまざまなタイプのファイル(構成ファイル、保存、リソースアーカイブなど)を扱う必要があります。これらの大部分はまだ文書化されておらず、それらを操作するためのツールも存在しないため、フォーマットをリバースエンジニアリングして、それらを処理するための独自のライブラリを構築する必要があります。

たいへん需要が多いとは思いませんが、成果を公開していきたいと思います。ファイル形式を文書化するための承認された標準はありますか?周りを見回すと、いくつかのスタイルが使用されています。 。Zipファイル形式の指定 など、非常に冗長なスタイルがあります。 XentaxWikiにあるような他のものはもっと簡潔です-それらのいくつかは読みにくいと思います。私が個人的に最も気に入っているのは このPlayStation 2メモリーカードファイルシステムの説明 です。これには、詳細な説明テキストとオフセットなどのいくつかの「メモリマップ」の両方が含まれます。これも私の用途に最もよく一致します。場合。フォーマットによって多少異なりますが、私が従うべき一般的な原則がいくつかあるようです。

編集:私が何をしたいのかよく説明していないようです。例を作ってみましょう。

構成を「バイナリ」ファイルに保存する古いソフトウェアがあるかもしれません-一連のビットフィールド、整数、文字列、そしてすべてが結合されてプログラムによって理解されるわけではありませんが、人間が読めるものではありません。私はこれを解読します。このファイルを解析および変更するためのライブラリーを実装するための仕様として、このファイルの形式を人間が読める形式で正確に文書化したいと思います。また、他の人にもわかりやすいといいですね。

そのような文書が書かれるかもしれないいくつかの方法があります。上記のPKZIPの例は非常に冗長で、主にファイル形式をフリーテキストで説明しています。 PS2の例では、値のタイプ、オフセット、およびサイズの表と、それらの意味を詳しく説明しています。 XentaxWikiにあるような多くの他のものは、変数のタイプとサイズのみをリストし、ほとんどまたはまったくコメントしていません。

この種のドキュメントの書き方に関するガイダンスを提供するコーディングスタイルガイドに似た標準があるかどうかを尋ねます。そうでない場合、私がエミュレートする必要がある有名な優れた例はありますか?そうでない場合、誰かが少なくともいくつかの有用なアドバイスを要約できますか?

12
Sopoforic

バイナリファイルは、特定のルールに従って論理ユニットに配置されたビットのシーケンスです。これらのルールは通常grammarと呼ばれます。文法は4つのタイプ( Chomsky階層 )に分類でき、 context-free文法 = Matt Fenwickのコメントで指摘されているように、 Extended Backus-Naur Form を使用する必要があります。ファイルに保存されたシーケンスの解釈(またはセマンティクス)は、口頭で、または情報をシリアル化および逆シリアル化した注釈付きのサンプルプログラムで説明できます。

バイナリファイル形式のドキュメント化の詳細については、たとえば、 ASN.1標準

4
Deer Hunter

ファイル形式をすばやく検索するとWikipediaの記事 (ファイル形式のリスト) が表示されるため、これは奇妙です。また、いくつかの Video Game Data フォーマットも含まれています。

ファイルシステムをサポートするシステム(最も一般的にはPCゲーム)でのビデオゲームのデータの一般的なファイル形式のリスト。

また、 Video Game Storage Media 形式の幅広い選択肢も含まれています。

ゲームのROM画像または記憶媒体が元のROMデバイスからハードディスクなどの外部メモリにコピーされるときに使用される最も一般的なファイル名拡張子のリストバックアップの目的、またはエミュレータでゲームをプレイできるようにするため。カートリッジベースのソフトウェアの場合、プラットフォーム固有の拡張子が使用されない場合、ファイル名の拡張子「.rom」または「.bin」は通常、ファイルがROMの内容のコピーが含まれています。ROM、ディスク、またはテープイメージは通常、単一のファイルまたはROMではなく、ファイル全体またはROMバックアップ媒体。


ファイル形式を文書化するための承認された標準はありますか?

「公式」の基準はどこにもありません。ファイル形式は会社によって作成されるため、会社はドキュメントの形式を決定します。

2
Adam Zuckerman