ファミコンのプログラム4 (567レス)
ファミコンのプログラム4 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
345: 名前は開発中のものです。 [sage] 2014/10/06(月) 23:47:50.82 ID:5bZUXl8p >>344 160発を56個のスプライトで表示しているので、 大体3フレームに1回の表示でちらつきが目立ちます。 次の版は、96発にスペックを落とすので、 2フレームに1回の表示になるので多少は改善されるはず。 MMC5は魅力的なのですが、最終目標が実機での動作なので 勿体無くないMMC3で頑張ろうと思っています。 あと、負荷は弾丸の処理が半分以上占めているので MMC5を使っても状況はあまり変わらないかと思います。 すでに96発MAXに書き換えて、弾丸1つ辺り5byteの領域から 8byteに増えて、Tile番号と属性値が保持できるようになったので 処理が軽くなりました。 弾丸の角度の変化が無ければ、Bombの下辺りまでの 処理時間で済んでいます。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/345
346: 名前は開発中のものです。 [sage] 2014/10/07(火) 04:35:07.91 ID:3yj7hFfS >>345 1/2フレーム表示ならグラIIのミサイルなどで使ってましたね 欲を言えばですが、弾数が少ないときは1/1フレームで表示出来たら いいかも 試しに割り込み無しにしたところ18ライン分くらい処理が減ってました MMC5自体は光栄のゲームで結構出回ってるので入手は簡単かと 思いますが、今更変えるのもあれですね… 期待してますので頑張ってください http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/346
347: 名前は開発中のものです。 [sage] 2014/10/09(木) 21:46:13.35 ID:44sWDsnn NESASMでアセンブルしたNESファイルは自作カートリッジに焼く時もそのまま使えるんですか? http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/347
348: sage [] 2014/10/09(木) 21:50:10.76 ID:hFc1Ndfq RevolvingGems 1.00を実機で動かしたら不具合が出たので、 今さらですが調べて直してみました。 ・タイトル画面の表示が乱れる ウエイトが足りず、割込み処理での最後の$2006への書込みが HBLANK中に行われていないようので、user.asmのUser_Irq_Title:直後に nopを(余裕を持たせて)3つ追加して乱れを消しました。 ・あそびかたを選ぶと止まる タイトルで設定された割込みが無効化できずに発生し続けているようです。 Guide_Init:でIRQ_FNC+1を0にしたことで、 Irq:のjsr IRQ_FNC-1が飛ばされるため、 User_Irq_Title:中での割込みの無効化が動かないのが原因と思います。 user.asm 474行目のsta IRQ_FNC+1をコメントアウトして動くようになりました。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/348
349: 名前は開発中のものです。 [sage] 2014/10/09(木) 21:51:03.03 ID:hFc1Ndfq sage間違えたorz http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/349
350: 名前は開発中のものです。 [sage] 2014/10/09(木) 21:56:48.11 ID:hFc1Ndfq >>347 kazzo+anagoのような環境だと直接NESファイルを使って書けますね。 ROMライタで直接書き込む場合だとPRGとCHRへの分割が必要かと。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/350
351: 名前は開発中のものです。 [sage] 2014/10/09(木) 22:09:17.01 ID:44sWDsnn >>350 ありがとうございますNESplitという分割ツールがありました。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/351
352: 名前は開発中のものです。 [sage] 2014/10/09(木) 23:56:08.22 ID:EgCI09Ne >>348 実機での動作確認ありがとうございます。 >タイトル画面の乱れ 割り込みが入ってから110clk目に最後の$2006を書いていたのですが、 nop3つ追加ということで、116clk目が正解ということですね。 今のやつも直さないと。 >あそびかたを選ぶと止まる VBlank中にIRQ_FNCを更新する仕組みを追加します。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/352
353: 名前は開発中のものです。 [sage] 2014/10/10(金) 00:27:59.23 ID:giiUNY1I >>352 MMC3だとラスタの260ppu_clk辺りで割込み発生みたいなので、 そこから次ラスタの表示期間終了の256ppu_clkまでの、 (341-260)+256=337ppu_clk = 112.3cpu_clk が必要な待ち時間だと思います。 sta $2006を確実にHBLANKに入れるために+4clkしましたが、 書込みが最後の1clkに行われるとすれば、数クロック削れるかもしれません。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/353
354: 名前は開発中のものです。 [sage] 2014/10/10(金) 21:22:02.81 ID:giiUNY1I >>352 追実験して、nopは一つでも乱れは消えました。 割込み発生から最後のsta $2006完了までが112clkになるので、 ちょっとぎりぎりな感じはしますが。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/354
355: 名前は開発中のものです。 [sage] 2014/10/11(土) 11:53:25.77 ID:JCcDlcCt >>353 ttp://wiki.nesdev.com/w/index.php/MMC3#Hardware Regarding PPU A12 rises: If the BG uses $0000, and the sprites use $1000, then the IRQ will occur after PPU cycle 260 (as in, a little after the visible part of the target scanline has ended). If the BG uses $1000, and the sprites use $0000, then the IRQ will occur after PPU cycle 324 of the previous scanline (as in, right before the target scanline is about to be drawn). When using 8x16 sprites: When there are less than 8 sprites on a scanline, the PPU makes a dummy fetch to tile $FF for each leftover sprite. In 8x16 sprite mode, tile $FF corresponds to the right pattern table ($1000). PPUアドレスバスA12がスキャンラインカウンタのクロックとなっている。 The counter is clocked on each rising edge of PPU A12, no matter what caused it, so it is possible to (intentionally or not) clock the counter by writing to $2006 BGとSPRをどっちに配置するかで、立ち上がり、立下りが変わるので、 IRQが起きる位置とライン数が変わるようだ。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/355
356: 名前は開発中のものです。 [sage] 2014/10/13(月) 07:14:58.66 ID:khCfiiiQ >>354 追試ありがとうございます。 clkを伸ばした場合、エミュレータでどうなるか確認したのですが こちらでは1clk伸ばしただけでも乱れが発生しました。 実機向けとエミュレータ向けの2つのバイナリを用意する必要があるようです。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/356
357: 名前は開発中のものです。 [sage] 2014/10/20(月) 02:34:56.29 ID:VhFQD/az だれかギコ猫より分かりやすいサイト作って もしくは解説コメント付きのソース http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/357
358: 名前は開発中のものです。 [sage] 2014/10/27(月) 22:58:49.97 ID:WLPSmV4W ギコ猫があるだけ恵まれた環境。1990年代のネットはファミコンの 内部資料は英語しか無かったからね。だから普通に挫折した。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/358
359: 名前は開発中のものです。 [sage] 2014/10/28(火) 05:34:41.72 ID:40z/j/Ad バッ活とファミリーベーシック http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/359
360: 名前は開発中のものです。 [sage] 2014/11/05(水) 02:06:14.46 ID:8FC6s1LF Experi9(>>343)の改良版をアップしました。 http://homepage3.nifty.com/~kyoske/nes/Experi10.zip 結局のところ、ファミコン本体の2KBのWRAMだけでは 性能面を向上させつつ、やりくりするのは難しいとわかったので MMC3の拡張WRAMを解禁、弾丸のワーク領域をそちらに移しました。 本体のWRAMに余裕が出来たので、マップの仮想バッファを 倍に増加して、既存の処理を最適化して負荷を下げました。 色々なテーブルを乗せている関係で、共通ルーチン用のプログラム領域の サイズが足りないか不安になってきたのですが、拡張WRAMの空き領域に プログラムを転送すれば良い事に気づき、さらにRAMに転送するんだから 自己書き換えルーチンにできるな、ということで、自己書き換えで性能が 上がりそうなルーチンを試作してみました。 あと、当たり判定実装したり、弾丸の移動処理作ったり、BGM鳴らしてみたりで 処理落ちしないのを確認できたので、性能面で目処が立ったかなというところです。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/360
361: 名前は開発中のものです。 [sage] 2014/11/05(水) 02:20:57.06 ID:8FC6s1LF 試作した自己書き換えルーチンその1 ClearExtWorkMemory: ldy #$60 lda #$00 tax .1: sty SMCLabel(.2+2) .2: sta $6000,x inx bne .2 iny cpy #$68 bne .1 rts SMCLabelは、転送先のアドレスに変換するユーザ関数です。 sta $6000,xの$60を書き換えています。 Indirect Indexモード 6clkに対して、Absolute Indexモード 4clkで ((6clk-4clk)*256-4clk)*8 = 4064clkの節約。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/361
362: 名前は開発中のものです。 [sage] 2014/11/05(水) 02:32:50.39 ID:8FC6s1LF 試作した自己書き換えルーチンその2 Shot_Alloc: ldx SMCLabel(.2+1) .1: lda SH_X,x bmi .9 lda Round96+1,x tax .2: cpx #0 bne .1 .db $24 ; bit <$b8 (set v-flag) .9: clv lda Round96+1,x sta SMCLabel(.2+1) rts cpx #0の#0の部分を書き換え。 弾丸の空きを検索するルーチンで、次回の検索時は空きを検出した 次の場所から検索を始める処理となっています。 Round96は、0,1,2,...94,95,0,1,..と定義されているテーブルで lda Round96+1,x で (x+1)%96 の計算をしています。 ゼロページの$b8には、$6cが格納されており、bit <$b8 でv-flagが設定されます。 空きがない場合にv-flagが設定されてリターンします。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/362
363: 名前は開発中のものです。 [sage] 2014/11/05(水) 02:43:06.58 ID:8FC6s1LF ファミコンのプログラム領域はROMだし、メモリも余裕無いから、 自己書き換えルーチンには縁が無いと思っていたのですが、 拡張WRAM使うとなると、有効な手段であるなと。 ただ、よく考えないと自己書き換えやっても効果を得られないので どのようなパターンが有効か思考する必要ありだなというところです。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/363
364: 名前は開発中のものです。 [sage] 2014/11/05(水) 11:50:49.69 ID:kV2Q14jG >>360 おお、スプライトも見易くなりましたね。 実機(MMC3B)でExperi10.nes焼いて動かしてみましたが、BGが結構 崩れています。 Experi10_irq114.nesですとBGが崩れはしませんが東方の文字の中心あたり からチラチラしています。 また、東方を知らないのでわかりませんが会話表示とスクロールをするとたまに BGが崩れるようです。 (バンク切り替えに失敗したような感じで別の絵が出てました) 参考になれば http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/364
365: 名前は開発中のものです。 [sage] 2014/11/05(水) 18:36:12.45 ID:8FC6s1LF >>364 実機での確認ありがとうございます。 会話画面表示時のBG崩れは、IRQのCHR-BANKの切り替えと メイン処理のPRG-BANKの切り替えの衝突です。 PRG-BANKの切り替えは弾丸の移動量や角度算出のテーブル引きで使用しており、 会話画面では行わなくなるので、現在そのままにしています。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/365
366: 名前は開発中のものです。 [sage] 2014/11/08(土) 23:22:26.65 ID:K8lCFBpt ファイル実行したけど会話画面っていったい何のことなんだ http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/366
367: 名前は開発中のものです。 [sage] 2014/11/09(日) 03:54:20.59 ID:/2f/mjgU セレクトボタンを押しながら上下でバックグラウンドのスクロール量調整 同じく左右で会話画面、ボスHPゲージ消去などができる http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/367
368: 名前は開発中のものです。 [sage] 2014/11/18(火) 00:24:39.88 ID:sul/9y5g 今月号(先月号から?)のゲーラボに、ファミコンソフト開発って記事が載ってた 初歩的な奴だったから、今月号からかも。立ち読みしかしてないけど http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/368
369: 名前は開発中のものです。 [sage] 2014/11/22(土) 00:37:26.95 ID:6HaTj4+E ゲーラボのファミコン開発は1回のみなのかな DSみたいに連載して欲しいなーと思う 好奇心的な需要が有るんではないかと思ったり >>360 弾幕が素晴らしいです。ファミコンでは史上初?なのではないでしょうか BGのIRQスクロールも面白いです。 >>367 参考になりました。ありがとうございます。 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/369
370: 名前は開発中のものです。 [sage] 2014/11/24(月) 07:57:25.72 ID:+tDgRqjL このスレに常駐して間違いを指摘してる人は何者なのかね? 元ハドソンの中○さん? http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/370
371: 名前は開発中のものです。 [sage] 2014/11/24(月) 08:33:08.82 ID:+tDgRqjL もしかしてカル○ャーブ○ーンのあの社長か? http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/371
372: 名前は開発中のものです。 [sage] 2014/11/24(月) 19:13:43.16 ID:7xFBwqHN おい、具体名だすんじゃねえ http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/372
373: 名前は開発中のものです。 [] 2014/12/27(土) 07:48:51.33 ID:wLqAfx70 このスレではみなさんからのプログラムの投稿をお待ちしています http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/373
374: 名前は開発中のものです。 [sage] 2015/01/05(月) 20:34:21.71 ID:AkF9WUbO >>83-85は進展無し?と思ってみたらもう2年前か http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/374
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 193 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.808s*