LoginSignup
0
0

More than 1 year has passed since last update.

NESエミュレータを作る-キャラクターROM見てみる編

Last updated at Posted at 2022-12-22

PONOS Advent Calendar 2022 22日目です。
昨日は@MilayYadokariさんのUnityでお手軽にスクロール実装!Simple Scroll-Snapの紹介!でした。

NESエミュレータを作る-CPUちょっと理解編の続きです。
今回はキャラクターROMの中身を見ていきます。

※市販されているゲームを使う場合は私的利用の範囲でやりましょう。

この記事の目標

キャラクターROMに入っているスプライトを見て楽しもう!
Screen Shot 2022-12-21 at 15.28.26.png

キャラクターROMの仕様

キャラクターROMにはゲームの背景やキャラクターに使われる画像、スプライトの情報が入っています。
スプライトのサイズは基本的に88(816の場合もあるらしい)です。
16Byteでスプライト一つ、1ドットが2bitで表現されます。
これが256個分あり背景用とキャラクター用合わせて512個のスプライトで画面が描画されます。
例えばHello, World!のHにあたるスプライトは前回切り出したキャラクターROMの73番目に入っています。

character_rom[0x0480] # 0xe7
character_rom[0x0481] # 0xe7
character_rom[0x0482] # 0xe7
character_rom[0x0483] # 0xff
character_rom[0x0484] # 0xff
character_rom[0x0485] # 0xe7
character_rom[0x0486] # 0xe7
character_rom[0x0487] # 0xe7
character_rom[0x0488] # 0xc6
character_rom[0x0489] # 0xc6
character_rom[0x048a] # 0xc6
character_rom[0x048b] # 0xfe
character_rom[0x048c] # 0xc6
character_rom[0x048d] # 0xc6
character_rom[0x048e] # 0xc6
character_rom[0x048f] # 0x00

前半8Byte上位ビット後半8Byteを下位ビットとするとスプライトの完成です!
無題のスプレッドシート - Google スプレッドシート copy.png
このように一つのドットは0〜3の数字で表され、それぞれにパレットの色が割り当てられます。
0は背景色になるので一つのスプライトは最大3色まで使えることになります。
すでにROMダンパーを持っているならいろんなゲームのスプライトを読み出して見てみましょう!

余談

初代ドラクエといえば容量問題でカタカナを全部入れていないため「ア」がなく、世界の名前「アレフガルド」がゲーム内で出てこないのは有名な話です。
ファミコンでは文字もスプライトが使われるのでキャラクターROMを見てみると本当にカタカナの「ア」がないのが確認できます。
Screen Shot 2022-12-21 at 16.59.50.png
さらにファミコンには同じ画面に表示できるスプライトは512種類のみという制約があるため、
別パターンのスプライトを用意しておいてシーンに応じてバンク切り替えというしくみで使うスプライトを切り替えていました。
初期の作品はバンク切り替えを使わずに512種類の1パターンしかスプライトが用意されていないことが多いのですが、初代ドラクエには2パターン目のスプライトが用意されています。
Screen Shot 2022-12-21 at 17.16.16.png
なにやら文字が重なったようになっています。
ここで1パターン目と同じような部分に使われている色を背景色同じにしてみましょう。
Screen Shot 2022-12-21 at 17.28.35.png
別の文字が浮かび上がってきました。
タイトル画面などではこっちのパターンに切り替えて使っているのでしょう。
ちなみに残りの部分には変身した竜王のスプライトがみっちり詰まっています。
やりくりがすごい。

おわりに

NESエミュレータを作るというタイトルで初めましたが終わりませんでした。
今後も進捗があれば続きを書いていくと思います。たぶん。

明日は@bluenova1221さんです。

0
0
0

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
0
0