2020-01-01から1ヶ月間の記事一覧

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

【第44回】 『MAPDATA取得とタイルパターン表示までの流れ』 1.MAPDATA取得 MAPの先頭アドレスと map_x、map_y のoffsetによってタイルIDを取得, 計算式は MAPの先頭アドレス+MAPの横幅*map_y+map_x で求められる。 【例】 MAPの先頭アドレス = $e000…

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

【第43回】 『MAPタイルの表示』 1.MAPタイルの構成 maptile は、16x16 のサイズで下記のように 4byte で構成されます。 Tip_data: .db $00,$00,$00,$00 ;海 .db $01,$02,$03,$04 ;草原 .db $58,$59,$5a,$5b ;祠 ⁂DATAはBG用タイルパターンのIDです【下…

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

【第42回】 『マップ描画編』 1.ファミコン(NES)の画面構成 NESには、ネームテーブルというテキスト画面が1面とスプライトがあす。 テキスト画面は、256x240 (8x8キャラ)で32x30の表示が可能、 水直ミラーリング時には、512x240・水平ミラーリング時…

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

【第42回】 『マップ描画編』 1.ファミコン(NES)の画面構成 NESには、ネームテーブルというテキスト画面が1面とスプライトがあす。 テキスト画面は、256x240 (8x8キャラ)で32x30の表示が可能、 水直ミラーリング時には、512x240・水平ミラーリング時…

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

【第41回】 *今回は、ゲームメインと画面消去ーチンです。 【割り込みルーチンの時間制限】 *ファミコンのVRAMアクセスは大変遅く、1度に全画面消去できません。 分割して行う必要があります。 *Vram 1画面は、$2000~$23bf で 32x30=960 byte になり…

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

【第40回】 *今回は、ゲームメインの構造とWAITルーチン。 【割り込みルーチンの特徴】 1.ファミコンのメインルーチンは、VBlank割り込みを使うのが、 一般的です、VBlank割り込みには注意すべきことがあります。 それはファミコンのBG(VRAM)は、アク…

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

【第39回】 *今回は、string:の改造を行います、 string: ldy #0lp2: lda str_data,x sta str_buff,y inx iny cmp #$ff bne lp2 ldy #0lp1: lda str_buff,y iny cmp #$ff beq exit sta $2007 jmp lp1exit: jsr scroll_zero rts *今回は、8ビットの10進…

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

第38回 *今回は、8ビットの10進数変換済文字列を表示します。 範囲(0~255) 1.100で割る、商が100の桁。 2.10で割る、商が10の桁。 3.余りが1の桁。 ⁂下記のコードは、前回ののものを修正したものです。 deci100: cmp #100 bcc deci10 ;dat…

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

第37回 *今回は、予定を変更して、10進数変換(8bit)0~255 です 1.100で割る、商が100の桁。 2.余りを10で割る、商が10の桁。 3.余りが1の deci100: cmp #100 bcc deci10 ;dataが#100より小さい時ループを抜ける sec ;キャリーフラグをセットする…

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

第36回 *今回は、ステータスの表示の準備の続編です。①HP・MP・L:の表示②fontの追加③ウインドウ用FONTの追加 ④記号の追加(* :) ;***************** DATA ********************************* .bank 2 .org $0000 .db $00,$00,$00,$00,$00,$00,$00,$0…

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

第35回 *今回は、ステータスの表示の準備です。①HP・MP・L:の表示②fontの追加③数字の追加(0~9) ④アルファベットの追加(M・P・G) .bank 2 .org $0000 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ; .db $3C,$42,$42,$42…

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

第34回*今回は、文字列出力ルーチン string 【文字列表示ルーチン】 『string:』*string の仕様 1.文字列DATAを用意する(str_data:) エンドコードは $ff 2.表示用 str_buff をRAMエリアに確保する。 3.表示開始アドレス座標をloc_x、loc_yにセ…

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

第34回*今回は、文字列出力ルーチン string 【文字列表示ルーチン】 『string:』*string の仕様 1.文字列DATAを用意する(str_data:) エンドコードは $ff 2.表示用 str_buff をRAMエリアに確保する。 3.表示開始アドレス座標をloc_x、loc_yにセ…

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

第33回*今回は、前回の1文字出力ルーチン(C言語でいうとPUTCHAR) の動作チェック【ライブラリーの作成追加】 *ライブラリーの作成上の注意点。 1.凡庸性を持たせること 2.使用レジスタの選び方 3.変数を使う必要性『putchar』*char_print:の仕…

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

第32回前回の予告では、文字列表示の予定でしたが1文字出力ルーチンに変更しました。*char_print:の仕様書き込み位置のVRAMアドレスをBUFFにストア後、書き込むDATAを渡すDATAの受渡し方法はなん通りかあるが、呼ぶ側のサブルーチンの構造に合わせて使い…

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

第31回 *今回は、TEST用プログラムの動作確認です。【メインループとメインカウンタ】*メインループとメインカウンタの動作の検証。 【画像1】 *Hex Editor でZEROPAGEの$00番地が変化しているのでループは 正常に動いているのがわかる。 【ゼロページ…

ドラクエ風RPGファミコンプログラム講座 ゲームシステム編

第30回*今回で30回をかぞえます、急いで走り抜けたので まとまりの無い内容になったかと思います いままでの回も見直す時期に来たように感じます、 少しずつ修正したいと思います。 【ゲームとメインループ】*ゲームループは ゲームシステムには、欠かせ…

ドラクエ風RPGファミコンプログラム講座 ゲームライブラリー編

第29回*今回は、任意の位置に文字列を表示するサブルーチンです。【ロケーションと文字列表示】 string_buffに文字列DATAをセット、エンドコードは $ffです。X座標とY座標を変数loc_x,yにセットして locate:をサブルーチンコールVRAMアドレスを取得し st…

ドラクエ風RPGファミコンプログラム講座 ゲームライブラリー編

第29回*今回は、任意の位置に文字列を表示するサブルーチンです。【ロケーションと文字列表示】 string_buffに文字列DATAをセット、エンドコードは $ffです。X座標とY座標を変数loc_x,yにセットして locate:をサブルーチンコールVRAMアドレスを取得し st…

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

第28回【変数とゼロページ】 について解説します。*アセンブラで変数を扱うには、RAM上にDATA領域を確保する必要があります、ファミコンには、ゼロページという変数用の領域があり高速に動作し準レジスタとして、扱うことができます。『特徴』1.…

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

第27回*今回は、BG(背景)座標とVRAMアドレスの算出 任意の位置にパターンを表示するにはX、Y座標を基に 表示位置を計算する必要がある。 『VRAMとアドレス』 *計算式は $2000+32*y+x になります。*Vram_add という2byteの領域を確保し $2000(Vram先…

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

第26回*今回は、BG(背景)の描画の実習です。 先ずは、パターンデータ を用意する ⁂BG用パターンテーブルのセレクトはコントロールレジスタ($2000)のBIT4で行います、 0.$0000 1.$1000 今回は、0に設定する。 .bank 2 .org $0000 .db $00,$00,$0…

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

第25回*今回は、BG(背景)の描画手順を解説していきます、 ファミコンのがBGは大変複雑で、解説が後回しになったのはその為です。 ファミコンのハードについて、少しふれておきます。 ファミコン画面の解像度は、256×240で 16×16のタイルパタ…

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

第24回*今回は、初期化の最終段階のゼロページの初期化です。【ゼロページの初期化とVBlank】 『ゼロページの初期化の初期化』*ファミコンは変数として使われるゼロページ($0000 - $00FF の256バイト)を初期化する必要があります。 (実例コード)z…

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

第23回☆パレットの設定ルーチンのサブルーチン化 『JSR命令とRTS命令』*JSR命令は、サブルーチンの呼び出しで RTS命令は、サブルーチンからの復帰する命令です。 『サブルーチン化の実例』 ldx #%00001000 ;BG.SPRITEの表示OFF sta $2000 ldx #%00000000 …

第23回☆パレットの設定ルーチンのサブルーチン化『JSR命令とRTS命令』*JSR命令は、サブルーチンの呼び出しで RTS命令は、サブルーチンからの復帰する命令です。『サブルーチン化の実例』 ldx #%00001000 sta $2000 ldx #%00000000 sta $2001 jsr VB0 lda …

ドラクエ風RPGファミコンプログラム講座 初期化の再考

第22回 ☆今回は、これから本格的なプログラミングに入っていくまえに 初期化について、再考します。 【ファミコンの初期化】1)初期化1:プログラムが走る状態。*headerの設置 .inesprg 1 .ineschr 1 .inesmir 1 .inesmap 0 ⁂上の2行は、4行目のマッパ…

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

第21回【アセンブラ入門編】『算術演算命令』*6502に、加算、減算命令は1つずつありますが、キャリーフラグ付き加算命令なので注意が必要です、 加算(ADC):Aレジスタとオペランドを加算し、キャリーフラグを加算します。(例) Aレジスタに100を…

ドラクエ風RPGファミコンプログラム パレットの設定完全版

第20回【パレットの設定完全版】 .inesprg 1 ;プログラミングのバンク数。 .ineschr 1 ;キャラクターデーターのバンク数。 .inesmir 1 ;ミラーリング 0.水平 1.垂直 .inesmap 0 ;マッパーナンバー;************************************************ .ba…

ドラクエ風RPGファミコンプログラム レジスタとアドレッシングモード

第19回【アセンブラ入門編】『レジスタとアドレッシングモード』1.レジスタの種類 P:プロセッサステータス(フラグレジスタ) *演算結果の状態を保持する。A:アキュムレータ *算術演算、論理演算、BITシフト、ローテト等の演算用。X:インデックスレ…