ファミコンの画面は8x8ピクセルで定義されたキャラクタを敷き詰めた画像(BG)の上に8x8ピクセルで定義されたキャラクタ(スプライト)を重ねて描画されています。その名の通り、多くの場合ゲームの背景をBGで、ゲームの主人公や敵キャラをスプライトで表現することになります。
この「BGとスプライトでゲーム画面を描画する」という設計はファミコンに限らず、PCエンジン, ゲームボーイ, メガドライブ等々、PlayStationより前のゲーム機に共通する設計でした。
すでに発売されているゲーム機より高い性能、より良い表現を求められるであろうゲーム機の設計においてなぜ画面描画に関する設計は共通になっているのでしょうか。それには当時の技術的な制約、出力先である家庭用テレビの仕様が影響していました。
このトークでは私がPHPで書いたファミコンエミュレータ php-terminal-nes-emulator を題材に、ファミコンの画面描画の仕組みや、画面描画をエミュレータでどの様に設計・実装しているのかを解説します。
そして、このトークを通してエミュレータのコードが「得体の知れない難しいもの」ではなく読んで楽しく、書いてみたくなるものであることをお伝えします!