ファミコンのプログラム4 (567レス)
ファミコンのプログラム4 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
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
204: 名前は開発中のものです。 [sage] 2014/05/10(土) 23:12:04.05 ID:ShrxaRho >>200 ファミコン本体は実家にはいっぱいあるんですが,今の家にはなくて, 急遽必要になったので,とりあえず,ヤフオクで互換機を送料込み900円で落札しました. その後,今もですが,正規版ファミコンをどれにしようかと,ヤフオクでキョロキョロしてます. 互換機は今日届きました >>203 これは,FlappyBirdっていう人気アプリのオマージュですが,それも土管で即死です ROMライターのLEAPER-3Cのドライバが64bitWin7では動かなかったので焦りましたが, VirtualPC上のXPmodeというやつで,そのOSからLEAPER-3Cが使えたので 良かったです(´ρ`) http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/204
205: 名前は開発中のものです。 [sage] 2014/05/11(日) 01:44:45.44 ID:HiLhu8FK 非VBlanc期間がループで一切の処理をしていないからDMA転送がVblank内に収まってないんじゃないかね 通常は非VBlank期間にキー入力だのスプライトのデータ準備だのデータを用意しておいて Vblank期間は描画処理だけを行うようにする http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/205
206: 名前は開発中のものです。 [sage] 2014/05/11(日) 02:54:20.00 ID:Mnx9Nf8g >>205 ありがとうございます! チャレンジしてみましたが,上手く実装できませんでした(´ρ`) どの処理をどこでやればよいか・・・. もう時間的に頭が働いていないのかも.とりあえず寝ます. http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/206
207: 名前は開発中のものです。 [sage] 2014/05/11(日) 04:04:19.91 ID:YECX6XhP >>199 なかなか、ファミコンらしい可愛いグラフィックやね。 nesdevでflappy bird作った奴いないの?みたいなスレがあったから、貼るのもおもしろいかも http://forums.nesdev.com/viewtopic.php?f=2&t=11103 ちなみに、Nestopiaでもバグってるっぽいので実機の前にこっちでデバッグしたら楽かもしれない。 残念なことにデバッグ機能はほとんどないけど・・・ http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/207
208: 名前は開発中のものです。 [sage] 2014/05/11(日) 04:53:13.07 ID:Mnx9Nf8g >>207 nestopia情報ありがとうございます! 試してみましたが,パレットがおかしくなるバグはありますが, 実機互換機で起こるチラチラ飛び散りバグは出ません. 正規本体でもでないかな.正規本体早く買おうかな. nesdevにも凸したいと思います(〃゜ω゜〃) http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/208
209: 名前は開発中のものです。 [sage] 2014/05/11(日) 08:18:39.15 ID:IEErYv9U >>208 最初のロゴでスプライトのゴミが出るのはメモリの初期化をして いないからだと思う パレットがおかしいとかスクロールがぶれるとかそういうのは恐らく 表示期間中にPPUに書き込みしてるんじゃないかな http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/209
210: 名前は開発中のものです。 [sage] 2014/05/11(日) 08:23:06.60 ID:dYyMlr6C fceuだとチラツキは見えない http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/210
211: 名前は開発中のものです。 [sage] 2014/05/11(日) 09:26:06.10 ID:owqALoBe 時々音がおかしくなる。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/211
212: 名前は開発中のものです。 [sage] 2014/05/11(日) 14:28:37.07 ID:rGvGrR+8 >>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しちゃえばすこしマシになるかな 根本解決にはならないけど http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/212
213: 名前は開発中のものです。 [sage] 2014/05/11(日) 14:29:39.56 ID:rGvGrR+8 >>199 もう構造的に破綻しているけど この先スクロールゲームにするなら 今の構造のままだともっと破綻する 理想的には バッファに命令語を用意しておき NMI直後に命令語を読み取ってVRAMに書き込む こういうスタイルじゃないとね 構造が悪いからデバッグの難度も上がる 小規模なうちに治さないと シーンが増えると結局テーブルジャンプや間接ジャンプ( jmp [mem] )、こういった関数ポインタを使わないとやってられないと思う、 デカくなったswitch文のアセンブラでの効率のよい実装のことね。 cmp #n の比較地獄をしていたら、デカくなればなるほど後の方は遅くてやってられない。 シーンが続き番号でないなら比較地獄も免れないけど >>198 >>200 LEAPER-3C 謎な奴だよなw IC引っこ抜くよりCADデータある方が時短になるのかw エミュでデバッグできないやつが、実機ROM焼きしてたら、ますます時間無駄にすると思うけど >>201 姑息な手かと思ったら、少し根拠あったのね > Obscure details of OAMADDR http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/213
214: 名前は開発中のものです。 [sage] 2014/05/11(日) 15:05:47.12 ID:/Ki7K6oz ファミコンは画面周りがややこしいからなぁ 自分も昔は資料が少なかったこともあって BGを正常に表示できるようになるまでけっこうな時間を要したな http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/214
215: 名前は開発中のものです。 [] 2014/05/11(日) 17:55:22.28 ID:vl3SyvU7 原理的にはむしろ単純だろ なぜそうなるかの理解がないから理不尽に受け取るだけで http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/215
216: 名前は開発中のものです。 [sage] 2014/05/11(日) 20:28:01.30 ID:FD888ndC >>214 ハードウェア的には単純なので、ソフトウェア側での配慮が必要 という方が適切だと思う。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/216
217: 名前は開発中のものです。 [sage] 2014/05/11(日) 21:03:39.07 ID:QGu2c1mG 惜しいなあ、技術的にはいいこと書いてるハズなのに口調で台無し 必要もなく刺々しい言葉「しとけよ」「やれ」などを使ったかと思えば 「釣りなの?」「と思う」などと子どもじみた表現が混ざる いい歳こいて言葉を選べないって、それはもう恥ずかしい事だよ 書き込む前にきちんと自分の書いた文章、推敲したするべきだよ 自分も、他人も、傷つけないために http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/217
218: 名前は開発中のものです。 [sage] 2014/05/11(日) 21:45:37.94 ID:hyDhkYCi >>199 □ゲームについて 全体的に良い感じにまとまっていると思いました。 ただ、ミス即ゲームオーバーなので、残機制かライフ制にした方が少し長く遊べて楽しいかなと思います。 あと、果物などのアイテムを出して取ればボーナス点が入るとか。 □プログラムについて BG書き換えについては、VBlankを深く考えていない実装になっているので、ここから立て直すのはきついと思いました。 205さんの指摘のように、PPUに転送するデータを一旦バッファに入れてVBlank中に転送するフレームワークを作って移行する方が早いかと。 VBlank中にPPUに転送できるデータ量は限界があるので、BG書き換えの実装部分はそれを配慮した作りに直さないと駄目ですね。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/218
219: 名前は開発中のものです。 [sage] 2014/05/11(日) 23:13:04.21 ID:rGvGrR+8 >>217 ゆとりメンタルなやつは2ちゃん見なきゃいいんじゃない? お前らは延々と即値でスプライトのバッファ初期化して、 100レス前も読めずNMI使えず$2002のポーリングでループ作ってるアホと同類だろ?w 何度同じこと言われても改善しようとしないやつw 前スレの>>700あたりから湧いてる 画面カクついてる時点で釣りかと思ったし 全部のシーンを厳密に検証する気はないから「思う」と書いただけでね こういう書き込みも増えたね >〜エミュで動作しました、バグってました そりゃ画面がカクついていたり、 ソフトリセット、ハードリセット時に挙動が乱れたりするのは誰が見てもバグだよな >>218 つくりはじめたばかりのやつが、まとまってるのか? http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/219
220: 199 [sage] 2014/05/11(日) 23:30:36.97 ID:Mnx9Nf8g 皆さんご親切に本当に有難うございます.実際にプログラミングしながら勉強することで, たくさん吸収出来てます!! >>212 親切にソースチェック&修正案ありがとうございます. こういう方が即レスくれるのも,さすがこのスレという感じです. プログラムは,何も考えずに,ここまでとりあえずという感じなので, 皆さんから頂いた意見と,わかったことを入れて,プログラムし直したいとおもいます. >>218 PPUへのアクセスに時間がかかるし,BG描画後にVRAM周りにアクセスするとヤバイ っていうことを知らずに実装していった結果が今のプログラムです. ご指摘のように,バッファに用意→転送にすることと, VBlankの時間を考慮した 実装にしたいです. ソース公開は恥ずかしかったですが,頑張って出して良かったです! 想定よりも,皆さんからレスを頂けて嬉しいです.頑張ります! http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/220
221: 名前は開発中のものです。 [sage] 2014/05/12(月) 00:09:07.80 ID:jaOM61/S >NMI使えず$2002のポーリングでループ作ってる 初心者でこれやらかす奴はたぶん某サイトの影響受けてるだろ あそこは全体的に説明が不足しすぎてるよ 更新も長いこと止まってるし、当てにするのはやめたほうがいい Nesdevの日本語資料理解するだけでもだいぶ変わるし 他にも今ではNES関連資料のサイトなんていっぱいある 特にI/Oレジスタについてはサイトによって書いてあること違ったりするから 一つのサイトに拘らず色々見るといい http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/221
222: 名前は開発中のものです。 [sage] 2014/05/12(月) 00:13:00.90 ID:p9javgur >>220 BG描画後にVRAMアクセスがNGではなくて、 非VBlank中にVRAMアクセスするのがNGなんです。(画面が乱れる) 短いVBlank中にVRAMを書き換えるために、バッファにデータを溜め込んでおいて、 VBlank(NMI)割り込みに入ったらすぐにバッファのデータを転送しろってことです。 あと、もちろんですが、スプライトのDMA転送もVBlank中に行わなければなりません。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/222
223: 名前は開発中のものです。 [sage] 2014/05/12(月) 08:39:01.88 ID:Wk7QwTB6 >>199 みたいな、打たれてもへこたれないヤツは2ch向きだね。ガンバレ! >>217 の意見には同意だけど、そういうヤツもいるのが2chの味なのかなぁ 自分に対して >>213 みたいな反応されたときは、頭来たけどなw 修行が足りない http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/223
224: 名前は開発中のものです。 [sage] 2014/05/12(月) 08:40:54.97 ID:Wk7QwTB6 失礼、>>213 は >>212 の間違いでした。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/224
225: 名前は開発中のものです。 [] 2014/05/12(月) 10:39:31.18 ID:cuBtqyJP 当時のRAMはデュアルポートではないから読んでいる最中に書き込みはできない 単純な構造だよね? で、画面を描画している最中は(BGもOBJも)データをVRAMから読み出している真っ最中だから そこで無理やりデータを書き込むと、今まで画面描画時に参照していたVRAMのアドレスが置き換えられてしまうため 元の描画処理を継続することができなくなり画面の表示が破綻してしまう 表示周りをいじる際VBlank期間中にアクセスしなければならないのはこういう理由 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/225
226: 名前は開発中のものです。 [sage] 2014/05/12(月) 22:05:47.81 ID:jsal4ZTv キラキラスターナイトのソースを読んでみたい。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/226
227: 名前は開発中のものです。 [sage] 2014/05/13(火) 05:06:48.28 ID:9EaC9IEc 遊び方にパテントはないわけでして http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/227
228: 名前は開発中のものです。 [sage] 2014/05/13(火) 06:22:09.58 ID:T2v6EbAW >>226 絵は卓越しているけど プログラムは大して高度なことはやってないでしょ http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/228
229: 名前は開発中のものです。 [] 2014/05/13(火) 19:16:50.69 ID:srI4FW40 RIKIがパソファミの安藤に媚び売っててワロタ ロジックボム組み込んだりする基地外なのを知らんのか近頃のもんは http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/229
230: 名前は開発中のものです。 [sage] 2014/05/13(火) 20:10:15.51 ID:f3qQ/xjJ パソファミ作者はメールでの対応が最悪レベル 自分の非を認めないどころか人を犯罪者扱いしたりするキ○○イ おまけにホンコンのソース盗用疑惑もあるしな ホントどうしようもねぇよ 素人にはこれしかないから売れるんだろうけど それが余計にたち悪いね http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/230
231: 名前は開発中のものです。 [sage] 2014/05/15(木) 00:00:39.68 ID:HB8Kbvvq >>229 >>ロジックボム そういう噂を聞いたから その後にちょっとだけ調べたけど プリンタポートでないI/Oポートに向けて x86のout命令が発せられてたような、ないような windows98なら簡単に発動するのかな より堅牢なOSであるwindows2000にしてたから 効果なしっぽかったけど 近頃のもんが吸出しやROM焼き実機動作させてるのをよく見かけるようになったけど ソソハメさんの名前がなぜあまり挙がらないか理由をよく認識しておいた方がいい>もっと近頃のもんたちへ http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/231
232: 名前は開発中のものです。 [sage] 2014/05/15(木) 03:12:19.39 ID:AXeiaTDm 気持ち悪いのが涌いてきたな http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/232
233: 名前は開発中のものです。 [sage] 2014/05/15(木) 05:14:14.01 ID:gGlXRPO1 すみません、吸出しというのは英語では何というのでしょうか?スペルを教えて下さい http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/233
234: 名前は開発中のものです。 [sage] 2014/05/15(木) 08:42:17.70 ID:9cGRzDB1 dump http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/234
235: 名前は開発中のものです。 [sage] 2014/05/20(火) 00:15:36.83 ID:sHOtKBex >>140 宝石のラスタスクロール凄いね。あと、スプライト吹雪は気持ちいいっす このスレッドで新しい演出ジャンルに出会えたのは嬉しいね >>199 土管避けるの難しいけど楽しいね BGの判定は凄いと思う どんどん成長してゆくのが楽しみ http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/235
236: 140 [sage] 2014/05/28(水) 20:00:45.64 ID:pcO3WytB ジョイパッドの読み取りルーチンをリファクタリングしたら結構コンパクトになった。 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 >>235 ありがとうございます。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/236
237: 140 [sage] 2014/05/28(水) 20:07:39.22 ID:pcO3WytB あ、 sta <JOYPAD ror a ; same as lda $80 & clc sta <JOYPAD+1 として、JOYPADには$00入れないと不味いね。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/237
238: 名前は開発中のものです。 [] 2014/05/29(木) 00:32:25.75 ID:Ix+yqrZv >>237 (clcと)sbc #0をcmp #1にすればsta <JOYPADは不要 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/238
239: 140 [sage] 2014/05/29(木) 01:07:17.19 ID:Lo1UVUXb >>238 ああ、確かに。さらに小さくなりました。 ありがとうございます。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/239
240: 名前は開発中のものです。 [sage] 2014/06/04(水) 21:11:42.02 ID:Wpb6i0Ha RevolvingGemsのゲーム本体部分が出来ましたので公開します。 ttp://homepage3.nifty.com/~kyoske/nes/RevolvingGems070.zip 残りはタイトル画面と遊び方画面を実装して終わる予定。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/240
241: 名前は開発中のものです。 [sage] 2014/06/04(水) 21:35:20.41 ID:EpTIlg4F すげー http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/241
242: 名前は開発中のものです。 [sage] 2014/06/04(水) 23:51:21.70 ID:78Tpkbjc 商用レベルのできだと思う。 気になるのは、連鎖がどんどん発生しやすすぎではないのかなと http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/242
243: 名前は開発中のものです。 [sage] 2014/06/05(木) 01:19:37.09 ID:9NxYghum >>242 連鎖しやすいのは、6方向に対して6種類の駒しかないので 仕様上、確率的につながり易いのが原因です。 駒の種類を増やせれば良いのですが、パレットが足りないw 最初は3個つながったらで実装していたのですが、 あまりにも連鎖が続くので4個にしています。 それでも消せなくなることが無く延々と続けられるので、時間制に逃げました。 作って思ったのは、ぷよぷよの仕様は絶妙なバランスなんだなぁと。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/243
244: 名前は開発中のものです。 [sage] 2014/06/05(木) 23:11:37.79 ID:hfWG3l/O 追加された音楽がスタートで変更できるのは、個人的にうれしいですね! 後、セレクトボタンはどんな効果があるのでしょうか?(効果音だけ?) http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/244
245: 131 [sage] 2014/06/06(金) 19:17:42.85 ID:5n3Zcu9W 131です。あの後、 いろいろ注意深く書き込みを見ていたのですが 人に意見されるってすごく大事だと思いました。 ちなみに、cc65でオセロとShootingGameSampleを作ったのと、 nesasmでブロック崩しを作ったのも 自分です。 今までは自分はチキンで人に意見言われるだけで、 むっつりと黙っていましたが、これからは もっと能動的に動きたいです。 ファミコンのブロック崩しをソース付きで晒すので 汚いし、ロジック的におかしいところばかりですが、 見てやってください。 僕はカービィやマリオ、くにおくんのファミコン少年の一人の つもりなのでファミコンは、ホント好きですし、このスレッド を最初から見ています http://www1.axfc.net/u/3252687.zip http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/245
246: 131 [sage] 2014/06/06(金) 21:24:59.35 ID:5n3Zcu9W こんな事書き込みたくて書き込むわけじゃないですけど、 ファミコンの正常動作って何ですか? どうすれば正常動作っていうんですか? いつまにか、このスレッドは本物のROMと同じように動かす為に努力してる 人たちを称え、褒めてきました。 正常動作って定義がどこにあるかはファミコンで動作すれば分かるんじゃないですかね。 それ以外を異常動作というなら、エミュレータはほぼ全て異常動作ですよ。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/246
247: 名前は開発中のものです。 [sage] 2014/06/06(金) 22:02:30.07 ID:4Zl9JWw3 >>243 始まった瞬間操作する前に勝手に連鎖するってのだけでも どうにかならないかな 初期配置のみパターンで持つとか http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/247
248: 名前は開発中のものです。 [sage] 2014/06/06(金) 22:51:57.22 ID:kdjIsC0c >>246 そうですよエミュは異常動作ですよ 実機で動かないのを言い訳してるだけにしか聞こえませんね http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/248
249: 131 [sage] 2014/06/07(土) 03:42:43.36 ID:hwRmu2MG 本当に実機で試したのか知りたいですが、 自分の言いたい事は実機で動かない事の言い訳じゃなくて、 ファミコンのプログラミングが1つの古代技術でそれが通用するのはあくまでファミコンのみ という事なんですが**が素晴らしいとか**の技術は優れているとかのある意味 マニアックな話の流れになっているというか、 ぶっちゃけ、自分の作ったファミコンゲームは技術的には全然優れてないので、 優れた技術を持った人たちに憧れたみたいなところがあります。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/249
250: 131 [sage] 2014/06/07(土) 03:52:27.88 ID:hwRmu2MG **には、ラスタースクロールやスプライトダブラー、 FFの高速スクロール、BGの高速書き換え、パレットアニメーション を入れてください。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/250
251: 131 [sage] 2014/06/07(土) 09:33:01.78 ID:hwRmu2MG cc65の作ったやつは(REVERSI,SHOOTING GAME SAMPLE)動く自信がないですが、 nesasmで作ったやつも(IWA WO OTOSE,BLOCK)動かないんですかね。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/251
252: 名前は開発中のものです。 [sage] 2014/06/07(土) 10:52:19.34 ID:0OqTmEOh >>244 スタートとセレクトは、サウンド系の開発用にテストできるように追加していた機能で 今回スタートを少し改良して選曲出来るようにしました。 セレクトは、効果音を作る時以外は意味を成さないので、次の完成版では削除する予定です。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/252
253: 名前は開発中のものです。 [sage] 2014/06/07(土) 11:09:37.37 ID:0OqTmEOh >>247 初期配置をパターンで持つのは、バリエーションを作るのが大変なので、 採択したくないですね。 代わりに内部で連鎖が止まるまで処理を繰り返して、 そこからゲーム開始するよう実装してみます。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/253
254: 名前は開発中のものです。 [sage] 2014/06/07(土) 11:18:00.96 ID:0OqTmEOh >>249 私も最終目標は実機で動作させてみることなのですが、 そこまでの道が遠い状態です。 一応、動作させるための目処は立っていて、材料とかもそろえたのですが ROMライターから自作せねばならないため、いつになるかわかりません。 実機で動作したのを確認して初めて、ファミコンのプログラムを作ったと、 胸張って言えるかと個人的には思っています。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/254
255: 131 [sage] 2014/06/07(土) 14:24:42.36 ID:HAL7UNXv >>254 ネットカフェから書き込みです。 そうですね。ファミコンの実機で動いたら感動しますし、 実機で動かしたいです。 ファミコンの実機は持っているのですが、ROMライターや EEPROM、同軸ケーブル、ビデオデッキ、自分用のテレビ http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/255
256: 131 [sage] 2014/06/07(土) 14:27:25.94 ID:HAL7UNXv など問題が山積しているので、現段階では難しいです。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/256
257: 名前は開発中のものです。 [sage] 2014/06/07(土) 15:48:51.46 ID:0OqTmEOh >>245 一通り読んでみました。 .bank 0 ; バンク0 .org $0300 ; $0300から開始、スプライトDMAデータ配置 Paddle00_Y: .db 0 ; スプライト#1 Y座標 Paddle00_T: .db 0 ; スプライト#1 ナンバー WRAM領域の$0300にデータ定義の記述があるが、 ビルド出来ているのであろうが、記述としてはまぎわらしいので Paddle00_Y = $0300 Paddle00_T = $0301 と記述した方が良い .memclearloop sta [$00],y iny cpy #255 bne .memclearloop 254までしかループしていない。cpy #255が不要 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/257
258: 名前は開発中のものです。 [sage] 2014/06/07(土) 15:49:29.84 ID:0OqTmEOh >>257 続き VBlank直後に行うべき処理と、ゲーム本体の処理を分離したほうが良い。 パッドとボールの座標と、スプライトの座標は別に持っておき、 パッドとボールの座標をスプライトデータに反映するにように 実装した方が、プログラムの書き方としては綺麗だと思う。 VBlankのタイミングを考えずに、スプライトとBGの表示をOFF/ONにして VRAMを書き換えるのはやめた方が良いと思う。 nestopiaとかでも普通に表示できていたけど、書き換え量が多くなると 画面がちらつくのでは? jsr Pad_Check ソース上に Pad_Check が見つからない。 lda #0 ;これはROMなので出来ないので、こうする sta STAGE1,x ;〃 ROMに0を書き込む意図がわからない。 VRAM書き込み先のアドレスをブロックの座標から 計算しているが、ブロックの配置位置が有限個であれば 表引きで求める方法もある。 (Y座標だけでも表引きにすると処理が結構簡素化します) http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/258
259: 131 [sage] 2014/06/07(土) 17:02:04.46 ID:hwRmu2MG ギコ猫さんのところで、覚えた技術ばかりという理由は 英語が出来ないという理由なのですが、これは理由になってないみたいですね。 ?英語が出来ない ↓ ?英語の技術情報が分からない ↓ ?日本語だけの技術情報に頼る の無限ループなので、英語を中学英語から やり直したいと思います。 ちょうど良い本がアマゾンで見つかったので ttp://www.amazon.co.jp/%E4%B8%AD%E5%AD%A6%E3%83%BB%E9%AB%98%E6%A0%A16%E5%B9%B4%E5%88%86%E3%81%AE%E8%8B%B1%E8%AA%9E%E3%82%92%E7%B7%8F%E5%BE%A9%E7%BF%92%E3%81%99%E3%82%8B-CD%E4%BB%98-CD-BOOK-%E5%B9%B3%E5%B1%B1/dp/4860641663 あと、スプライトの定義のその定義の仕方は知らなかったです。 でも、ある意味スプライトDMAのアドレスを考えれば当たり前なんでしょうけど。 iny cpy bneの間違いは、間違えて覚えていました。 ギコ猫さんとこはパレットの読み込み時に ldx #0 .loop lda ourpal,x sta $2007 inx cpx #32 bne .loop みたいにやっていたのですがよく考えれば、0-31までを読み込んでいたんですね。 これは、引き算の小学一年レベルの間違えですね。差がNの時、合計数は、N+1になるという事なんでしょう。 つづく http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/259
260: 131 [sage] 2014/06/07(土) 17:29:43.93 ID:hwRmu2MG >>257-258 VBlankとゲーム本体処理を分離ということはNMIを使うって事ですね。他の方も言ってましたが スプライトと実際の座標を別に持つというのは、以前やったことがあるのですが、クソ汚いソースになってしまいましたが、少しだけわかってきた気がします。こんな感じですかね。 >>261に書きます。 VBlankのタイミングと書き換えは理解しずらいのですが、ファミコンのPPUの仕様なんですかね。 Pad_Checkは、他の方が作られたソースなので、あえて外しました。ROMに0を書き込んだ意図は、恐らくないです。気づかないまま放置してしまいました。 ブロックの配置位置が有限個ならテーブル化できるんですか?今度やってみます。 アドバイスありがとうございます!!ホント助かりました。知らなかった事や理解出来なかった事が分かってよかったです。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/260
261: 131 [sage] 2014/06/07(土) 17:30:36.51 ID:hwRmu2MG .org $300 ;データ定義 Sprite: Sp00_Y: $0300 Sp00_T: $0301 Sp00_S: $0302 Sp00_X: $0303 01_Y: $0304 01_T: $0305 01_S: $0306 01_X: $0307 ... ldx #0 .SetObjAxis2RealAxis ;スプライト座標を実際の座標に代入する lda Sprite+0,x sta Real_Y,x lda Sprite+3,x sta Real_X,x inx inx inx inx cpx #(4*4) ;4つのスプライトを代入する bne .SetObjAxis2RealAxis http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/261
262: 131 [sage] 2014/06/07(土) 17:32:41.18 ID:hwRmu2MG 間違えました。 .org $300 ;データ定義 Sprite: Sp00_Y= $0300 Sp00_T= $0301 Sp00_S= $0302 Sp00_X= $0303 01_Y= $0304 01_T= $0305 01_S= $0306 01_X= $0307 ... ldx #0 .SetObjAxis2RealAxis ;スプライト座標を実際の座標に代入する lda Sprite+0,x sta Real_Y,x lda Sprite+3,x sta Real_X,x inx inx inx inx cpx #(4*4) ;4つのスプライトを代入する bne .SetObjAxis2RealAxis http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/262
263: 名前は開発中のものです。 [sage] 2014/06/07(土) 17:38:24.41 ID:YYdbZPoT 英検三級、即ち中学卒業程度の英語力とgoogle翻訳があれば十分。 海外サイトの情報も何も全部理解する必要はないし、図、表、技術用語さえわかれば殆ど問題ない。 それに今では日本語資料も充実していると思うし、あえてギコ猫のところだけを参考にすることもないだろう。 初心者のうちは他人が作ったソースを見てよく理解し、そこからいろいろ学ぶのもいいだろう。 公開されているソースによっては丁寧に説明が細かく書いてあるものもある。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/263
264: 131 [sage] 2014/06/07(土) 18:21:24.08 ID:hwRmu2MG >>263 英検3級は持ってますが、かなり文法が怪しいです。単語に関しては最も初期の「萌えたん」を P-StudySystemを自作問題集を作って覚えた程度です。 1つ1つの単語が読めても何を言いたいのかわからないので、今持っているくもん中学英文法 という本をゆっくりと確実にやる事にします。 初心者というにも、初めてから時間がかかり過ぎてる面はあるのですが、 恐らく他の方の作ったソースを断片的にしか分かっていないというのはあると思います。 google翻訳に関しては、使うブラウザがchromeなので、標準で使えます。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/264
265: 名前は開発中のものです。 [sage] 2014/06/07(土) 19:18:59.23 ID:2SsDMldn >>252 セレクトは効果音テストだったのね。疑問解消しました ソフトの完成楽しみにしてます http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/265
266: 名前は開発中のものです。 [sage] 2014/06/08(日) 02:10:46.27 ID:CkZRo6BG >>260 > VBlankのタイミングと書き換えは理解しずらいのですが、ファミコンのPPUの仕様なんですかね。 VBlankの意味を理解していない節があるので、まずは、ブラウン管の話からします。 機知の情報かも知れませんが聞いてください。 ブラウン管の裏から電子銃で電子を飛ばし、ブラウン管表の蛍光面を発光します。 真っ直ぐ飛ばしただけでは、ただの点なので、磁界をかけて電子が飛ぶ方向を変えて 左上から右へ水平方向に線を書くように発光させ、再び左端に戻ってさっきより ちょっと下の位置で同じように水平方向の線を発光させます。 これを画面下まで繰り返して、再び左上に戻ります。 これをすばやく繰り返すことで、ブラウン管の蛍光面全体に画像を表示します。(ラスタスキャン方式) 電子の飛ばし先が右端から左端に戻る期間を水平帰線消去期間(HBlank期間)、 下端から上端に戻る期間を垂直帰線消去期間(VBlank期間)と呼びます。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/266
267: 名前は開発中のものです。 [sage] 2014/06/08(日) 02:12:41.17 ID:CkZRo6BG >>266 続き VBlank期間は、一瞬で戻るのではなく、NTSC(日本のアナログ放送の信号規格)の場合 20本分の横線を描くぐらいの時間があります。この間、電子銃から電子は飛びません。 非VBlank期間は、ファミコンのPPUは画像の信号を作るため、 CHR-ROMからパターンを読み込んだり、VRAMからネームテーブルや 属性情報を読み込んでいて、PPUの信号線(PPUバス)を占有しています。 VBlank期間は、PPUが画像の信号を作らないので、PPUバスは開放されており CPUはPPUを介してPPUバスにつながっているVRAMにアクセスできます。 「VBlank待ちの直後にVRAMの書き換えを行え」というのは、PPUが映像信号を 作るのに邪魔にならないタイミングでVRAMにアクセスしなさいということです。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/267
268: 名前は開発中のものです。 [sage] 2014/06/08(日) 02:53:09.19 ID:CkZRo6BG >>267 続き 非VBlank期間中にCPUがVRAMにアクセスできる方法があります。 PPUレジスタ $2001 のbit3とbit4を0にして、BGとスプライトを非表示にすることです。 画像の信号を作るためのPPUのCHR-ROMやVRAMへのアクセスが止まるので PPUバスが開放され、CPUはPPUを介してVRAMにアクセスできます。 代わりに、画面に何も表示されない箇所が現れることになります。 BGとスプライトを非表示にするタイミングにばらつきがあると、 画面がちらつく現象となります。 > VBlankのタイミングと書き換えは理解しずらいのですが、ファミコンのPPUの仕様なんですかね。 ファミコンの設計による制限であるため、仕様と言えば、その通りです。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/268
269: 名前は開発中のものです。 [sage] 2014/06/08(日) 02:54:30.27 ID:CkZRo6BG >>268 続き 同世代の他のパソコンとかでは、表示中にもCPUからVRAMにアクセスできるものが あるのに、ファミコンで出来ないのはなぜ? →画面表示用の信号線とCPUからVRAMにアクセスする信号線が別になっているためです。 VRAMもデュアルポートメモリという、アクセスの口が2つある特別なRAMを使っています。 ファミコンのWRAMやVRAMに使われているのは、アクセスの口が1つのシングルポートメモリです。 →信号線も増えるため、基板上の配線が複雑化し、基板のサイズや層が増えてコスト増になる可能性があります。 ファミコンのVRAMにデュアルポートメモリを使わなかったのはなぜ? →コスト削減のためです。 一般的にアクセスポートが余分にあるデュアルポートメモリの方がシングルポートメモリより部品代が高くなります。 また、WRAMとVRAMに同じ部品を使うことで、大量に発注し部品メーカーに単価の引き下げを交渉できます。 とりあえず、わかりやすく説明したつもりですが、間違いなどがありましたら フォローお願いします。>All http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/269
270: 131 [sage] 2014/06/08(日) 06:24:49.26 ID:RIyNgnKh >>266 VBlankに関しては、「ファミコンの驚くべき発想力」という本の78ページ前後に 記述がありました。が、>>266さんの説明の方がより詳しく説明しているように 見えます。 HBlank期間のHはホライゾン?(水平)の略でしょうね。VBlankのVは、バーチカル(垂直) の略な気がします。 NTSCとPALの違いも知らなかったのですが、日本は、NTSCだったんですね。 VBlank待ちの直後にビデオメモリの書き換えをするのはそういう理由が あったんですか。 非VBlank期間中にCPUがVRAMにアクセスできる方法、これは知っていましたが、 欠点は知りませんでした。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/270
271: 名前は開発中のものです。 [sage] 2014/06/08(日) 07:01:43.99 ID:Jc27w7xL Horizontal Blankingですかね かつてはPPUの特定のバージョンのみで発生する不具合なんてのもありました スクロールレジスタがある値の時、VRAMアドレスレジスタを触ると背景色が化けるというもの・・ http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/271
272: 131 [sage] 2014/06/08(日) 10:50:38.68 ID:RIyNgnKh PPUの特定バージョンというのが分かりませんが、製造されたファミコン本体 ですか?それともエミュレータか何かですか? スクロールレジスタは、$2005の二度書きレジスタですよね。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/272
273: 名前は開発中のものです。 [sage] 2014/06/08(日) 15:26:42.07 ID:25kxI5vs RPGやなんかでフィールドから街へフィールドから戦闘への場面変更で一旦ブラックアウトするのは 画面初期化して書き直す時間を稼ぐためでもあったんだろうか? http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/273
274: 名前は開発中のものです。 [sage] 2014/06/08(日) 15:31:42.31 ID:Eog1TIRJ 製造ロットによるがファミコンの中には2つのカスタムLSIが入っている。 一つはRP2A03というもの もう一つがRP2C02というもの。 前者がCPUとAPUやI/Oポート周りで、後者がPPU。 PPUがRP2C02なのはNTSC出力のものだけで、PALならRP2C03、RGBならRC2C05など。 型番の後に続くアルファベット(例:RP2C02EのE)がバージョンを表している。 特定バージョンというか、初期型に不具合が多かった。 ちなみに製造後期になるとデコーダやインバータも1チップのカスタムLSIにまとめられる。 でもなぜかSRAMがSOPからDIPに戻ってる。入手先が限られてきたのかな? http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/274
275: 名前は開発中のものです。 [sage] 2014/06/08(日) 17:20:23.01 ID:2cLvFL4/ >>273 スクロールは基本的にネームテーブルを2枚とも使うので 表示されていない方を裏画面として使うのはちょっとめんどくさい だから場面転換時には画面表示を一旦オフにする必要はあるけど 画面全体を書き換えるにしても数フレームだからほぼ一瞬で終わる わざわざ時間稼ぎしなければならないほどでもないので フェードなりの画面効果は演出を目的としてると思っていい http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/275
276: 名前は開発中のものです。 [sage] 2014/06/08(日) 18:14:36.81 ID:QSuHGJdX >>269 同世代のパソコンなどのVRAMはシングルポートのDRAMだよ CPUをウェイトで止めたり、DMAで勝手にCPUが止まったり、アクセスするタイミングを 工夫して見かけ上同時に読み書き出来るようにしてあったり、VDPが調停してくれたり 色々あるけども http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/276
277: 名前は開発中のものです。 [sage] 2014/06/08(日) 20:16:46.77 ID:p43hB49G >>245-246 名乗り出なくてもバグだらけのキ○ガイプログラムだからすぐわかるよ。 人の言うことを聞かないで数年間NMI使えないで、いつも同じバグ出して、「正常動作の定義は?」って逆ギレ。愚痴キ○ガイ消えてくれ。 ・あちこちでゼロページ < 忘れすぎ → auto-zeropageが施された改造版のnesasmあるよ ・なにをしているのかよくわからない。ROMに書き込んではいけない。実機動作を狙ってるなら lda #0 ;これはROMなので出来ないので、こうする sta STAGE1,x ;〃 ・Aボタン押したときのデューティ比的な音バグ(数年間放置されたバグ 誤 lda APU_REG0_DUTY_875 誤 ora APU_REG0_COUNT_ON ← PadStat = $20 と重複! 誤 ora APU_REG0_FIX_ON 正 lda #( APU_REG0_DUTY_875 | APU_REG0_COUNT_ON | APU_REG0_FIX_ON ) ・ 誤 lda APU_REG1_FRQCHG_ON 正 lda #APU_REG1_FRQCHG_ON ・既に指摘があるようにcmpが変。loadのフラグの変化とブランチのフラグ条件を理解していない。 lda なんたら cmp #0 beq または bne ・jsr Pad_Check は 他人 >>236 の? 算術sbc使ってるから変だと思ったけど パッと見でこれだけミスしてて、どこにまともに動く要素があるわけ?氷山の一角だろう。 今回も 「.dw 0; VBlank割り込み」見てまたお前かとやる気を失ったけど、BLOCK.symが同梱されていたので捗った。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/277
278: 名前は開発中のものです。 [sage] 2014/06/08(日) 20:24:54.45 ID:p43hB49G NMI使えない、各種メモリやレジスタの初期化していない奴って ギコ猫の前半章のコピペ&拡張だったんだな 後半章ばかり見てたから原因がわからなかった>>221 言い訳にもならないけどね 他人のソース調べればわかることだから 後半章のソースも問題あり >>270 指摘されると、「私は〜知ってましたが、あえてやりませんでした」 じゃなんでNMI使えないの? 「VBlank待ちの直後にビデオメモリの書き換えをするのはそういう理由があったんですか。 」 (レトロ)ゲームのプログラムに興味ある人はみんな知ってるよ。Direct3Dだって垂直同期の概念あるでしょ。 >>273 ゲームによる。 特にCHRがRAMでドラクエ?や?のようにROM容量がきつくて圧縮されたゲームは遅い。 数10フレームかかる。 エミュのパレットをハックしてネームテーブルビュワー見ると展開のスピードを見やすい。 ・戦闘画面に移行するとき CHRのパターンテーブルがRAMな場合は普通に書き換えるだけで時間がかかる。 書き換える前にPRG内の画像圧縮を展開するだろうからもっと時間がかかる。 ・マップ画面に移行するとき マップとマップチップの展開に時間がかかる 市販のゲームは限られたRAMやROMのスペースで展開と転送をこなさなければならず 我々が専用のルーチンで高速転送するのとはわけが違う場合もある 全部ROMで持ってるゲームならもっと速くて10フレーム程度かな http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/278
279: 131 [sage] 2014/06/09(月) 18:51:10.28 ID:Sx48Gggw >>277 NMIは使わなかったのは、確かにギコ猫のコピペだからと使い方を知らないからです。 いろいろ問題があったのは、事実ですし、バグがあったのも事実です。 何と言ったら良いか分かりませんが、ガッカリさせてすみませんでした。 みなさん、wという笑いや嘲笑の意味の文字を使っていないので、自分の為を思って 書き込んでいるのが見て取れます。 >>あちこちでゼロページ < 忘れすぎ → auto-zeropageが施された改造版のnesasmあるよ どうもアドバイスありがとうございます。 >>・なにをしているのかよくわからない。ROMに書き込んではいけない。実機動作を狙ってるなら >>lda #0 ;これはROMなので出来ないので、こうする >>sta STAGE1,x ;〃 ROMは書き込めないということは知っていましたが、放置したバグの結果であることは この前言ったはずです。 >>・Aボタン押したときのデューティ比的な音バグ(数年間放置されたバグ >>誤 lda APU_REG0_DUTY_875 >>誤 ora APU_REG0_COUNT_ON ← PadStat = $20 と重複! >>誤 ora APU_REG0_FIX_ON >>正 lda #( APU_REG0_DUTY_875 | APU_REG0_COUNT_ON | APU_REG0_FIX_ON ) ありがとうございます。どうしてボタンを押すと変な音なのか分かりませんでした。 何か原因があるとは思っていましたが何が原因かは全くわかりませんでした >>・ 誤 lda APU_REG1_FRQCHG_ON >>正 lda #APU_REG1_FRQCHG_ON これもありがとうございます。 つづく http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/279
280: 131 [sage] 2014/06/09(月) 18:53:26.51 ID:Sx48Gggw >>・既に指摘があるようにcmpが変。loadのフラグの変化とブランチのフラグ条件を理解していない。 >>lda なんたら >>cmp #0 >>beq または bne これは言えてますね。単純な頭なので、単純に考えていました。 >>・jsr Pad_Check は 他人 >>236 の? 算術sbc使ってるから変だと思ったけど はい、他人のソースを使いました。 >>パッと見でこれだけミスしてて、どこにまともに動く要素があるわけ?氷山の一角だろう。 >>今回も 「.dw 0; VBlank割り込み」見てまたお前かとやる気を失ったけど、BLOCK.symが同梱されていたので捗った。 えーとこれも失敗してしまいましたね。ファミコン開発は思ったより難しいんですね。 >>278 :名前は開発中のものです。:2014/06/08(日) 20:24:54.45 ID:p43hB49G >>NMI使えない、各種メモリやレジスタの初期化していない奴って >>ギコ猫の前半章のコピペ&拡張だったんだな >>後半章ばかり見てたから原因がわからなかった>>221 はい、そうです。ギコ猫の前半章の主に9章のコピペです。 >>言い訳にもならないけどね >>他人のソース調べればわかることだから 他人のソースを調べるという事がどんなに重要か分かりました。 >>後半章のソースも問題あり >>270 >>指摘されると、「私は〜知ってましたが、あえてやりませんでした」 じゃなんでNMI使えないの? >>「VBlank待ちの直後にビデオメモリの書き換えをするのはそういう理由があったんですか。 」 >>(レトロ)ゲームのプログラムに興味ある人はみんな知ってるよ。Direct3Dだって垂直同期の概念あるでしょ。 ”NMI”という言葉を知っていても言葉を忘れていたのと、使い方を知らないからです。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/280
281: 131 [sage] 2014/06/09(月) 18:55:00.34 ID:Sx48Gggw >>236さんのソースではなく、ネット上に公開されていたソースを使いました。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/281
282: 131 [sage] 2014/06/09(月) 18:57:30.62 ID:Sx48Gggw 変数に >>・ 誤 lda APU_REG1_FRQCHG_ON >>正 lda #APU_REG1_FRQCHG_ON の違いって何ですか? http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/282
283: 名前は開発中のものです。 [sage] 2014/06/09(月) 20:17:24.32 ID:dEpln6L7 実機で検証してくれたことに対して >本当に実機で試したのか知りたいですが って何気に失礼だよなこいつ http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/283
284: 266 [sage] 2014/06/09(月) 20:51:16.15 ID:oKltYKig >>280 > ”NMI”という言葉を知っていても言葉を忘れていたのと、使い方を知らないからです。 131さんには申し訳ないが、 まずは、WikipediaでCPUの割り込みについて勉強してきた上で ttp://ja.wikipedia.org/wiki/%e5%89%b2%e3%82%8a%e8%be%bc%e3%81%bf_(%e3%82%b3%e3%83%b3%e3%83%94%e3%83%a5%e3%83%bc%e3%82%bf) 1) NMIとVBlankの違い 2) ファミコンのプログラミングでNMIとVBlankを混在しても話が通る理由 3) .org $FFFA .dw 0 .dw Start .dw 0 というソースを見た他人が呆れる理由 を、自分なりの理解や考えで説明してもらえるかな。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/284
285: 131 [sage] 2014/06/09(月) 21:16:45.44 ID:Sx48Gggw 言い訳になっちゃうかわかりませんが、できたら明日の朝に書き込みます。 ホント自分は基地外なのと、頭が痛いし熱いのでこのままほおっておくと 風邪をこじらすので、すみませんが、失礼します。 リアルが充実してる人たちがうらやましいです。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/285
286: 266 [sage] 2014/06/09(月) 21:30:37.71 ID:oKltYKig >>285 別に急がなくてもいいよ。その代わり自分でちゃんと考えること。 体お大事に。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/286
287: 名前は開発中のものです。 [sage] 2014/06/09(月) 21:32:44.17 ID:fvy3sA+P 頭の悪い高校生なんだから察してやれよ こいつ高校の名前を自分から暴露するような奴だぞ しかしまぁ基地外って自覚あるなら5年ぐらいROMってればいいのに 色々と知識が欠けすぎててこのスレで質問できるレベルにすら至ってないわ http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/287
288: 名前は開発中のものです。 [sage] 2014/06/09(月) 21:38:04.12 ID:dEpln6L7 自分の理解不足を棚に上げて正常動作の定義がおかしいなどと言い張るのは 自分を肯定するために社会を逆恨みする典型的秋葉原通り魔みたいな思考回路だよな 近所でネコの惨殺死体がなければいいけど http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/288
289: 名前は開発中のものです。 [sage] 2014/06/10(火) 03:34:36.85 ID:OhR24Wq5 多くのエミュレータの再現目標は「市販ゲームが動作すること」であって 不完全なプログラムが「実機と同じように動作しない」というレベルでの再現には至っていません ファミコン程度の規模であっても完全再現するエミュレータはいまだに存在していません たとえばファミコンでは電源投入時にRAMの内容が不定であり すべての市販ソフトでは確実に動作させるために必ずRAMを上書き消去するなど、必ずそれを前提とした実装がされています しかしエミュレータの中には通電直後のRAMの初期値が&H00に設定されているものがあり 初期値が何であれRAM内容を消去するように実装されている市販ゲームは問題なく動作しますが RAMの初期値が&H00になっているものであるとして組まれた不完全なプログラムだと そのエミュレータでは動作するが実機では意図した動作をしないという問題に陥ってしまいます 同様ににVBlank期間が実機より長めに設定されているエミュレータも存在しています VBlank期間が長いことで市販ゲームを動作させることに影響はありませんが そのエミュレータ固有のVBlank期間を基準として作成された自作プログラムは 実機上だとプログラマの意図通りの動作をしないことになります このようにエミュレータ上のほぼすべての挙動において、実機ほどシビアではなく動作してしまう方向に緩く設計・再現されているため 実機の挙動を意識せずにエミュレータを基準として作成された自作プログラムの多くは 結果として実機で動かないものになってしまいます http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/289
290: 名前は開発中のものです。 [sage] 2014/06/10(火) 03:38:20.96 ID:OhR24Wq5 マッパーが電源投入時に選択するバンクですが 通常、実機ではハードワイヤードされている最終バンク以外の選択可能バンクは第1バンクが選択されるケースがほとんどですが 多くのエミュレータはなぜか先頭から順番通り昇順に選択されます 市販プログラムは必ず初期バンクを設定するように実装されているため問題なく動作しますが バンクの並びをアテにした不完全なプログラムはエミュレータでは動くが実機では動かないというケースが起こります >>240のプログラムはCHRバンクの初期設定がされていないので CHRバンクが未設定でも順並びに選択されるようなエミュレータでは問題なく動作しているように見えますが 実機だとスプライト側のバンクがすべてバンク0になっているので、宝石落下時のスプライトがBG用のCHRで表示されてしまっています http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/290
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 277 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.010s