画面が一通り動くようになりました。忘れないように、画面描画周りの実装について振り返っておこうと思います。エミュレータの画面描画についてはここでは到底書き切れないほどの知識が含まれているので、要点や、あるいは自分が気になったところだけ書くような形になります。エミュレータを実装してみることに興味のあるプログラマ向けに書いています。呼ばれるハードウェアで計算され、テレビ用の信号として出力されます。サイクル分動作するようになっています。画面分)を描画します。マス処理していくようなイメージで考えると都合が良いです。画面を更新することになります。ハードウェアがそのように動く)ので、エミュレータ側でもそれに合わせて実装していくのが良いと思われます。熟読しながら実装していくのがおすすめです。背景描画だけ実装して、それからスプライト描画に着手しましょう。処理を進められるよう何もせずに待っていたりします。描画処理を行っていないタイミングで処理を進める必要があります。側ではこの割り込み命令を検知するとプログラム中の特定のアドレスに処理を移することになっているので、これによって上手くやりくりします。側から書き換えることで、波打ったような効果を画面に与えたり、画面上の特定の部分だけスクロールさせたりという手法も用いられます。これはラスタースクロールと呼ばれる手法です。奥行きのあるレースゲームで道路をうねうねと曲げるために、1行描画するたびに横方向へのスクロール量を増減させたり、スーパーマリオブラザーズTMでスコアより下の部分だけスクロールさせたりという感じですね。画面には、2枚のレイヤーがあります。1つは背景描画用のもので、もう1つはスプライト描画用のものです。スプライトというのは、背景ではないレイヤーに描画する図形のことです。基本的には背景レイヤーより手前にスプライトレイヤーが描画されることになりますが、描画するスプライトごとに背景より前に配置するか後ろに配置するかという情報を持つことができて、後ろには配置される場合は背景が透過色のときだけ描画されます。前に配置されるスプライトについても、それが透過色であれば背景が描画されます。レジスタのフラグで管理されます。スプライトが使われています。スプライトには完璧には対応できていません。形状データに着色したタイルを敷き詰めることで描画します。色パレットのうちどの色を使うかという情報を示しています。色パレットを使うかという情報を割り当てられます。色パレットを利用するかという情報が格納される領域を属性テーブルと呼びます。枚分の指定が必要になります。個のアドレスでアクセス可能な領域で構成されることになります。いうようにまとめられています。色パレットの指定は残念ながら使われず少し無駄になっています。個のアドレスでアクセス可能な領域で構成されることになります。乗でキリが良くなるように設計されています。情報が取得できると前述しました。具体的には、先頭から何個目の形状データを使うかで表されます。呼ばれる領域に格納されています。形式とも言う)と呼ばれる形式でエンコードされるのが一般的です。形式のカートリッジデータには、先頭から、メタデータ、プログラム、キャラクターという順でデータが書き込まれています。枚目を表すような形になっています。背景描画おさらい画面上のある座標のピクセルを描画するためには、まずその座標から背景タイルのインデックスを求め、そのインデックスでネームテーブルに問い合わせます。形状データを取得します。色パレットを利用するかという情報を得ます。色コードが得られます。形式のカラーコードにマッピングすることで、最終的に画面上のある座標のピクセルに対して適当な色を割り当てられます。セット、ネームテーブルと属性テーブルの組を用意しておくことができます。スーパーマリオブラザーズTMでは、マリオが画面の右端に行くと、ステージ部分が右方向に少しスクロールします。このとき、内部では水平方向へのスクロール量が少し増加されています。背景を描画する際は、画面上の位置とこのスクロール量を考慮して、最終的にどのネームテーブルや属性テーブルにアクセスするかを決定します。レジスタを利用して、アクセスすべきアドレスが管理されています。厳密には、シフトレジスタやラッチなどが組み合わされて管理されているのですが、ここではもう少し簡易的なモデルで説明しています。スクロール量を保持しています。スクロール量を保持しています。画面左上から右下に向かって画面を描画していく際には、これらの値を少しずつ変更していきつつ、これらの値からネームテーブルや属性テーブルにアクセスするためのアドレスを算出し、描画すべきデータを決定していきます。おわり駆け足気味な説明になってしまいましたが、一旦以上です。実装と合わせながら読んでみてください。