ファミコンのプログラム4 (563レス)
ファミコンのプログラム4 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
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
189: 名前は開発中のものです。 [sage] 2014/04/23(水) 17:56:22.78 ID:eYt0ULQB >>186 >>187 なるほど、、、 まだ理解してないけど、このあたり読めばわかる気がしてきた。ありがと しかし、PPUのアドレスレジスタの兼用さえなければ、レンダリング中に読み書きできて BGアニメーションとかもっと便利だったろうにって思ってたけど、 Ntsc_timing.png みるかぎり、ひっきりなしにアクセスしてるんだね・・・ とするとメモリポートが2つないとだめだから、結局は無理だったのか。 >>188 了解。 sei/cliさえしなければ最大6クロックだから、6*3=18dot(nopにくらべて12dot大きく) ずれるのが許容できればおkってことね。 許容できるのか、計算するのが大変だけど(xx http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/189
190: 名前は開発中のものです。 [sage] 2014/04/23(水) 20:09:45.06 ID:yop1NMPn この現象で分った事。 パレットの04 08 0Cは00とは別の値を格納できるが、実用上何も使われていないと言う事(合ってるよね?)。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/190
191: 名前は開発中のものです。 [sage] 2014/04/23(水) 21:35:50.97 ID:bXRTGLw+ ↑あってるっぽい ただしスプライトの四の倍数とは共有か void _fastcall Write7 (int Val) { if ((VRAMAddr & 0x3F00) == 0x3F00) { register unsigned char Addr = (unsigned char)VRAMAddr & 0x1F; Val = Val & 0x3F; Palette[Addr] = (unsigned char)Val; if (!(Addr & 0x3)) Palette[Addr ^ 0x10] = (unsigned char)Val; http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/191
192: 名前は開発中のものです。 [sage] 2014/04/24(木) 07:57:06.72 ID:RDg08ToE 流れぶったぎるようで申し訳ないけど、デバッガ機能が一番使いやすいNESエミュはどれですか? http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/192
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 371 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.526s*