ドラクエ風RPGファミコンプログラム講座

【NES ゲームプログラミング編】 【ファイルの分割】 *NESASM は、分割コンパイルには対応していませんが .include/.incbin の疑似命令 でファイルを分けることが出来ます。 .include "library.asm" .incbin "map_data.bin" *上記のようにアセンブラソース…

ドラクエ風RPGファミコンプログラム講座

【NES ゲームプログラミング編】 【ファイルの分割】 *NESASM は、分割コンパイルには対応していませんが .include/.incbin の疑似命令 でファイルを分けることが出来ます。 .include "library.asm" .incbin "map_data.bin" *上記のようにアセンブラソース…

ドラクエ風RPGファミコンプログラム講座

【NES ゲームプログラミング編】 【 PPUの初期化 】 *PPUの初期化は、 $2000 と $2001 のコントロールレジスタを設定します、 只、コントロールレジスタはビットフラグになっていてプログラム上で個別に 設定しなければならない時があります。 下記にコード…

ドラクエ風RPGファミコンプログラム講座

【NES ゲームプログラミング編】 【 スケルトンプログラムの作成 】 *スケルトンプログラムとは初期化とメインルーチンで構成され、それに各 処理への流れを記述しただけのプログラムを言う。 先ずは、ゲームメインルーチン設置から始めます。 〖 VBlank割…

ドラクエ風RPGファミコンプログラム講座

【NES アセンブラ入門編】 【 シフト・ローテート命令 】 〖 左シフト命令 ASL 〗 *ASL は左に 1bit シフト する命令です。(空いた部分には 0 が入ります。) Aレジスタ x2を実行している。 『例』 lda #$01 ;#%00000001 asl a ;#%00000010 〖 右シフト命令 …

ドラクエ風RPGファミコンプログラム講座

【NES アセンブラ入門編】 【 算術演算と論理演算】 〖 排他的論理和命令( EOR ) 〗 *排他的論理和命令 EOR は、Aレジスタとオペランドの各BITを比較して、お互いの BITが 反するときそのBITを 1 にする。 『例』 lda #1 EOR #$01 *上記のコードは Aレ…

ドラクエ風RPGファミコンプログラム講座

【NES アセンブラ入門編】 【 算術演算と論理演算】 * ファミコン(6502)の算術演算は、加算と減算のみで、 キャリー付きの加算命令と減算命令が1つずつあるだけです。 〖 論理積命令( AND ) 〗 *論理積命令 AND は、Aレジスタとオペランドの各BITを…

ドラクエ風RPGファミコンプログラム講座

【NES アセンブラ入門編】 【 算術演算と論理演算】 * ファミコン(6502)の算術演算は、加算と減算のみで、 キャリー付きの加算命令と減算命令が1つずつあるだけです。 〖 論理積命令( AND ) 〗 *論理積命令 AND は、Aレジスタとオペランドの各BITを…

ドラクエ風RPGファミコンプログラム講座

【NES アセンブラ入門編】 【 算術演算と論理演算】 * ファミコン(6502)の算術演算は、加算と減算のみで、 キャリー付きの加算命令と減算命令が1つずつあるだけです。 〖 加算命令( ADC ) 〗 *加算命令 ADC は、Aレジスタとオペランドを加算し更に…

ドラクエ風RPGファミコンプログラム講座

【NES アセンブラ入門編】 【 16bitの変数】 * ファミコン(6502)は、扱えるDATAが8ビット(1byte)長なので16ビットを 超えるDATAは、8ビットずつ数回にわけて処理する必要があります。 『 メインカウンターの設置』 *ゲームプログラムには欠かせ…

ドラクエ風RPGファミコンプログラム講座

【NES アセンブラ入門編】 【 16bitの変数】 * ファミコン(6502)は、扱えるDATAが8ビット(1byte)長なので16ビットを 超えるDATAは、8ビットずつ数回にわけて処理する必要があります。 『 メインカウンターの設置』 *ゲームプログラムには欠かせ…

ドラクエ風RPGファミコンプログラム講座

【NES アセンブラ入門編】 【 アセンブラでの変数】 * アセンブラに於いて変数の扱いは、基本的にRAMの領域なら自由に使えますが、 プログラムの領域と分けて使うのが望ましいでしょう。 ファミコンでは、プログラムの領域はROMになっているので競合…

ドラクエ風RPGファミコンプログラム講座

【NES アセンブラプログラミング編】 【libraryの作成 】 *今回からは、前回のプログラムを使って、ライブラリーを作成していきます。 ファイル名は、library.asm とします。 【TEST用プログラム再掲載】 ;-----------------------------------------------…

ドラクエ風RPGファミコンプログラム講座

【NES アセンブラプログラミング編】 【 TEST用プログラムの作成 】 〖 〗 *下記のコードはエミュレータで動く最小プログラムでFCEUXでは、動きましたが VirtualNES では、ゼロページの初期化とパターンDATAの設置までしないと 動かないようです。…

ドラクエ風RPGファミコンプログラム講座

【NES アセンブラプログラミング編】 【 TEST用プログラムの作成 】 〖 ファミコンのパレット〗 * ファミコンのパレットは、BG・スプライト それぞれ4色4セット パレレットテーブルは、BG用が $3f00~3f0f スプライト用が $3f10~$3f1f 下の画像は、FCEUXのPP…

ドラクエ風RPGファミコンプログラム講座

【NES アセンブラプログラミング編】 【 TEST用プログラムの作成 】 * TEST用プログラムとは、最小限の初期化のみで最後は無限ループで終わる プログラムで、サブルーチンの試験用で使っているものです。 ≪プログラムの構成≫ ⑴ ヘッダファイルの設置 ⑵ 割り…

ドラクエ風RPGファミコンプログラム講座

【NES アセンブラ入門編】 【 JSR 命令とスタック 】 *JSR は、サブルーチンを呼び出す命令で サブルーチンからは原則として RTS で 復帰します。 JSR命令が、実行されるとPC(プログラムカウンター)を+2 してスタックに 戻りアドレスを 押し込んだ後で…

ドラクエ風RPGファミコンプログラム講座

【NES アセンブラ入門編】 【 JSR 命令とスタック 】 *JSR は、サブルーチンを呼び出す命令で サブルーチンからは原則として RTS で 復帰します。 JSR命令が、実行されるとPC(プログラムカウンター)を+2 してスタックに 押し込んだ後でオペランドのアド…

ドラクエ風RPGファミコンプログラム講座

【NES 基礎知識編】 【 I/Oポート $2005, $2006, $2007 】 〖 $2005 〗(2度書き) * $2005 は、スクロールレジスタでメモリアドレスで、スクロールオフセット 指定する、 X軸 8ビット、Y軸 8ビットを2回連続で書き込みます。 〖 $2006 〗(2度書き) *$…

ドラクエ風RPGファミコンプログラム講座

【NES 基礎知識編】 【 I/Oポート $2005, $2006, $2007 】 〖 $2005 〗(2度書き) * $2005 は、スクロールレジスタでメモリアドレスで、スクロールオフセット 指定する、 X軸 8ビット、Y軸 8ビットを2回連続で書き込みます。 〖 $2006 〗(2度書き) *$…

ドラクエ風RPGファミコンプログラム講座

【NES 基礎知識編】 【 I/Oポート $2003, $2004 】 〖 $2003 〗(書き込み専用) * $2003 は、スプライトメモリアドレスで スプライトDATAを書き込むアドレスを 指定する、 通常は0を設定。 〖 $2004 〗(読み書き可能) *$2004 は、スプライトデータレジ…

ドラクエ風RPGファミコンプログラム講座

【NES 基礎知識編】 【コントロールレジスタ $2001, $2002 】 〖 $2001 〗 bit7~5: 背景色の強調。 000:強調無し 100:赤色を強調 010:緑色を強調 001:青色を強調 bit4: スプライト描画 s/w。 0:非表示 1:表示 bit3: BG描画 s/w。 0:非表示 1:表示 bit2: スプ…

ドラクエ風RPGファミコンプログラム講座

【NES 基礎知識編】 【コントロールレジスタ $2000 】 *コントロールレジスタ $2000 は、ビットフラグに なっていて各々のBITがs/wになっています。 bit7: VBlank割り込みフラグ 1:割り込み許可 0:割り込み禁止 bit6: PPUマスター/スレーブセレクト 0:マ…

ドラクエ風RPGファミコンプログラム講座

【NES 基礎知識編】 【コントロールレジスタの設定】 *コントロールレジスタは I/Oポートの $2000 と $2001 で、ビットフラグに なっていて、各種の初期化設定はここで行ないます。 【VBlank(垂直帰線区間)】 *VBlankとは垂直帰線区間とも言い、PPUが描…

ドラクエ風RPGファミコンプログラム講座

【NES 基礎知識編】 【Vramのアクセス方法】 *Vramにアクセスするには、I/Oポートのアドレスレジスタ $2006 と データーレジスタ $2007 を使います、データーレジスタを使ううえで注意すべき点 が3つほどあります。 1.データーレジスタは8ビットなので2…

ドラクエ風RPGファミコンプログラム講座 アセンブラ入門編

【アセンブラ入門編】 〖基礎知識編〗 ≪フラグと分岐命令≫ *条件分岐命令の条件としてのキャリーフラグ・ゼロフラグは重要でこの2つは 使いこなせるようにしましょう。 〖ゼロフラグの使い方〗 ☆ゼロフラグは、主にループ制御のカウンターが0になったかを…

ドラクエ風RPGファミコンプログラム講座 アセンブラ入門編

【アセンブラ入門編】 〖基礎知識編〗 ≪ステータスレジスタ≫ *ステイタスレジスタは、条件分岐命令の条件として保持されているもので 頻繫に使われるので、よく理解する必要があります。特にキャリーフラグ、 ゼロフラグは重要でこの2つが使いこなせればゲ…

ドラクエ風RPGファミコンプログラム講座 アセンブラ入門編

【アセンブラ基礎知識編】 *メモリーの構成をメモリーマップといいます、ファミコンのメモリーマップは 下の様になっています。 $0000~$07ff :RAM $0800~$1fff :RAMミラー $2000~$2007 :PPU I/O レジスタ $2008~…

ドラクエ風RPGファミコンプログラム講座 アセンブラ入門編

【アセンブラ基礎知識編】 【アセンブラ入門編】 〖アドレッシングモード〗 *6502はレジスタの数は少ないですが、アドレッシングは比較的豊富です。 アドレッシングとは、オペコードの操作対象になるものです。 1.Implied :暗黙的省略 2.Accumulator …

ドラクエ風RPGファミコンプログラム講座 アセンブラ入門編

【アセンブラ基礎知識編】 ⁂レジスタは、一時的にDATAを入れる箱で計算をしたり、コピーしたりいます。 『レジスタの種類』 1.Aレジスタ:アキュームレータともいわれ主に汎用演算を担っています。 2.Xレジスタ:インデックスレジスタともいわれ主に配列…