1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TNESヘッダをiNESヘッダに変換

Last updated at Posted at 2019-06-08

はじめに

※ 初投稿かつ完全に自分のメモ的な投稿なので、不正確であったり、わかりにくかったりすると思いますがお許しください。

3DS等のバーチャルコンソールからダンプできるファミコンのROMは "TNES" というフォーマットになっており、エミュレータ等ではこの形式を読み込むことはできません。

ちなみにファミコンのROMファイルにおいて標準的なフォーマットは "iNES" というもの。TNESとiNESの差異はおそらくヘッダのみなので、ダンプしたROMの先頭をバイナリエディタなりで書き換えてやればエミュレータなどでも起動することができます。

参考資料・事前に読むべき資料

ヘッダの構造に関する情報は以下のサイトから入手しました。

iNESヘッダを書く

iNESフォーマットのヘッダの大きさは16バイトになっています。

まず、0x00から始まる4バイトは、"4E45531A"です。これは"NESの文字列+EOFコード"です。

0x04はPRG-ROMのサイズを16KB単位で表した値です。PRG-ROMのサイズはTNESヘッダの0x05に8KB単位で表されているので、これの半分の値を入れてあげればいいです。

0x05はCHR-ROMのサイズを8KB単位で表した値です。この値はTNESヘッダの0x06と等しいです。

0x06は少し複雑です。
先頭4ビットにiNES Mapperの値(このサイトのTNES MapperとiNES Mapperの対応表を参照)が入り、続く3ビットには順番に、

  • TNESヘッダの0x09の値
  • 0
  • TNESヘッダの0x09の値

が入ります。
最後の1ビットには、TNESヘッダの0x08の値が00または01の場合は0、02の場合は1が入ります。

0x07から0x0Fまでは0で埋めておいておそらく大丈夫だと思います。

このiNESヘッダでバーチャルコンソールからダンプしたTNESフォーマットのROMの先頭16バイトを上書きしてあげればiNESフォーマットのROMになるはずです。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?