ファミコンのプログラム4 (567レス)
ファミコンのプログラム4 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
159: 名前は開発中のものです。 [sage] 2014/04/14(月) 22:40:16.03 ID:Ye30GFaz >>140 さんに質問です。 勉強にソースを読ませてもらってます〜 タスクのなかが下記のようなフローになっていると思うのですが理解あってますか? ... jsr Yeild ...Vcmd_SequenceDataなど BG書き込み予約系処理、完了時はzフラグで判定... jsr Yeild_Eq (zフラグが立っていた場合は jsr Yieldの直後から再実行) (zフラグが立っていない場合は、下に抜ける) ... また、あってるとしたら、こういうフローっていうのは 8bitなアセンブラだとわりとよくある手法ですか? C言語脳なので、pla pla とかで返りアドレス捨ててるの見て、 どこに帰るんだ〜、とか、しばらく混乱してました(^^; 不躾な質問ですいませんが、お暇だったら見て頂ければ幸いです。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/159
160: 名前は開発中のものです。 [sage] 2014/04/14(月) 23:59:40.63 ID:qn3GgaV0 >>159 立ってる、立ってないが逆 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/160
161: 名前は開発中のものです。 [sage] 2014/04/15(火) 00:19:44.09 ID:Rogly49M >>159 さん > タスクのなかが下記のようなフローになっていると思うのですが理解あってますか? > (zフラグが立っていた場合は jsr Yieldの直後から再実行) > (zフラグが立っていない場合は、下に抜ける) Yesです。 > また、あってるとしたら、こういうフローっていうのは > 8bitなアセンブラだとわりとよくある手法ですか? あまりないかと思います。 ゲーム屋として仕事したことはないので、どのような手法が一般的かは 知らないのですが、現在の進捗状態を番号で管理してジャンプテーブルで 飛ぶみたいな話は聞いたことがあります。 私の場合は、各処理を分解してジャンプテーブルで呼び出すのが 面倒そうだったので、次の呼び出し先のアドレスで管理する方式としました。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/161
162: 名前は開発中のものです。 [sage] 2014/04/15(火) 00:22:16.34 ID:Rogly49M >>160 Yesと書いちゃったけど、確かに、zフラグが立っている場合に抜けるでした。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/162
163: 名前は開発中のものです。 [sage] 2014/04/15(火) 00:24:55.54 ID:4gJhlsqp あ、ご指摘どうもです。逆でした http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/163
164: 名前は開発中のものです。 [sage] 2014/04/15(火) 00:25:59.35 ID:4gJhlsqp あら、、、フラグは z なのに beq/bne だから、頭が混乱する(xx http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/164
165: 名前は開発中のものです。 [sage] 2014/04/15(火) 00:52:17.35 ID:4gJhlsqp すいません、書き込み順の前後で混乱しました。160さんの指摘で正解ですね。 >>161 なるほど〜。ジャンプテーブルより柔軟性がありそうですね。 あと、継続っぽくてカッコイイ。 ありがとうございます http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/165
166: 名前は開発中のものです。 [sage] 2014/04/18(金) 18:15:30.91 ID:jpWSPUfh 画面表示中にパレットを書き換えるサンプルプログラムつくってみたので、興味があるひとはみてみてね。 自分は、情報がなくてけっこう試行錯誤したので。 http://www1.axfc.net/u/3224863 メタルスレイダーグローリーのIRQ割り込みを参考にしたんだけど、 7ラインくらい表示ができないのはしかたないのか。 もっといい方法とかあったら、教えてくだしあ。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/166
167: 名前は開発中のものです。 [sage] 2014/04/18(金) 21:05:20.40 ID:GCyjwP+C >>166 中央が黒いのは、書き換え中に色が付くのを防ぐため? http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/167
168: 166 [sage] 2014/04/19(土) 02:10:32.86 ID:ENCcy0CN >>167 うん。 たぶん、ラスター使えるようになってラスターでパレット変更もできるぜぃ、 と思って試した人(過去の俺とか)は、なぞのゴミが表示されて悩まされてると思う。 そのゴミをHBlankに押し込めるために、16byteの書き換えに7lineも画面表示を消してるって感じです。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/168
169: 名前は開発中のものです。 [sage] 2014/04/19(土) 09:55:49.50 ID:5+3bbh99 >>168 そうですか。知ってたらあれですが、3Dホットラリーはもろ見えてます。 ttp://img.gamefaqs.net/screens/b/3/c/gfs_18759_2_2.jpg http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/169
170: 名前は開発中のものです。 [sage] 2014/04/19(土) 13:11:45.50 ID:ENCcy0CN あ、ほんとだw 実は、3Dホットラリーの名前は以前でてたんで画面見たんだけど、 上2パレット、下2パレットくらいでやってるんじゃない?とおもって、スルーしてた。 ちゃんとパレット書き換えしてたのねw 失礼しますた http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/170
171: 名前は開発中のものです。 [sage] 2014/04/21(月) 00:26:08.69 ID:/pAmCg0v ゴミなんて消してやんよ って思ったら 意外と無理だった if ((!IsRendering) && ((VRAMAddr & 0x3F00) == 0x3F00)) PalIndex = Palette[VRAMAddr & 0x1F]; こんな仕様しらんがな nintendulatorのPPU.cppより http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/171
172: 名前は開発中のものです。 [sage] 2014/04/21(月) 10:13:40.71 ID:LbIV6qH+ おお、こういう原理だったのか。トンクス >>171 ttp://forums.nesdev.com/viewtopic.php?t=1209 コレみて、なんとなくパレットカキコミすると色が出るのは、理解してたんだけど、 細かい挙動はよくわかってなかった。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/172
173: 名前は開発中のものです。 [sage] 2014/04/21(月) 10:17:13.69 ID:LbIV6qH+ ちなみに、これってハードウェア的にはどういう原理なの? 詳しい人いたら教えて。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/173
174: 名前は開発中のものです。 [sage] 2014/04/21(月) 17:28:24.83 ID:rQaSv6+b >>171 そんな断片ソースで理解できるのがすごい。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/174
175: 名前は開発中のものです。 [sage] 2014/04/21(月) 23:59:09.10 ID:/pAmCg0v >>166を改造させてもらった ttp://www1.axfc.net/u/3227965.zip ゴミ消した パレットの0x0dは使えないよ 垂直同期のパルスみたいな電圧になるから http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/175
176: 名前は開発中のものです。 [sage] 2014/04/22(火) 00:47:42.57 ID:Ncm5fcM0 レンダリング止めていればBGの色が出ると思ってた >>166のおかげで本気出せていろいろ勉強になったわ >>172系のやつへの理解向上 レベルが一気に3あがった! rtiの戻り書き換えだとか組み終わった後に ttp://forums.nesdev.com/viewtopic.php?t=6484 full_palette.s の偶奇同期を見つけた この簡潔なソースで横ブレの無さのキモさといったら >>173 BGのレンダリングは内部で$3f00へアクセスするんだろうけど そのバグ挙動なのかね ttp://wiki.nesdev.com/w/index.php/Visual_2C02 これ結局まだいじったことないんだけど、使いこなせれば理解できるのかな!? ところで、また謎現象を見つけてしまった ttp://wiki.nesdev.com/w/index.php/PPU_registers#Bit_0_bus_conflict ttp://forums.nesdev.com/viewtopic.php?p=112424#p112424 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/176
177: 166 [sage] 2014/04/22(火) 03:41:30.42 ID:+4JN+sCM >>175 おおお、これは技術の粋が詰まったコードですね!素晴らしい!! 私もレベル3上昇して、レベル4になった〜 クロック管理が神々しく緻密・・・ ちなみに、ゲームでこのテクニックを使うとすると、IRQが入りそうなタイミングで メインスレッドはnop連打になってないとダメという認識でおk? とすると、実用は難しいけど、、、 ジャストアイデアとしては 2、3ラインくらい前にIRQいれて、一時的にメインスレッドをnop連打ループに切り替えて、 終わったらまたもとのメインスレッドに戻すというのは可能かな? 考えるだけで、脳髄が痛い・・・ >パレットの0x0dは使えないよ 一部の黒はつかっちゃだめというのは聞いてたんだけど、反対におぼえてたみたい(^^; 今後は0x0f使います〜 >>176 の情報も含めて、いろいろありがたい(^^ やっぱり、コードは晒してみるものだなぁ・・・ http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/177
178: 166 [sage] 2014/04/22(火) 03:55:38.11 ID:+4JN+sCM いままでの自分の致命的な間違いに気づいた・・・ nopは2クロックだったのね。1クロックだとばっかり思ってた(^^; よくいままでのコードうごいてたなぁw http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/178
179: 名前は開発中のものです。 [sage] 2014/04/22(火) 18:39:42.31 ID:FEq/t9cI てす http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/179
180: 名前は開発中のものです。 [sage] 2014/04/22(火) 20:21:50.77 ID:SP0raU7v >>175 ソース読ませてもらったけど、 ldy #0 sty $2001 で、PPUのレンダリング止めると、PPUのバスが空くので その間は自由にVRAMアクセスできたと理解していたんだが 違っていたかな? そうであれば、HBlank待つ必要ないので、パレット書き換えで 非表示になるライン数を減らせると思う。 あと、割り込み時にはiフラグが立った状態でルーチンが 呼ばれるので sei は要らないと思う。 http://wiki.nesdev.com/w/index.php/CPU_interrupts#IRQ_and_NMI_tick-by-tick_execution http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/180
181: 名前は開発中のものです。 [sage] 2014/04/22(火) 20:38:14.58 ID:SP0raU7v >>173 PPUのデータのバス(信号線)が1組で、PPUのレンダリング中はVRAMからデータを読み出している。 CPUがVRAMアクセスのためにPPUアドレスを設定するレジスタ($2006)とPPUがネームテーブルにアクセスするアドレスのレジスタが兼用のため、CPUがパレットのアドレスを書き込むとPPUはパレットデータを読み出してレンダリングすることになる。 と理解しているのですが、間違っていたら指摘お願いします。>他の人 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/181
182: 166 [sage] 2014/04/22(火) 20:46:59.02 ID:+4JN+sCM >>180 >で、PPUのレンダリング止めると、PPUのバスが空くので >その間は自由にVRAMアクセスできたと理解していたんだが >違っていたかな? そう思ってたんだけど、PPUのアドレスレジスタが0x3f**だと、 **の色(=ゴミ)が出力されるっていうのが、171のコード片の意味。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/182
183: 166 [sage] 2014/04/22(火) 20:59:26.06 ID:+4JN+sCM >>181 なるほど〜、 ハードウェアは素人(簡単なワンチップマイコンをいじったくらい) なんで、解説してもらえて助かるっす。ありがと〜 用語があってるかわからないけど、バスコンフリクトってやつでいいのかな? あとチップに損傷を与えたりはしないのかしら・・・ まぁ、あとは電子回路関係の情報で調べてみます。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/183
184: 166 [sage] 2014/04/22(火) 21:04:00.85 ID:+4JN+sCM 連投でスマソ >>181 追加で疑問。 そうすると、0x3f**以外のアドレスでも、そのアドレスのVRAMデータの色が出力されそうなんだけど、 0x3f**以外ではそうはならないみたいなんだよね・・・ これはレジスタ兼用でもそうならないものなのかな? http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/184
185: 名前は開発中のものです。 [sage] 2014/04/22(火) 23:02:12.52 ID:SP0raU7v >>182 なるほど、了解です。 自分も実験してみよう。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/185
186: 名前は開発中のものです。 [sage] 2014/04/22(火) 23:13:05.47 ID:SP0raU7v >>184 The PPUDATA read buffer (post-fetch) ttp://wiki.nesdev.com/w/index.php/PPU_registers#The_PPUDATA_read_buffer_.28post-fetch.29 ここに $0000-$3effは内部リードバッファから返すが、$3f00-$3fffは(PPU内部の)データバスに直接配置されている と書かれているので、この辺りの差で挙動が変わるっぽいですね。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/186
187: 名前は開発中のものです。 [sage] 2014/04/22(火) 23:47:45.15 ID:Ncm5fcM0 >>180 >seiは要らない しまった、モロ立ってた どうも >>181 パレット$3fxxは通常はPPU内部アクセス、つまり擬似NTSC信号を生成する回路とのやりとりであって 普通のPPU空間には出力されないとどこかに書いてあった気がする ttp://nesdev.com/2C02%20technical%20reference.TXT - palette RAM is accessed internally during playfield rendering (i.e., the palette address/data is never put on the PPU bus during this time). ttp://wiki.nesdev.com/w/images/d/d1/Ntsc_timing.png 画像の通りパレットのアクセスはない しかしこういう挙動もある、これはレンダリング止めた場合だろう? Additionally, when the programmer accesses palette RAM via $2006/7, the palette address accessed actually does show up on the PPU address bus, but the PPU's /RD & /WR flags are not activated. この辺あやしいね http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/187
188: 名前は開発中のものです。 [sage] 2014/04/22(火) 23:59:55.97 ID:Ncm5fcM0 >>177 今回はjmp *にしてもHBlankに収まるっぽく大丈夫なようですが 127 line目で $2001のレンダリングオフにする瞬間の PPU tickのばらつきが 249〜254 nop連打の場合 249〜257 jmp連打の場合 ばらつきが3dot分増えることになります 市販ゲームのIRQ関係もゴミだらけだし気にすることはない 直前に入れるのはいいアイディアだね http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/188
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 379 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.014s