ファミコンのプログラム4 (567レス)
ファミコンのプログラム4 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
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
193: 名前は開発中のものです。 [sage] 2014/04/24(木) 10:17:47.73 ID:TazbtZqQ >>192 FCEUXがおすすめ。 (読/書/実行)ブレークポイント、スキャンラインごとのVRAM内容表示、RAMウォッチ あたりの機能をよく使ってる。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/193
194: 名前は開発中のものです。 [sage] 2014/04/24(木) 11:46:44.27 ID:RDg08ToE ありがとう http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/194
195: 名前は開発中のものです。 [sage] 2014/04/24(木) 21:06:44.07 ID:Ozv2HHx1 ブレークポイントの使いやすさは G-NESじゃないか よっぽどトリッキーなコーディングしないならこれで十分 G-NES は使いやすい、指定行まで実行がStepOverを兼ねる FCEUX はログ機能が最強、シンボル機能搭載、エミュ精度も結構よい Nintendulator はデバッガ付きではエミュの精度が最強かな、使いにくい http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/195
196: 名前は開発中のものです。 [sage] 2014/04/24(木) 23:37:48.91 ID:d8WjRMEc >>191 そう、スプライトと共通(04=14、…) 僕は実機で確認したけど、nendoかnestopiaと同じなら間違いないだろうな。 古いネット上のドキュメントとか間違ってたりするから100%鵜呑みにしない方がいいよ(エミュのソースも)。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/196
197: 名前は開発中のものです。 [sage] 2014/04/25(金) 00:53:39.01 ID:ffWieyHe G-NESは使ってなかったから、ちょっと触ってみた。 デバッガは、FCEUXとG-NESほぼ同等やね。 ちょっとわかりにくいけど、アドレスクリックして"Seek To"で指定行まで実行もできるし。 (この機能が超欲しかったけど、いま探すまでアドレスクリックで指定できるの気付かなかったw) しかし、FECUXのシンボル情報って吐き出してくれるコンパイラあるのかな・・・ 使えれば便利そうなんだけど。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/197
198: 名前は開発中のものです。 [sage] 2014/05/10(土) 18:53:04.15 ID:ShrxaRho マッパー0のカセットを何本か作りたいんですが 既存のソフトのHVC-NROM-256K-02基板からICを外すのが面倒なので プリント基板だけを通販しているところとかないですかね? もしくは,CADデータとか. http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/198
199: 名前は開発中のものです。 [sage] 2014/05/10(土) 19:06:34.44 ID:ShrxaRho ちなみに作りたいカセットとはこれです. この1週間ちょっと頑張ってインプリしてました. アセンブラなんか普段いじらないので,めちゃくちゃです. でも,このスレはちょくちょく見てるので,恩返しに公開します. ttp://sayonari.com/famicom/FamilyBird.zip 綺麗に書き直したかったですが,しばらくいじれそうにないので, 皆さんに託します. FCEUXではちゃんと動くんですが,ROMに焼いて, FC互換機(GCC NEXT)で動かすと, スプライトがチラチラと画面中に散らばって表示されます. メモリ管理とかちゃんとしてないし,変なところに書き込んだり, PPUアクセスのタイミングがむちゃくちゃだったりとかが原因だと思います. 互換機じゃなくて正規版本体ならちゃんとうごくのかな・・. http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/199
200: 名前は開発中のものです。 [sage] 2014/05/10(土) 19:40:22.36 ID:WvHa+XO0 そこまでやって正規版FCを持っていないというのが謎過ぎる 高いわけじゃないんだから普通に買えばいいのに http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/200
201: 名前は開発中のものです。 [sage] 2014/05/10(土) 20:09:58.52 ID:vMtYsoKB >>199 スプライトDMAの前に$2003に$00入れるといいかも http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/201
202: 名前は開発中のものです。 [sage] 2014/05/10(土) 20:52:41.78 ID:ShrxaRho >>201 すごい!かなり軽減されました.しかしまだチラチラがあります. しかしさすがのアドバイスありがとうございます.勉強になります. http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/202
203: 名前は開発中のものです。 [sage] 2014/05/10(土) 21:59:03.95 ID:2fP2DbGG なんで土管に触っただけで死ぬんだ こんなクソゲー久しぶりに見たわ http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/203
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 364 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.009s