1 名前:名前は開発中のものです。 mailto:sage [2012/07/29(日) 14:19:03.64 ID:a5QeqSA0.net] ■過去スレ ファミコンのプログラム pc8.2ch.net/test/read.cgi/gamedev/1013696305/ ファミコンのプログラム2 pc11.2ch.net/test/read.cgi/gamedev/1135099156/ ファミコンのプログラム3 toro.2ch.net/test/read.cgi/gamedev/1214210285/ ■関連サイト MagicKit Homepage www.magicengine.com/mkit/ すずめ愛好会 web.archive.org/web/*/http://vsync.org/ns/index.html ギコ猫でもわかるファミコンプログラミング gikofami.fc2web.com/ わいわいの巣 www.geocities.jp/yy_6502/ mck hogehoge takamatsu.cool.ne.jp/dutycycle/ NES info, programs, and demos nesdev.parodius.com/ pgate1@crystal crystal.freespace.jp/pgate1/ cc65 @ wiki www34.atwiki.jp/cc65/
154 名前:名前は開発中のものです。 mailto:sage [2014/04/14(月) 19:58:14.37 ID:BSoZ156l.net] >>151 テトラスターは知らなかったんで見てきた。おんなじ感じっす。 それにしても、バンク切り替えでやるのか…すげーな。 ちゃんと地形の模様になってんだもん、良く考えついたもんだ。 いま手元にないんでアレだけど、そのうちデバッガで見てみたい。 >>151 思いついたのか、発想力すげー…。
155 名前:名前は開発中のものです。 mailto:sage [2014/04/14(月) 20:06:28.23 ID:dbr8gs6R.net] >>153 最初、指摘の通り、カーソル枠を台形にして、▽か△かわかるようにしたのですが、 カーソル移動時にうねうねカーソルの形が変わるのが気持ち悪く感じたので、 今のただの四角にしています。
156 名前:名前は開発中のものです。 mailto:sage [2014/04/14(月) 21:32:22.23 ID:qn3GgaV0.net] >>148-150 >>131 自演気持ち悪い わかってないからってファビョって「他人」を弁護?w >>148 >「アトリビュートテーブルの制限で、パレットが2x2BGキャラクタごとにしか >指定できないのを回避するために、ラスターでずらしてるのね」 >まで言わないと伝わらない? 伝わってるからそれは違うって言ってるんだけどね 手を動かしていてもね 延々と即値でスプライト初期化してたから変な奴と思ったらやっぱりな ずらしてパレット指定の限界突破という謎技術を語ってる人が他にもいるようだけど
157 名前:145 mailto:sage [2014/04/14(月) 22:05:09.05 ID:Ye30GFaz.net] >>131 の名誉のために、131と私は別人だよ。 スレのためにもう返事はしないし、あなたが正しいってことでいいよ(^^
158 名前:名前は開発中のものです。 mailto:sage [2014/04/14(月) 22:40:16.03 ID:Ye30GFaz.net] >>140 さんに質問です。 勉強にソースを読ませてもらってます〜 タスクのなかが下記のようなフローになっていると思うのですが理解あってますか? ... jsr Yeild ...Vcmd_SequenceDataなど BG書き込み予約系処理、完了時はzフラグで判定... jsr Yeild_Eq (zフラグが立っていた場合は jsr Yieldの直後から再実行) (zフラグが立っていない場合は、下に抜ける) ... また、あってるとしたら、こういうフローっていうのは 8bitなアセンブラだとわりとよくある手法ですか? C言語脳なので、pla pla とかで返りアドレス捨ててるの見て、 どこに帰るんだ〜、とか、しばらく混乱してました(^^; 不躾な質問ですいませんが、お暇だったら見て頂ければ幸いです。
159 名前:名前は開発中のものです。 mailto:sage [2014/04/14(月) 23:59:40.63 ID:qn3GgaV0.net] >>158 立ってる、立ってないが逆
160 名前:名前は開発中のものです。 mailto:sage [2014/04/15(火) 00:19:44.09 ID:Rogly49M.net] >>158 さん > タスクのなかが下記のようなフローになっていると思うのですが理解あってますか? > (zフラグが立っていた場合は jsr Yieldの直後から再実行) > (zフラグが立っていない場合は、下に抜ける) Yesです。 > また、あってるとしたら、こういうフローっていうのは > 8bitなアセンブラだとわりとよくある手法ですか? あまりないかと思います。 ゲーム屋として仕事したことはないので、どのような手法が一般的かは 知らないのですが、現在の進捗状態を番号で管理してジャンプテーブルで 飛ぶみたいな話は聞いたことがあります。 私の場合は、各処理を分解してジャンプテーブルで呼び出すのが 面倒そうだったので、次の呼び出し先のアドレスで管理する方式としました。
161 名前:名前は開発中のものです。 mailto:sage [2014/04/15(火) 00:22:16.34 ID:Rogly49M.net] >>159 Yesと書いちゃったけど、確かに、zフラグが立っている場合に抜けるでした。
162 名前:名前は開発中のものです。 mailto:sage [2014/04/15(火) 00:24:55.54 ID:4gJhlsqp.net] あ、ご指摘どうもです。逆でした
163 名前:名前は開発中のものです。 mailto:sage [2014/04/15(火) 00:25:59.35 ID:4gJhlsqp.net] あら、、、フラグは z なのに beq/bne だから、頭が混乱する(xx
164 名前:名前は開発中のものです。 mailto:sage [2014/04/15(火) 00:52:17.35 ID:4gJhlsqp.net] すいません、書き込み順の前後で混乱しました。160さんの指摘で正解ですね。 >>160 なるほど〜。ジャンプテーブルより柔軟性がありそうですね。 あと、継続っぽくてカッコイイ。 ありがとうございます
165 名前:名前は開発中のものです。 mailto:sage [2014/04/18(金) 18:15:30.91 ID:jpWSPUfh.net] 画面表示中にパレットを書き換えるサンプルプログラムつくってみたので、興味があるひとはみてみてね。 自分は、情報がなくてけっこう試行錯誤したので。 www1.axfc.net/u/3224863 メタルスレイダーグローリーのIRQ割り込みを参考にしたんだけど、 7ラインくらい表示ができないのはしかたないのか。 もっといい方法とかあったら、教えてくだしあ。
166 名前:名前は開発中のものです。 mailto:sage [2014/04/18(金) 21:05:20.40 ID:GCyjwP+C.net] >>165 中央が黒いのは、書き換え中に色が付くのを防ぐため?
167 名前:166 mailto:sage [2014/04/19(土) 02:10:32.86 ID:ENCcy0CN.net] >>166 うん。 たぶん、ラスター使えるようになってラスターでパレット変更もできるぜぃ、 と思って試した人(過去の俺とか)は、なぞのゴミが表示されて悩まされてると思う。 そのゴミをHBlankに押し込めるために、16byteの書き換えに7lineも画面表示を消してるって感じです。
168 名前:名前は開発中のものです。 mailto:sage [2014/04/19(土) 09:55:49.50 ID:5+3bbh99.net] >>167 そうですか。知ってたらあれですが、3Dホットラリーはもろ見えてます。 ttp://img.gamefaqs.net/screens/b/3/c/gfs_18759_2_2.jpg
169 名前:名前は開発中のものです。 mailto:sage [2014/04/19(土) 13:11:45.50 ID:ENCcy0CN.net] あ、ほんとだw 実は、3Dホットラリーの名前は以前でてたんで画面見たんだけど、 上2パレット、下2パレットくらいでやってるんじゃない?とおもって、スルーしてた。 ちゃんとパレット書き換えしてたのねw 失礼しますた
170 名前:名前は開発中のものです。 mailto:sage [2014/04/21(月) 00:26:08.69 ID:/pAmCg0v.net] ゴミなんて消してやんよ って思ったら 意外と無理だった if ((!IsRendering) && ((VRAMAddr & 0x3F00) == 0x3F00)) PalIndex = Palette[VRAMAddr & 0x1F]; こんな仕様しらんがな nintendulatorのPPU.cppより
171 名前:名前は開発中のものです。 mailto:sage [2014/04/21(月) 10:13:40.71 ID:LbIV6qH+.net] おお、こういう原理だったのか。トンクス >>170 ttp://forums.nesdev.com/viewtopic.php?t=1209 コレみて、なんとなくパレットカキコミすると色が出るのは、理解してたんだけど、 細かい挙動はよくわかってなかった。
172 名前:名前は開発中のものです。 mailto:sage [2014/04/21(月) 10:17:13.69 ID:LbIV6qH+.net] ちなみに、これってハードウェア的にはどういう原理なの? 詳しい人いたら教えて。
173 名前:名前は開発中のものです。 mailto:sage [2014/04/21(月) 17:28:24.83 ID:rQaSv6+b.net] >>170 そんな断片ソースで理解できるのがすごい。
174 名前:名前は開発中のものです。 mailto:sage [2014/04/21(月) 23:59:09.10 ID:/pAmCg0v.net] >>165 を改造させてもらった ttp://www1.axfc.net/u/3227965.zip ゴミ消した パレットの0x0dは使えないよ 垂直同期のパルスみたいな電圧になるから
175 名前:名前は開発中のものです。 mailto:sage [2014/04/22(火) 00:47:42.57 ID:Ncm5fcM0.net] レンダリング止めていればBGの色が出ると思ってた >>165 のおかげで本気出せていろいろ勉強になったわ >>171 系のやつへの理解向上 レベルが一気に3あがった! rtiの戻り書き換えだとか組み終わった後に ttp://forums.nesdev.com/viewtopic.php?t=6484 full_palette.s の偶奇同期を見つけた この簡潔なソースで横ブレの無さのキモさといったら >>172 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
176 名前:166 mailto:sage [2014/04/22(火) 03:41:30.42 ID:+4JN+sCM.net] >>174 おおお、これは技術の粋が詰まったコードですね!素晴らしい!! 私もレベル3上昇して、レベル4になった〜 クロック管理が神々しく緻密・・・ ちなみに、ゲームでこのテクニックを使うとすると、IRQが入りそうなタイミングで メインスレッドはnop連打になってないとダメという認識でおk? とすると、実用は難しいけど、、、 ジャストアイデアとしては 2、3ラインくらい前にIRQいれて、一時的にメインスレッドをnop連打ループに切り替えて、 終わったらまたもとのメインスレッドに戻すというのは可能かな? 考えるだけで、脳髄が痛い・・・ >パレットの0x0dは使えないよ 一部の黒はつかっちゃだめというのは聞いてたんだけど、反対におぼえてたみたい(^^; 今後は0x0f使います〜 >>175 の情報も含めて、いろいろありがたい(^^ やっぱり、コードは晒してみるものだなぁ・・・
177 名前:166 mailto:sage [2014/04/22(火) 03:55:38.11 ID:+4JN+sCM.net] いままでの自分の致命的な間違いに気づいた・・・ nopは2クロックだったのね。1クロックだとばっかり思ってた(^^; よくいままでのコードうごいてたなぁw
178 名前:名前は開発中のものです。 mailto:sage [2014/04/22(火) 18:39:42.31 ID:FEq/t9cI.net] てす
179 名前:名前は開発中のものです。 mailto:sage [2014/04/22(火) 20:21:50.77 ID:SP0raU7v.net] >>174 ソース読ませてもらったけど、 ldy #0 sty $2001 で、PPUのレンダリング止めると、PPUのバスが空くので その間は自由にVRAMアクセスできたと理解していたんだが 違っていたかな? そうであれば、HBlank待つ必要ないので、パレット書き換えで 非表示になるライン数を減らせると思う。 あと、割り込み時にはiフラグが立った状態でルーチンが 呼ばれるので sei は要らないと思う。 wiki.nesdev.com/w/index.php/CPU_interrupts#IRQ_and_NMI_tick-by-tick_execution
180 名前:名前は開発中のものです。 mailto:sage [2014/04/22(火) 20:38:14.58 ID:SP0raU7v.net] >>172 PPUのデータのバス(信号線)が1組で、PPUのレンダリング中はVRAMからデータを読み出している。 CPUがVRAMアクセスのためにPPUアドレスを設定するレジスタ($2006)とPPUがネームテーブルにアクセスするアドレスのレジスタが兼用のため、CPUがパレットのアドレスを書き込むとPPUはパレットデータを読み出してレンダリングすることになる。 と理解しているのですが、間違っていたら指摘お願いします。>他の人
181 名前:166 mailto:sage [2014/04/22(火) 20:46:59.02 ID:+4JN+sCM.net] >>179 >で、PPUのレンダリング止めると、PPUのバスが空くので >その間は自由にVRAMアクセスできたと理解していたんだが >違っていたかな? そう思ってたんだけど、PPUのアドレスレジスタが0x3f**だと、 **の色(=ゴミ)が出力されるっていうのが、171のコード片の意味。
182 名前:166 mailto:sage [2014/04/22(火) 20:59:26.06 ID:+4JN+sCM.net] >>180 なるほど〜、 ハードウェアは素人(簡単なワンチップマイコンをいじったくらい) なんで、解説してもらえて助かるっす。ありがと〜 用語があってるかわからないけど、バスコンフリクトってやつでいいのかな? あとチップに損傷を与えたりはしないのかしら・・・ まぁ、あとは電子回路関係の情報で調べてみます。
183 名前:166 mailto:sage [2014/04/22(火) 21:04:00.85 ID:+4JN+sCM.net] 連投でスマソ >>180 追加で疑問。 そうすると、0x3f**以外のアドレスでも、そのアドレスのVRAMデータの色が出力されそうなんだけど、 0x3f**以外ではそうはならないみたいなんだよね・・・ これはレジスタ兼用でもそうならないものなのかな?
184 名前:名前は開発中のものです。 mailto:sage [2014/04/22(火) 23:02:12.52 ID:SP0raU7v.net] >>181 なるほど、了解です。 自分も実験してみよう。
185 名前:名前は開発中のものです。 mailto:sage [2014/04/22(火) 23:13:05.47 ID:SP0raU7v.net] >>183 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内部の)データバスに直接配置されている と書かれているので、この辺りの差で挙動が変わるっぽいですね。
186 名前:名前は開発中のものです。 mailto:sage [2014/04/22(火) 23:47:45.15 ID:Ncm5fcM0.net] >>179 >seiは要らない しまった、モロ立ってた どうも >>180 パレット$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. この辺あやしいね
187 名前:名前は開発中のものです。 mailto:sage [2014/04/22(火) 23:59:55.97 ID:Ncm5fcM0.net] >>176 今回はjmp *にしてもHBlankに収まるっぽく大丈夫なようですが 127 line目で $2001のレンダリングオフにする瞬間の PPU tickのばらつきが 249〜254 nop連打の場合 249〜257 jmp連打の場合 ばらつきが3dot分増えることになります 市販ゲームのIRQ関係もゴミだらけだし気にすることはない 直前に入れるのはいいアイディアだね
188 名前:名前は開発中のものです。 mailto:sage [2014/04/23(水) 17:56:22.78 ID:eYt0ULQB.net] >>185 >>186 なるほど、、、 まだ理解してないけど、このあたり読めばわかる気がしてきた。ありがと しかし、PPUのアドレスレジスタの兼用さえなければ、レンダリング中に読み書きできて BGアニメーションとかもっと便利だったろうにって思ってたけど、 Ntsc_timing.png みるかぎり、ひっきりなしにアクセスしてるんだね・・・ とするとメモリポートが2つないとだめだから、結局は無理だったのか。 >>187 了解。 sei/cliさえしなければ最大6クロックだから、6*3=18dot(nopにくらべて12dot大きく) ずれるのが許容できればおkってことね。 許容できるのか、計算するのが大変だけど(xx
189 名前:名前は開発中のものです。 mailto:sage [2014/04/23(水) 20:09:45.06 ID:yop1NMPn.net] この現象で分った事。 パレットの04 08 0Cは00とは別の値を格納できるが、実用上何も使われていないと言う事(合ってるよね?)。
190 名前:名前は開発中のものです。 mailto:sage [2014/04/23(水) 21:35:50.97 ID:bXRTGLw+.net] ↑あってるっぽい ただしスプライトの四の倍数とは共有か 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;
191 名前:名前は開発中のものです。 mailto:sage [2014/04/24(木) 07:57:06.72 ID:RDg08ToE.net] 流れぶったぎるようで申し訳ないけど、デバッガ機能が一番使いやすいNESエミュはどれですか?
192 名前:名前は開発中のものです。 mailto:sage [2014/04/24(木) 10:17:47.73 ID:TazbtZqQ.net] >>191 FCEUXがおすすめ。 (読/書/実行)ブレークポイント、スキャンラインごとのVRAM内容表示、RAMウォッチ あたりの機能をよく使ってる。
193 名前:名前は開発中のものです。 mailto:sage [2014/04/24(木) 11:46:44.27 ID:RDg08ToE.net] ありがとう
194 名前:名前は開発中のものです。 mailto:sage [2014/04/24(木) 21:06:44.07 ID:Ozv2HHx1.net] ブレークポイントの使いやすさは G-NESじゃないか よっぽどトリッキーなコーディングしないならこれで十分 G-NES は使いやすい、指定行まで実行がStepOverを兼ねる FCEUX はログ機能が最強、シンボル機能搭載、エミュ精度も結構よい Nintendulator はデバッガ付きではエミュの精度が最強かな、使いにくい
195 名前:名前は開発中のものです。 mailto:sage [2014/04/24(木) 23:37:48.91 ID:d8WjRMEc.net] >>190 そう、スプライトと共通(04=14、…) 僕は実機で確認したけど、nendoかnestopiaと同じなら間違いないだろうな。 古いネット上のドキュメントとか間違ってたりするから100%鵜呑みにしない方がいいよ(エミュのソースも)。
196 名前:名前は開発中のものです。 mailto:sage [2014/04/25(金) 00:53:39.01 ID:ffWieyHe.net] G-NESは使ってなかったから、ちょっと触ってみた。 デバッガは、FCEUXとG-NESほぼ同等やね。 ちょっとわかりにくいけど、アドレスクリックして"Seek To"で指定行まで実行もできるし。 (この機能が超欲しかったけど、いま探すまでアドレスクリックで指定できるの気付かなかったw) しかし、FECUXのシンボル情報って吐き出してくれるコンパイラあるのかな・・・ 使えれば便利そうなんだけど。
197 名前:名前は開発中のものです。 mailto:sage [2014/05/10(土) 18:53:04.15 ID:ShrxaRho.net] マッパー0のカセットを何本か作りたいんですが 既存のソフトのHVC-NROM-256K-02基板からICを外すのが面倒なので プリント基板だけを通販しているところとかないですかね? もしくは,CADデータとか.
198 名前:名前は開発中のものです。 mailto:sage [2014/05/10(土) 19:06:34.44 ID:ShrxaRho.net] ちなみに作りたいカセットとはこれです. この1週間ちょっと頑張ってインプリしてました. アセンブラなんか普段いじらないので,めちゃくちゃです. でも,このスレはちょくちょく見てるので,恩返しに公開します. ttp://sayonari.com/famicom/FamilyBird.zip 綺麗に書き直したかったですが,しばらくいじれそうにないので, 皆さんに託します. FCEUXではちゃんと動くんですが,ROMに焼いて, FC互換機(GCC NEXT)で動かすと, スプライトがチラチラと画面中に散らばって表示されます. メモリ管理とかちゃんとしてないし,変なところに書き込んだり, PPUアクセスのタイミングがむちゃくちゃだったりとかが原因だと思います. 互換機じゃなくて正規版本体ならちゃんとうごくのかな・・.
199 名前:名前は開発中のものです。 mailto:sage [2014/05/10(土) 19:40:22.36 ID:WvHa+XO0.net] そこまでやって正規版FCを持っていないというのが謎過ぎる 高いわけじゃないんだから普通に買えばいいのに
200 名前:名前は開発中のものです。 mailto:sage [2014/05/10(土) 20:09:58.52 ID:vMtYsoKB.net] >>198 スプライトDMAの前に$2003に$00入れるといいかも
201 名前:名前は開発中のものです。 mailto:sage [2014/05/10(土) 20:52:41.78 ID:ShrxaRho.net] >>200 すごい!かなり軽減されました.しかしまだチラチラがあります. しかしさすがのアドバイスありがとうございます.勉強になります.
202 名前:名前は開発中のものです。 mailto:sage [2014/05/10(土) 21:59:03.95 ID:2fP2DbGG.net] なんで土管に触っただけで死ぬんだ こんなクソゲー久しぶりに見たわ
203 名前:名前は開発中のものです。 mailto:sage [2014/05/10(土) 23:12:04.05 ID:ShrxaRho.net] >>199 ファミコン本体は実家にはいっぱいあるんですが,今の家にはなくて, 急遽必要になったので,とりあえず,ヤフオクで互換機を送料込み900円で落札しました. その後,今もですが,正規版ファミコンをどれにしようかと,ヤフオクでキョロキョロしてます. 互換機は今日届きました >>202 これは,FlappyBirdっていう人気アプリのオマージュですが,それも土管で即死です ROMライターのLEAPER-3Cのドライバが64bitWin7では動かなかったので焦りましたが, VirtualPC上のXPmodeというやつで,そのOSからLEAPER-3Cが使えたので 良かったです(´ρ`)
204 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 01:44:45.44 ID:HiLhu8FK.net] 非VBlanc期間がループで一切の処理をしていないからDMA転送がVblank内に収まってないんじゃないかね 通常は非VBlank期間にキー入力だのスプライトのデータ準備だのデータを用意しておいて Vblank期間は描画処理だけを行うようにする
205 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 02:54:20.00 ID:Mnx9Nf8g.net] >>204 ありがとうございます! チャレンジしてみましたが,上手く実装できませんでした(´ρ`) どの処理をどこでやればよいか・・・. もう時間的に頭が働いていないのかも.とりあえず寝ます.
206 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 04:04:19.91 ID:YECX6XhP.net] >>198 なかなか、ファミコンらしい可愛いグラフィックやね。 nesdevでflappy bird作った奴いないの?みたいなスレがあったから、貼るのもおもしろいかも forums.nesdev.com/viewtopic.php?f=2&t=11103 ちなみに、Nestopiaでもバグってるっぽいので実機の前にこっちでデバッグしたら楽かもしれない。 残念なことにデバッグ機能はほとんどないけど・・・
207 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 04:53:13.07 ID:Mnx9Nf8g.net] >>206 nestopia情報ありがとうございます! 試してみましたが,パレットがおかしくなるバグはありますが, 実機互換機で起こるチラチラ飛び散りバグは出ません. 正規本体でもでないかな.正規本体早く買おうかな. nesdevにも凸したいと思います(〃゜ω゜〃)
208 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 08:18:39.15 ID:IEErYv9U.net] >>207 最初のロゴでスプライトのゴミが出るのはメモリの初期化をして いないからだと思う パレットがおかしいとかスクロールがぶれるとかそういうのは恐らく 表示期間中にPPUに書き込みしてるんじゃないかな
209 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 08:23:06.60 ID:dYyMlr6C.net] fceuだとチラツキは見えない
210 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 09:26:06.10 ID:owqALoBe.net] 時々音がおかしくなる。
211 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 14:28:37.07 ID:rGvGrR+8.net] >>198 タイミングめちゃくちゃ&画面ゴミ&遷移時ちらつき&各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しちゃえばすこしマシになるかな 根本解決にはならないけど
212 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 14:29:39.56 ID:rGvGrR+8.net] >>197 もう構造的に破綻しているけど この先スクロールゲームにするなら 今の構造のままだともっと破綻する 理想的には バッファに命令語を用意しておき NMI直後に命令語を読み取ってVRAMに書き込む こういうスタイルじゃないとね 構造が悪いからデバッグの難度も上がる 小規模なうちに治さないと シーンが増えると結局テーブルジャンプや間接ジャンプ( jmp [mem] )、こういった関数ポインタを使わないとやってられないと思う、 デカくなったswitch文のアセンブラでの効率のよい実装のことね。 cmp #n の比較地獄をしていたら、デカくなればなるほど後の方は遅くてやってられない。 シーンが続き番号でないなら比較地獄も免れないけど >>197 >>199 LEAPER-3C 謎な奴だよなw IC引っこ抜くよりCADデータある方が時短になるのかw エミュでデバッグできないやつが、実機ROM焼きしてたら、ますます時間無駄にすると思うけど >>200 姑息な手かと思ったら、少し根拠あったのね > Obscure details of OAMADDR
213 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 15:05:47.12 ID:/Ki7K6oz.net] ファミコンは画面周りがややこしいからなぁ 自分も昔は資料が少なかったこともあって BGを正常に表示できるようになるまでけっこうな時間を要したな
214 名前:名前は開発中のものです。 [2014/05/11(日) 17:55:22.28 ID:vl3SyvU7.net] 原理的にはむしろ単純だろ なぜそうなるかの理解がないから理不尽に受け取るだけで
215 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 20:28:01.30 ID:FD888ndC.net] >>213 ハードウェア的には単純なので、ソフトウェア側での配慮が必要 という方が適切だと思う。
216 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 21:03:39.07 ID:QGu2c1mG.net] 惜しいなあ、技術的にはいいこと書いてるハズなのに口調で台無し 必要もなく刺々しい言葉「しとけよ」「やれ」などを使ったかと思えば 「釣りなの?」「と思う」などと子どもじみた表現が混ざる いい歳こいて言葉を選べないって、それはもう恥ずかしい事だよ 書き込む前にきちんと自分の書いた文章、推敲したするべきだよ 自分も、他人も、傷つけないために
217 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 21:45:37.94 ID:hyDhkYCi.net] >>198 □ゲームについて 全体的に良い感じにまとまっていると思いました。 ただ、ミス即ゲームオーバーなので、残機制かライフ制にした方が少し長く遊べて楽しいかなと思います。 あと、果物などのアイテムを出して取ればボーナス点が入るとか。 □プログラムについて BG書き換えについては、VBlankを深く考えていない実装になっているので、ここから立て直すのはきついと思いました。 205さんの指摘のように、PPUに転送するデータを一旦バッファに入れてVBlank中に転送するフレームワークを作って移行する方が早いかと。 VBlank中にPPUに転送できるデータ量は限界があるので、BG書き換えの実装部分はそれを配慮した作りに直さないと駄目ですね。
218 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 23:13:04.21 ID:rGvGrR+8.net] >>216 ゆとりメンタルなやつは2ちゃん見なきゃいいんじゃない? お前らは延々と即値でスプライトのバッファ初期化して、 100レス前も読めずNMI使えず$2002のポーリングでループ作ってるアホと同類だろ?w 何度同じこと言われても改善しようとしないやつw 前スレの>>700 あたりから湧いてる 画面カクついてる時点で釣りかと思ったし 全部のシーンを厳密に検証する気はないから「思う」と書いただけでね こういう書き込みも増えたね >〜エミュで動作しました、バグってました そりゃ画面がカクついていたり、 ソフトリセット、ハードリセット時に挙動が乱れたりするのは誰が見てもバグだよな >>217 つくりはじめたばかりのやつが、まとまってるのか?
219 名前:199 mailto:sage [2014/05/11(日) 23:30:36.97 ID:Mnx9Nf8g.net] 皆さんご親切に本当に有難うございます.実際にプログラミングしながら勉強することで, たくさん吸収出来てます!! >>211 親切にソースチェック&修正案ありがとうございます. こういう方が即レスくれるのも,さすがこのスレという感じです. プログラムは,何も考えずに,ここまでとりあえずという感じなので, 皆さんから頂いた意見と,わかったことを入れて,プログラムし直したいとおもいます. >>217 PPUへのアクセスに時間がかかるし,BG描画後にVRAM周りにアクセスするとヤバイ っていうことを知らずに実装していった結果が今のプログラムです. ご指摘のように,バッファに用意→転送にすることと, VBlankの時間を考慮した 実装にしたいです. ソース公開は恥ずかしかったですが,頑張って出して良かったです! 想定よりも,皆さんからレスを頂けて嬉しいです.頑張ります!
220 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 00:09:07.80 ID:jaOM61/S.net] >NMI使えず$2002のポーリングでループ作ってる 初心者でこれやらかす奴はたぶん某サイトの影響受けてるだろ あそこは全体的に説明が不足しすぎてるよ 更新も長いこと止まってるし、当てにするのはやめたほうがいい Nesdevの日本語資料理解するだけでもだいぶ変わるし 他にも今ではNES関連資料のサイトなんていっぱいある 特にI/Oレジスタについてはサイトによって書いてあること違ったりするから 一つのサイトに拘らず色々見るといい
221 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 00:13:00.90 ID:p9javgur.net] >>219 BG描画後にVRAMアクセスがNGではなくて、 非VBlank中にVRAMアクセスするのがNGなんです。(画面が乱れる) 短いVBlank中にVRAMを書き換えるために、バッファにデータを溜め込んでおいて、 VBlank(NMI)割り込みに入ったらすぐにバッファのデータを転送しろってことです。 あと、もちろんですが、スプライトのDMA転送もVBlank中に行わなければなりません。
222 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 08:39:01.88 ID:Wk7QwTB6.net] >>198 みたいな、打たれてもへこたれないヤツは2ch向きだね。ガンバレ! >>216 の意見には同意だけど、そういうヤツもいるのが2chの味なのかなぁ 自分に対して >>212 みたいな反応されたときは、頭来たけどなw 修行が足りない
223 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 08:40:54.97 ID:Wk7QwTB6.net] 失礼、>>211 は >>211 の間違いでした。
224 名前:名前は開発中のものです。 [2014/05/12(月) 10:39:31.18 ID:cuBtqyJP.net] 当時のRAMはデュアルポートではないから読んでいる最中に書き込みはできない 単純な構造だよね? で、画面を描画している最中は(BGもOBJも)データをVRAMから読み出している真っ最中だから そこで無理やりデータを書き込むと、今まで画面描画時に参照していたVRAMのアドレスが置き換えられてしまうため 元の描画処理を継続することができなくなり画面の表示が破綻してしまう 表示周りをいじる際VBlank期間中にアクセスしなければならないのはこういう理由
225 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 22:05:47.81 ID:jsal4ZTv.net] キラキラスターナイトのソースを読んでみたい。
226 名前:名前は開発中のものです。 mailto:sage [2014/05/13(火) 05:06:48.28 ID:9EaC9IEc.net] 遊び方にパテントはないわけでして
227 名前:名前は開発中のものです。 mailto:sage [2014/05/13(火) 06:22:09.58 ID:T2v6EbAW.net] >>225 絵は卓越しているけど プログラムは大して高度なことはやってないでしょ
228 名前:名前は開発中のものです。 [2014/05/13(火) 19:16:50.69 ID:srI4FW40.net] RIKIがパソファミの安藤に媚び売っててワロタ ロジックボム組み込んだりする基地外なのを知らんのか近頃のもんは
229 名前:名前は開発中のものです。 mailto:sage [2014/05/13(火) 20:10:15.51 ID:f3qQ/xjJ.net] パソファミ作者はメールでの対応が最悪レベル 自分の非を認めないどころか人を犯罪者扱いしたりするキ○○イ おまけにホンコンのソース盗用疑惑もあるしな ホントどうしようもねぇよ 素人にはこれしかないから売れるんだろうけど それが余計にたち悪いね
230 名前:名前は開発中のものです。 mailto:sage [2014/05/15(木) 00:00:39.68 ID:HB8Kbvvq.net] >>228 >>ロジックボム そういう噂を聞いたから その後にちょっとだけ調べたけど プリンタポートでないI/Oポートに向けて x86のout命令が発せられてたような、ないような windows98なら簡単に発動するのかな より堅牢なOSであるwindows2000にしてたから 効果なしっぽかったけど 近頃のもんが吸出しやROM焼き実機動作させてるのをよく見かけるようになったけど ソソハメさんの名前がなぜあまり挙がらないか理由をよく認識しておいた方がいい>もっと近頃のもんたちへ
231 名前:名前は開発中のものです。 mailto:sage [2014/05/15(木) 03:12:19.39 ID:AXeiaTDm.net] 気持ち悪いのが涌いてきたな
232 名前:名前は開発中のものです。 mailto:sage [2014/05/15(木) 05:14:14.01 ID:gGlXRPO1.net] すみません、吸出しというのは英語では何というのでしょうか?スペルを教えて下さい
233 名前:名前は開発中のものです。 mailto:sage [2014/05/15(木) 08:42:17.70 ID:9cGRzDB1.net] dump
234 名前:名前は開発中のものです。 mailto:sage [2014/05/20(火) 00:15:36.83 ID:sHOtKBex.net] >>140 宝石のラスタスクロール凄いね。あと、スプライト吹雪は気持ちいいっす このスレッドで新しい演出ジャンルに出会えたのは嬉しいね >>198 土管避けるの難しいけど楽しいね BGの判定は凄いと思う どんどん成長してゆくのが楽しみ
235 名前:199 mailto:sage [2014/05/27(火) 16:46:17.78 ID:Yj5iT5NZO] 頂いた修正案をもとに「まずSPRDMA」にして(PAD情報ゲットも指定の場所に移した), また,プログラム中で何回もSPRDMAしてしまっていたのを削除しました. 実機でのスプライト飛び散り表示はなくなりました. ただ,シーン切替時のがたつきや, BGのミラーリングの問題で,裏で画面更新していけないなどの構造欠陥などは 修正していないので,またまとまったらご報告させてください.
236 名前:140 mailto:sage [2014/05/28(水) 20:00:45.64 ID:pcO3WytB.net] ジョイパッドの読み取りルーチンをリファクタリングしたら結構コンパクトになった。 6502のアセンブラは奥深い。 Joypad_Update: lda #$01 sta $4016 lsr a ; same as lda $00 & sec sta $4016 ror a ; same as lda $80 & clc sta <JOYPAD sta <JOYPAD+1 .1 lda $4016 and #$03 ; clc sbc #0 ror <JOYPAD lda $4017 and #$03 ; clc sbc #0 ror <JOYPAD+1 bcc .1 rts >>234 ありがとうございます。
237 名前:140 mailto:sage [2014/05/28(水) 20:07:39.22 ID:pcO3WytB.net] あ、 sta <JOYPAD ror a ; same as lda $80 & clc sta <JOYPAD+1 として、JOYPADには$00入れないと不味いね。
238 名前:名前は開発中のものです。 [2014/05/29(木) 00:32:25.75 ID:Ix+yqrZv.net] >>237 (clcと)sbc #0をcmp #1にすればsta <JOYPADは不要
239 名前:140 mailto:sage [2014/05/29(木) 01:07:17.19 ID:Lo1UVUXb.net] >>238 ああ、確かに。さらに小さくなりました。 ありがとうございます。
240 名前:名前は開発中のものです。 mailto:sage [2014/06/04(水) 21:11:42.02 ID:Wpb6i0Ha.net] RevolvingGemsのゲーム本体部分が出来ましたので公開します。 ttp://homepage3.nifty.com/~kyoske/nes/RevolvingGems070.zip 残りはタイトル画面と遊び方画面を実装して終わる予定。
241 名前:名前は開発中のものです。 mailto:sage [2014/06/04(水) 21:35:20.41 ID:EpTIlg4F.net] すげー
242 名前:名前は開発中のものです。 mailto:sage [2014/06/04(水) 23:51:21.70 ID:78Tpkbjc.net] 商用レベルのできだと思う。 気になるのは、連鎖がどんどん発生しやすすぎではないのかなと
243 名前:名前は開発中のものです。 mailto:sage [2014/06/05(木) 01:19:37.09 ID:9NxYghum.net] >>242 連鎖しやすいのは、6方向に対して6種類の駒しかないので 仕様上、確率的につながり易いのが原因です。 駒の種類を増やせれば良いのですが、パレットが足りないw 最初は3個つながったらで実装していたのですが、 あまりにも連鎖が続くので4個にしています。 それでも消せなくなることが無く延々と続けられるので、時間制に逃げました。 作って思ったのは、ぷよぷよの仕様は絶妙なバランスなんだなぁと。
244 名前:名前は開発中のものです。 mailto:sage [2014/06/05(木) 23:11:37.79 ID:hfWG3l/O.net] 追加された音楽がスタートで変更できるのは、個人的にうれしいですね! 後、セレクトボタンはどんな効果があるのでしょうか?(効果音だけ?)
245 名前:131 mailto:sage [2014/06/06(金) 19:17:42.85 ID:5n3Zcu9W.net] 131です。あの後、 いろいろ注意深く書き込みを見ていたのですが 人に意見されるってすごく大事だと思いました。 ちなみに、cc65でオセロとShootingGameSampleを作ったのと、 nesasmでブロック崩しを作ったのも 自分です。 今までは自分はチキンで人に意見言われるだけで、 むっつりと黙っていましたが、これからは もっと能動的に動きたいです。 ファミコンのブロック崩しをソース付きで晒すので 汚いし、ロジック的におかしいところばかりですが、 見てやってください。 僕はカービィやマリオ、くにおくんのファミコン少年の一人の つもりなのでファミコンは、ホント好きですし、このスレッド を最初から見ています www1.axfc.net/u/3252687.zip
246 名前:131 mailto:sage [2014/06/06(金) 21:24:59.35 ID:5n3Zcu9W.net] こんな事書き込みたくて書き込むわけじゃないですけど、 ファミコンの正常動作って何ですか? どうすれば正常動作っていうんですか? いつまにか、このスレッドは本物のROMと同じように動かす為に努力してる 人たちを称え、褒めてきました。 正常動作って定義がどこにあるかはファミコンで動作すれば分かるんじゃないですかね。 それ以外を異常動作というなら、エミュレータはほぼ全て異常動作ですよ。
247 名前:名前は開発中のものです。 mailto:sage [2014/06/06(金) 22:02:30.07 ID:4Zl9JWw3.net] >>243 始まった瞬間操作する前に勝手に連鎖するってのだけでも どうにかならないかな 初期配置のみパターンで持つとか
248 名前:名前は開発中のものです。 mailto:sage [2014/06/06(金) 22:51:57.22 ID:kdjIsC0c.net] >>246 そうですよエミュは異常動作ですよ 実機で動かないのを言い訳してるだけにしか聞こえませんね
249 名前:131 mailto:sage [2014/06/07(土) 03:42:43.36 ID:hwRmu2MG.net] 本当に実機で試したのか知りたいですが、 自分の言いたい事は実機で動かない事の言い訳じゃなくて、 ファミコンのプログラミングが1つの古代技術でそれが通用するのはあくまでファミコンのみ という事なんですが**が素晴らしいとか**の技術は優れているとかのある意味 マニアックな話の流れになっているというか、 ぶっちゃけ、自分の作ったファミコンゲームは技術的には全然優れてないので、 優れた技術を持った人たちに憧れたみたいなところがあります。
250 名前:131 mailto:sage [2014/06/07(土) 03:52:27.88 ID:hwRmu2MG.net] **には、ラスタースクロールやスプライトダブラー、 FFの高速スクロール、BGの高速書き換え、パレットアニメーション を入れてください。
251 名前:131 mailto:sage [2014/06/07(土) 09:33:01.78 ID:hwRmu2MG.net] cc65の作ったやつは(REVERSI,SHOOTING GAME SAMPLE)動く自信がないですが、 nesasmで作ったやつも(IWA WO OTOSE,BLOCK)動かないんですかね。
252 名前:名前は開発中のものです。 mailto:sage [2014/06/07(土) 10:52:19.34 ID:0OqTmEOh.net] >>244 スタートとセレクトは、サウンド系の開発用にテストできるように追加していた機能で 今回スタートを少し改良して選曲出来るようにしました。 セレクトは、効果音を作る時以外は意味を成さないので、次の完成版では削除する予定です。
253 名前:名前は開発中のものです。 mailto:sage [2014/06/07(土) 11:09:37.37 ID:0OqTmEOh.net] >>247 初期配置をパターンで持つのは、バリエーションを作るのが大変なので、 採択したくないですね。 代わりに内部で連鎖が止まるまで処理を繰り返して、 そこからゲーム開始するよう実装してみます。
254 名前:名前は開発中のものです。 mailto:sage [2014/06/07(土) 11:18:00.96 ID:0OqTmEOh.net] >>249 私も最終目標は実機で動作させてみることなのですが、 そこまでの道が遠い状態です。 一応、動作させるための目処は立っていて、材料とかもそろえたのですが ROMライターから自作せねばならないため、いつになるかわかりません。 実機で動作したのを確認して初めて、ファミコンのプログラムを作ったと、 胸張って言えるかと個人的には思っています。