ファミコンのプログラム4 (567レス)
前次1-
抽出解除 レス栞

220
(1): 199 [sage] 2014/05/11(日) 23:30:36.97 ID:Mnx9Nf8g(3/3) AAS
皆さんご親切に本当に有難うございます.実際にプログラミングしながら勉強することで,
たくさん吸収出来てます!!

>>212
212(2): 名前は開発中のものです。 [sage] 2014/05/11(日) 14:28:37.07 ID:rGvGrR+8(1/3) AAS
>>199
タイミングめちゃくちゃ&画面ゴミ&遷移時ちらつき&各PPU系メモリ初期化すらできない
こういった初心者はG-NESだけ使ってればいい
そもそも仕組みをちゃんと理解していればこういった不具合を起こすことはない

最近うpる人っていつもこういう傾向だけど、わざと間違えてレス貰う釣りなの?
見た目綺麗だけど不器用で挙動めちゃくちゃなソースの人多いね、BGオンする前にVBlank待たずにチラつかせたりとか
最低限NESTECJ.TXTかndox200.zip理解しとけよ
 ・スプライトメモリの初期化をしていない、Y座標(0xef <= y <=0xff)とするとスプライトはオフになる、Reset:とシーン#1入り口等でやれ
 ・NMI直後にJSR PadGetやる暇はない、まずSPRDMA。プログラムのあちこちにSPRDMAがばら撒かれているのはおかしい
 ・シーンチェンジのVRAM初期化から離脱するときに、VBlankを逃してVRAMに書き込んでる
 ・あなたは当分.macroは使用禁止、これは上級者向け
 ・シーン#1の初期化でPPU $23be-$23bfへ書き込めていない
 ・シーンチェンジの瞬間に下記と同じ理由でカクついていると思う

   シーン#0の初期化の際
inc <BGUPDATED
.g2
jmp EndBG もうこの時点で123ライン程度経過している、つまりブラウン管のど真ん中描画中に
   こんなことをやっている
sta VRAMADDR  これはゴミがでるね
sta SCROLL  カクつくね
lda #%00011110 ; スプライトとBGの表示をONにする
sta PPUCTL1 カクつくね
   この次の箇所へ提案…
パッドはここにおけばいいはず
各〜_playはたぶんここでいい
snddrv_playはここでいい
rti

各シーン初期化最後の inc <BGUPDATED 直後にNMIオンにして大胆にrtiしちゃえばすこしマシになるかな
根本解決にはならないけど
親切にソースチェック&修正案ありがとうございます.
こういう方が即レスくれるのも,さすがこのスレという感じです.
プログラムは,何も考えずに,ここまでとりあえずという感じなので,
皆さんから頂いた意見と,わかったことを入れて,プログラムし直したいとおもいます.

>>218
218(2): 名前は開発中のものです。 [sage] 2014/05/11(日) 21:45:37.94 ID:hyDhkYCi(1) AAS
>>199
□ゲームについて
全体的に良い感じにまとまっていると思いました。
ただ、ミス即ゲームオーバーなので、残機制かライフ制にした方が少し長く遊べて楽しいかなと思います。
あと、果物などのアイテムを出して取ればボーナス点が入るとか。

□プログラムについて
BG書き換えについては、VBlankを深く考えていない実装になっているので、ここから立て直すのはきついと思いました。
205さんの指摘のように、PPUに転送するデータを一旦バッファに入れてVBlank中に転送するフレームワークを作って移行する方が早いかと。
VBlank中にPPUに転送できるデータ量は限界があるので、BG書き換えの実装部分はそれを配慮した作りに直さないと駄目ですね。
PPUへのアクセスに時間がかかるし,BG描画後にVRAM周りにアクセスするとヤバイ
っていうことを知らずに実装していった結果が今のプログラムです.
ご指摘のように,バッファに用意→転送にすることと, VBlankの時間を考慮した
実装にしたいです.

ソース公開は恥ずかしかったですが,頑張って出して良かったです!
想定よりも,皆さんからレスを頂けて嬉しいです.頑張ります!
222: 名前は開発中のものです。 [sage] 2014/05/12(月) 00:13:00.90 ID:p9javgur(1) AAS
>>220
BG描画後にVRAMアクセスがNGではなくて、
非VBlank中にVRAMアクセスするのがNGなんです。(画面が乱れる)
短いVBlank中にVRAMを書き換えるために、バッファにデータを溜め込んでおいて、
VBlank(NMI)割り込みに入ったらすぐにバッファのデータを転送しろってことです。
あと、もちろんですが、スプライトのDMA転送もVBlank中に行わなければなりません。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.830s*