ファミコンのプログラム4 (563レス)
ファミコンのプログラム4 http://mevius.5ch.net/test/read.cgi/gamedev/1343539143/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
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
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
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.408s*