ファミコンのプログラム4 (567レス)
上下前次1-新
345(1): 2014/10/06(月)23:47 ID:5bZUXl8p(1) AAS
>>344
160発を56個のスプライトで表示しているので、
大体3フレームに1回の表示でちらつきが目立ちます。
次の版は、96発にスペックを落とすので、
2フレームに1回の表示になるので多少は改善されるはず。
MMC5は魅力的なのですが、最終目標が実機での動作なので
勿体無くないMMC3で頑張ろうと思っています。
あと、負荷は弾丸の処理が半分以上占めているので
MMC5を使っても状況はあまり変わらないかと思います。
すでに96発MAXに書き換えて、弾丸1つ辺り5byteの領域から
8byteに増えて、Tile番号と属性値が保持できるようになったので
処理が軽くなりました。
弾丸の角度の変化が無ければ、Bombの下辺りまでの
処理時間で済んでいます。
346: 2014/10/07(火)04:35 ID:3yj7hFfS(1) AAS
>>345
1/2フレーム表示ならグラIIのミサイルなどで使ってましたね
欲を言えばですが、弾数が少ないときは1/1フレームで表示出来たら
いいかも
試しに割り込み無しにしたところ18ライン分くらい処理が減ってました
MMC5自体は光栄のゲームで結構出回ってるので入手は簡単かと
思いますが、今更変えるのもあれですね…
期待してますので頑張ってください
347(1): 2014/10/09(木)21:46 ID:44sWDsnn(1/2) AAS
NESASMでアセンブルしたNESファイルは自作カートリッジに焼く時もそのまま使えるんですか?
348(1): sage 2014/10/09(木)21:50 ID:hFc1Ndfq(1/3) AAS
RevolvingGems 1.00を実機で動かしたら不具合が出たので、
今さらですが調べて直してみました。
・タイトル画面の表示が乱れる
ウエイトが足りず、割込み処理での最後の$2006への書込みが
HBLANK中に行われていないようので、user.asmのUser_Irq_Title:直後に
nopを(余裕を持たせて)3つ追加して乱れを消しました。
・あそびかたを選ぶと止まる
タイトルで設定された割込みが無効化できずに発生し続けているようです。
Guide_Init:でIRQ_FNC+1を0にしたことで、
Irq:のjsr IRQ_FNC-1が飛ばされるため、
User_Irq_Title:中での割込みの無効化が動かないのが原因と思います。
user.asm 474行目のsta IRQ_FNC+1をコメントアウトして動くようになりました。
349: 2014/10/09(木)21:51 ID:hFc1Ndfq(2/3) AAS
sage間違えたorz
350(1): 2014/10/09(木)21:56 ID:hFc1Ndfq(3/3) AAS
>>347
kazzo+anagoのような環境だと直接NESファイルを使って書けますね。
ROMライタで直接書き込む場合だとPRGとCHRへの分割が必要かと。
351: 2014/10/09(木)22:09 ID:44sWDsnn(2/2) AAS
>>350
ありがとうございますNESplitという分割ツールがありました。
352(2): 2014/10/09(木)23:56 ID:EgCI09Ne(1) AAS
>>348
実機での動作確認ありがとうございます。
>タイトル画面の乱れ
割り込みが入ってから110clk目に最後の$2006を書いていたのですが、
nop3つ追加ということで、116clk目が正解ということですね。
今のやつも直さないと。
>あそびかたを選ぶと止まる
VBlank中にIRQ_FNCを更新する仕組みを追加します。
353(1): 2014/10/10(金)00:27 ID:giiUNY1I(1/2) AAS
>>352
MMC3だとラスタの260ppu_clk辺りで割込み発生みたいなので、
そこから次ラスタの表示期間終了の256ppu_clkまでの、
(341-260)+256=337ppu_clk = 112.3cpu_clk
が必要な待ち時間だと思います。
sta $2006を確実にHBLANKに入れるために+4clkしましたが、
書込みが最後の1clkに行われるとすれば、数クロック削れるかもしれません。
354(1): 2014/10/10(金)21:22 ID:giiUNY1I(2/2) AAS
>>352
追実験して、nopは一つでも乱れは消えました。
割込み発生から最後のsta $2006完了までが112clkになるので、
ちょっとぎりぎりな感じはしますが。
355: 2014/10/11(土)11:53 ID:JCcDlcCt(1) AAS
>>353
外部リンク:wiki.nesdev.com
Regarding PPU A12 rises:
If the BG uses $0000, and the sprites use $1000, then the IRQ will occur after PPU cycle 260 (as in, a little after the visible part of the target scanline has ended).
If the BG uses $1000, and the sprites use $0000, then the IRQ will occur after PPU cycle 324 of the previous scanline (as in, right before the target scanline is about to be drawn).
When using 8x16 sprites: When there are less than 8 sprites on a scanline, the PPU makes a dummy fetch to tile $FF for each leftover sprite. In 8x16 sprite mode, tile $FF corresponds to the right pattern table ($1000).
PPUアドレスバスA12がスキャンラインカウンタのクロックとなっている。
The counter is clocked on each rising edge of PPU A12, no matter what caused it, so it is possible to (intentionally or not) clock the counter by writing to $2006
BGとSPRをどっちに配置するかで、立ち上がり、立下りが変わるので、
IRQが起きる位置とライン数が変わるようだ。
356: 2014/10/13(月)07:14 ID:khCfiiiQ(1) AAS
>>354
追試ありがとうございます。
clkを伸ばした場合、エミュレータでどうなるか確認したのですが
こちらでは1clk伸ばしただけでも乱れが発生しました。
実機向けとエミュレータ向けの2つのバイナリを用意する必要があるようです。
357: 2014/10/20(月)02:34 ID:VhFQD/az(1) AAS
だれかギコ猫より分かりやすいサイト作って
もしくは解説コメント付きのソース
358: 2014/10/27(月)22:58 ID:WLPSmV4W(1) AAS
ギコ猫があるだけ恵まれた環境。1990年代のネットはファミコンの
内部資料は英語しか無かったからね。だから普通に挫折した。
359: 2014/10/28(火)05:34 ID:40z/j/Ad(1) AAS
バッ活とファミリーベーシック
360(2): 2014/11/05(水)02:06 ID:8FC6s1LF(1/5) AAS
Experi9(>>343)の改良版をアップしました。
外部リンク[zip]:homepage3.nifty.com
結局のところ、ファミコン本体の2KBのWRAMだけでは
性能面を向上させつつ、やりくりするのは難しいとわかったので
MMC3の拡張WRAMを解禁、弾丸のワーク領域をそちらに移しました。
本体のWRAMに余裕が出来たので、マップの仮想バッファを
倍に増加して、既存の処理を最適化して負荷を下げました。
色々なテーブルを乗せている関係で、共通ルーチン用のプログラム領域の
サイズが足りないか不安になってきたのですが、拡張WRAMの空き領域に
プログラムを転送すれば良い事に気づき、さらにRAMに転送するんだから
自己書き換えルーチンにできるな、ということで、自己書き換えで性能が
上がりそうなルーチンを試作してみました。
あと、当たり判定実装したり、弾丸の移動処理作ったり、BGM鳴らしてみたりで
処理落ちしないのを確認できたので、性能面で目処が立ったかなというところです。
361: 2014/11/05(水)02:20 ID:8FC6s1LF(2/5) AAS
試作した自己書き換えルーチンその1
ClearExtWorkMemory:
ldy #$60
lda #$00
tax
.1:
sty SMCLabel(.2+2)
.2:
sta $6000,x
inx
bne .2
iny
cpy #$68
bne .1
rts
SMCLabelは、転送先のアドレスに変換するユーザ関数です。
sta $6000,xの$60を書き換えています。
Indirect Indexモード 6clkに対して、Absolute Indexモード 4clkで
((6clk-4clk)*256-4clk)*8 = 4064clkの節約。
362: 2014/11/05(水)02:32 ID:8FC6s1LF(3/5) AAS
試作した自己書き換えルーチンその2
Shot_Alloc:
ldx SMCLabel(.2+1)
.1:
lda SH_X,x
bmi .9
lda Round96+1,x
tax
.2:
cpx #0
bne .1
.db $24 ; bit <$b8 (set v-flag)
.9:
clv
lda Round96+1,x
sta SMCLabel(.2+1)
rts
cpx #0の#0の部分を書き換え。
弾丸の空きを検索するルーチンで、次回の検索時は空きを検出した
次の場所から検索を始める処理となっています。
Round96は、0,1,2,...94,95,0,1,..と定義されているテーブルで
lda Round96+1,x で (x+1)%96 の計算をしています。
ゼロページの$b8には、$6cが格納されており、bit <$b8 でv-flagが設定されます。
空きがない場合にv-flagが設定されてリターンします。
363: 2014/11/05(水)02:43 ID:8FC6s1LF(4/5) AAS
ファミコンのプログラム領域はROMだし、メモリも余裕無いから、
自己書き換えルーチンには縁が無いと思っていたのですが、
拡張WRAM使うとなると、有効な手段であるなと。
ただ、よく考えないと自己書き換えやっても効果を得られないので
どのようなパターンが有効か思考する必要ありだなというところです。
364(1): 2014/11/05(水)11:50 ID:kV2Q14jG(1) AAS
>>360
おお、スプライトも見易くなりましたね。
実機(MMC3B)でExperi10.nes焼いて動かしてみましたが、BGが結構
崩れています。
Experi10_irq114.nesですとBGが崩れはしませんが東方の文字の中心あたり
からチラチラしています。
また、東方を知らないのでわかりませんが会話表示とスクロールをするとたまに
BGが崩れるようです。
(バンク切り替えに失敗したような感じで別の絵が出てました)
参考になれば
365: 2014/11/05(水)18:36 ID:8FC6s1LF(5/5) AAS
>>364
実機での確認ありがとうございます。
会話画面表示時のBG崩れは、IRQのCHR-BANKの切り替えと
メイン処理のPRG-BANKの切り替えの衝突です。
PRG-BANKの切り替えは弾丸の移動量や角度算出のテーブル引きで使用しており、
会話画面では行わなくなるので、現在そのままにしています。
366: 2014/11/08(土)23:22 ID:K8lCFBpt(1) AAS
ファイル実行したけど会話画面っていったい何のことなんだ
367(1): 2014/11/09(日)03:54 ID:/2f/mjgU(1) AAS
セレクトボタンを押しながら上下でバックグラウンドのスクロール量調整
同じく左右で会話画面、ボスHPゲージ消去などができる
368: 2014/11/18(火)00:24 ID:sul/9y5g(1) AAS
今月号(先月号から?)のゲーラボに、ファミコンソフト開発って記事が載ってた
初歩的な奴だったから、今月号からかも。立ち読みしかしてないけど
369: 2014/11/22(土)00:37 ID:6HaTj4+E(1) AAS
ゲーラボのファミコン開発は1回のみなのかな
DSみたいに連載して欲しいなーと思う
好奇心的な需要が有るんではないかと思ったり
>>360
弾幕が素晴らしいです。ファミコンでは史上初?なのではないでしょうか
BGのIRQスクロールも面白いです。
>>367
参考になりました。ありがとうございます。
370: 2014/11/24(月)07:57 ID:+tDgRqjL(1/2) AAS
このスレに常駐して間違いを指摘してる人は何者なのかね?
元ハドソンの中○さん?
371: 2014/11/24(月)08:33 ID:+tDgRqjL(2/2) AAS
もしかしてカル○ャーブ○ーンのあの社長か?
372: 2014/11/24(月)19:13 ID:7xFBwqHN(1) AAS
おい、具体名だすんじゃねえ
373: 2014/12/27(土)07:48 ID:wLqAfx70(1) AAS
このスレではみなさんからのプログラムの投稿をお待ちしています
374: 2015/01/05(月)20:34 ID:AkF9WUbO(1) AAS
>>83-85は進展無し?と思ってみたらもう2年前か
上下前次1-新書関写板覧索設栞歴
あと 193 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.008s