スプライトを作成するツールはいろいろあるのですが、ここでは、トップページからリンクされているわいわいの巣のYY-CHRを使うことにします。 さらに、これをダウンロードしてください。中にgiko.pal(パレットデータ),giko.spr(スプライトデータ),giko.bkg(空の背景データ)が入っています。 pal.exeでgiko.palを開き、yy-chr.exeでgiko.sprを開いてください。(左下のリストから「2BPP NES」を選んでください)
以下のような場合で、スプライトのパレットを0番にしたとしたら、スプライトのパレットは下段ですから、背景色は灰色、目の部分は黒、口の部分は赤、顔は白になります。 1番だったら、パレットは4・5・6・7が使用されますから、顔の部分が緑色になるわけです。4の背景はピンクですが、背景色は無視されます。この色指定の規則は後で出てくるBGも同じなので、覚えておいてください。
.bank 2 .org $0000 .incbin "giko.bkg" .incbin "giko.spr"
lda #$00 ; $00(スプライトRAMのアドレスは8ビット長)をAにロード sta $2003 ; AのスプライトRAMのアドレスをストアスプライト情報の指定は、スプライトRAMレジスタ$2004を使用します。 スプライトを描画するためには、以下の順番の通りに4つの情報を指定します。
1バイト目 Y座標 2バイト目 タイルインデクス番号 (sprファイルの何番目のスプライトを表示するか) 3バイト目 8ビットのビットフラグです。スプライトの属性を指定します。 bit7:垂直反転(1で反転) bit6:水平反転(1で反転) bit5:BGとの優先順位(0:手前、1:奥) bit0-1:パレットの上位2bit (他のビットは0に) 4バイト目 X座標パレットの上位2bitというのは、0〜15までのBGのパレットのうち、 パレット0〜3を使うならば0(%0000)の00、パレット4〜7なら4(%0100)の01、パレット8〜11なら8(%1000)の10、 パレット12〜15なら12の(%1100)の11を指定するということです。ここではパレット0番にします。 もし、X=30,Y=40に0番のスプライトを表示するならば、以下の通りになります。
lda #40 ; 40(10進数)をAにロード sta $2004 ; Y座標をレジスタにストアする lda #00 ; 0(10進数)をAにロード sta $2004 ; 0をストアして0番のスプライトを指定する sta $2004 ; 反転や優先順位は操作しないので、再度$00をストアする lda #30 ; 30(10進数)をAにロード sta $2004 ; X座標をレジスタにストアするちなみにファミコンの画面の解像度は256x240です。
VBlankが終わった後の描画中にVRAMを更新すると画像が壊れてしまうので、最初にVBlank発生を待ってから VBlank中に描画処理を行います。 そして次のVBlankまでに全ての処理を必ず終わらせる必要があります。 言い方を変えると、ファミコンは1秒間に60ループの処理を行えるということになります。
Start: lda $2002 ; VBlankが発生すると、$2002の7ビット目が1になります。 bpl Start ; bit7が0の間は、Startラベルの位置に飛んでループして待ち続けます。bplとは、ステータスレジスタのN(ネガティブ)フラグが0の場合指定されたアドレスに分岐する命令です。 NフラグにはAレジスタの7ビット目がセットされるので、ldaとbplだけで待つことができます。
nesasm giko005.asmを実行してください。
アセンブルが成功したら以下のような画面になり、GIKO005.NESというファイルが出力されます。 自分でいじってエラーが出てしまった場合は、ラベル以外の行の先頭にタブが抜けていないかどうか調べてみてください。
このGIKO005.NESを何かのファミコンエミュレータで実行してみてください。小さなスプライトが一つ表示されます。
左上のゴミは、指定して無い1番以降のスプライトの下部が、座標X0,Y0に出てるのが原因です。
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||