ファミコンのプログラム3
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名前は開発中のものです。
2008/06/23(月) 17:38:05ID:z53SrIuZでも900すぎてホンモノが現れたみたいだ。
もう要らねぇと思ってたけど、そいつらの為に立てたよ。
0939938
2012/02/25(土) 20:03:31.39ID:Abu3C86F当然だけど、常に>>938みたいにスプライトのパターンをケチって間借してるわけじゃなく、
普通にBGとスプライトで4KiBずつ分けあって、単に画面が暗転した際にパタンテーブルを書き換えるとか、
平凡にやりくりしてる状況の方がむしろ大半なので念のため。
0940名前は開発中のものです。
2012/02/26(日) 00:39:33.07ID:US8Vrh37解説サンクスなり
職人芸だったわけね
0941名前は開発中のものです。
2012/02/27(月) 17:29:23.40ID:d2Rr2gFY上は当たり判定で、スプライトの座標をタイルに変換させる。でもたまにルーチンで誤変換起こしてしまってる
デバッグしてもよく分からない
原因すらわからねぇ
0942名前は開発中のものです。
2012/02/28(火) 11:32:31.06ID:FLxgWkDL0943名前は開発中のものです。
2012/02/28(火) 13:11:12.77ID:DEMYa7pD0944名前は開発中のものです。
2012/02/28(火) 21:05:59.53ID:FLxgWkDL0945名前は開発中のものです。
2012/02/28(火) 22:42:52.32ID:ac5+J/w/・CrashBlock_Routine:でbcs, bccを使ってるのが敗因。 0<= 弾の中心座標 <8 の論理を構築できてない。
bpl, bmiを使った方が大小関係が直感的に分りやすい。
その際、lda <Bullet_Y_Center → cmp Block001y,x のように不等式で挟まれる側を先にレジスタにロードした方がやりやすいはず。
またadc, sbcと違い、cmp系の前にはclcは必要ない。
・ゲームループがまずく、infinityLoop:内のルーチンの実行回数のフレームレートが一定でない、不安定動作のおそれあり。以下のループが無難。
__ここでNMI有効にせよ__
infinityLoop: ;VBlankを待つ間は無限ループ
jmp infinityLoop
mainLoop: ;メインループ
__ここでNMIを無効にせよ__
;BGとスプライトの表示をOFF
lda #%00000110
sta $2001
lda #$3 ;スプライト描画のためのDMA転送
sta $4014
jsr BlockDisappear ;ブロック消滅;$2006-$2007への書き込みはNMI直後に、VBlankが終わる前になるべく早めに
jsr SetScroll ;スクロールセットもVBlankが終わる前になるべく早めに
;BGとスプライトの表示をON
lda #%00011110
sta $2001
jsr PadGet ;パッド入力チェック
jsr NormalBullet ;弾丸発射
jsr PlayerSpriteMove ;機体の移動
jsr CrashBlock ;ブロックと弾丸の当たり判定
jsr BulletPositionConvert ;弾丸の座標をタイル番号に変換
__ここでNMI有効にせよ__
NMIEnd:
rti
0946名前は開発中のものです。
2012/03/22(木) 16:43:43.53ID:NBlMXw6A0947名前は開発中のものです。
2012/03/22(木) 16:44:38.63ID:NBlMXw6A0948名前は開発中のものです。
2012/03/23(金) 05:49:38.45ID:EKmbrKmy0949名前は開発中のものです。
2012/03/24(土) 23:29:09.53ID:pi7aftbx0950名前は開発中のものです。
2012/03/25(日) 01:14:37.28ID:c32Eu5AGという話じゃなくて?
0951名前は開発中のものです。
2012/03/25(日) 17:19:57.67ID:W0Y8frQCttp://ll.la/Rv~l
ファミコンプログラミングがやりたくて、
試しにN106で全画面表示をやってみたんですが、
G-NESだとうまく表示できなくて……
VirtuaNES、nestopiaだと期待通り動くんですが……
上のURLにソースコードと、各環境で実行したSSをupしました。
詳しい方、原因とか教えてくれませんか?
0952名前は開発中のものです。
2012/03/25(日) 17:49:36.89ID:sx4Vwb9x0953名前は開発中のものです。
2012/03/25(日) 23:12:13.63ID:Ih97tOjy自作のnesをfdsファイルに変換して、fdsloadrでRAMアダプタに転送したことならある
(市販のnesをfdsファイルに変換するのは無理っぽい)
0954名前は開発中のものです。
2012/03/26(月) 21:41:21.79ID:q32IwSYQ>>952
返信ありがとう。
環境によってIRQカウンタの進み方が微妙に違うっぽいです。
初回にとりあえず1フレーム描画して、IRQカウンタの速度を取得しようと思います。
あと、>>951にupしたコードだと、VBLANK終了待ちに$2002のbit7を見たりしてますが、
これじゃVBLANKの検出ってできないんですね……。
(x,y)=(0,0)にゼロスプライトを置いて、それを見るように変えています。
なかなかむずかしいですね……。
0955名前は開発中のものです。
2012/03/26(月) 23:40:41.01ID:uRvDMM790956名前は開発中のものです。
2012/03/31(土) 14:42:03.41ID:upBLiWOtどうやればいいのでしょうか?
0957名前は開発中のものです。
2012/03/31(土) 18:44:20.80ID:lM09VNG10958名前は開発中のものです。
2012/04/22(日) 13:28:39.16ID:22nDGbXy0959名前は開発中のものです。
2012/04/22(日) 16:18:06.49ID:x+Av2sLm0960名前は開発中のものです。
2012/04/22(日) 17:21:10.63ID:22nDGbXy言葉足らずだったごめん。
ページ境界をまたがないとき、
ブランチしてもしなくても2サイクルなの?
0961名前は開発中のものです。
2012/04/22(日) 19:52:17.64ID:4jO4E/1Lページ境界跨がない分岐をしたら、3サイクル(↑に加えて、下位8ビット分のアドレス計算で1サイクル追加)
ページ境界を跨いで分岐をしたら、4サイクル(↑に加えて、上位8ビット分のアドレス計算でさらに1サイクル追加)
だったはず。
0962名前は開発中のものです。
2012/04/23(月) 06:49:12.90ID:XUn2WlEg何故、一部の命令でページ境界またぐと
1サイクル増えるのかも知らなかったんで、勉強になった
そういう仕組みだったのね
0963名前は開発中のものです。
2012/04/23(月) 15:19:07.79ID:/vOkL049PRGROM領域を32KBにして
$C000以降にもプログラムを書きたい場合には、ヘッダを
inesprg 2
にする以外には
どうすればいいでしょうか
0964名前は開発中のものです。
2012/04/23(月) 16:44:47.09ID:iUjnyHkr.bank 0
.org $8000
<ここにコード書く>
.bank 1
.org $a000
<ここにコード書く>
.bank 2
.org $c000
<ここにコード書く>
.bank 3
.org $e000
<ここにコード書く>
0965名前は開発中のものです。
2012/04/23(月) 16:51:12.56ID:Jr0Oiqmoありがとうございますッ
勉強になりましたッ
0966名前は開発中のものです。
2012/06/26(火) 23:00:34.30ID:dKkI9P+Q0967名前は開発中のものです。
2012/06/26(火) 23:07:03.84ID:Mm6viaGL0968名前は開発中のものです。
2012/06/27(水) 20:59:08.12ID:3QSG7wMg0969名前は開発中のものです。
2012/06/28(木) 03:04:51.03ID:Ap+z5IPf0970名前は開発中のものです。
2012/07/23(月) 18:20:09.87ID:UpRCw62kあんまり大した出来じゃないけど、見てください。
http://www1.axfc.net/uploader/Sc/so/364523.zip
pass:なし
0971名前は開発中のものです。
2012/07/23(月) 19:37:38.05ID:8OEeXxja0972名前は開発中のものです。
2012/07/23(月) 20:07:44.15ID:qcJjYm+Cコメントはそっちで付けるという風にしたら?
またキチガイ君が暴れだしちゃうから
0973名前は開発中のものです。
2012/07/23(月) 21:18:41.03ID:GE5kmtkE右から2列目のブロックがアタリ判定が無くて消せない
何も無いところでボールが跳ね返る
0974名前は開発中のものです。
2012/07/23(月) 21:38:36.66ID:UpRCw62kプレイありがとうございます。
>>右から2列目のブロックがアタリ判定が無くて消せない
何故、ブロックを固定式(左上から5行、32列)
にしたかというと、1つの8x8ピクセルのブロックから当たり判定を行うにあたり、
全然バラバラに配置したブロックだと座標を取得しずらかったからです。
なのでメモリの$300と$400に160個ずつ座標が取得してあるはずです。
その値の代入の際に不手際があったのだと思われます。
たとえば0から+8ずつ32回代入すると一番右端のブロックは256になってしまいますね。
>>何も無いところでボールが跳ね返る
これは、仕様です。今のところ開発では半分ほどゲームオーバーの処理を終えてますが、
アップロードするかは未定です。
0975名前は開発中のものです。
2012/07/25(水) 00:52:40.09ID:z4RF2/U10976名前は開発中のものです。
2012/07/25(水) 09:11:46.39ID:c+m1zKC6誰に同意を求めてるんだこのキチガイは
0977名前は開発中のものです。
2012/07/25(水) 21:12:44.94ID:BHYk1dC8ネームテーブル拡張とか
8x8単位のパレット指定とか
ハードウェア的にどうなってるのかさっぱりわからん
$2000のbit6が関係してるのかな?
0978名前は開発中のものです。
2012/07/26(木) 00:25:20.67ID:qWhbLsW5ttp://wiki.nesdev.com/w/index.php/PPU_scrolling#Use_of_Loopy_V_during_rendering (loopyppu.zipの咀嚼版)を読む
NTSC 2C02 technical reference, by Brad Taylor を読む
Ntd_8bit.jpg 回路図を読む
これらが理解出来たころには、うすうす実現可能な事に気付ける
0979名前は開発中のものです。
2012/07/26(木) 23:06:38.81ID:5MJlJbZb$2000のbit6は関係ないんだね
2C02の14-17ピンにこんな秘密があったなんて・・・
ネームテーブルのインデックス拡張はまあ納得
確信はもてないんだけど、8x8単位のパレット指定は
PPU内部のRAMにアクセスする時も
アドレスラインから信号が出ていることを利用してるのかな?
$3F00から$3F1Fまで全部#$00にしてれば
MMC5からデータを出力してもいけそうな気がする
どちらにせよMMCはReadEnable信号かアドレス線かその辺を利用して
PPUと同期してるとしか考えられないな・・・・
結構勉強になったわ
0980名前は開発中のものです。
2012/07/27(金) 08:18:25.85ID:7+iQSIOi8x8単位のパレット指定は
$3F00-$3F1Fとそれほど関係ない
0981名前は開発中のものです。
2012/07/27(金) 21:18:44.92ID:sQ8tA8mC>>979
パレット拡張のところは勘違いしてるっぽいな。
MMC5カートリッジが$3F00-$3F1Fの値をいじる訳ではないし、その制限の壁は越えられない。
$3F00-$3F1FはPPU内部だけで参照出来る(あなたが言ったような例外もあったはずだけど利用はできないよ?)。
ttp://nesdev.parodius.com/mmc5-e.txt
<ExGrafix Mode>
bit PPpppppp
PP: use character palette number
pppppp: use background CHR-PAGE number index=4k
たかだか2bitのパレット指定。
ということで
Memory fetch phase 1 thru 128
-----------------------------
1. Name table byte
2. Attribute table byte
3. Pattern table bitmap #0
4. Pattern table bitmap #1
の2.のタイミングでMMC5カートリッジがAttribute table byteを出力してるだけだと思う。
8x8毎にAttributeを指定できるというだけ。
こっちの方が解かり易い?
ttp://wiki.nesdev.com/w/index.php/PPU_rendering
0982名前は開発中のものです。
2012/07/28(土) 08:56:55.56ID:GyT0u9/H0983名前は開発中のものです。
2012/07/28(土) 09:01:50.69ID:80Z4yq/U>>979を書いてたときなんか勘違いしてた
朝風呂入ってもう一度考えてたら>>980ということになった
とりあえずこれで理解できた・・・と思う
0984名前は開発中のものです。
2012/07/28(土) 12:56:03.28ID:oeXoY4Qdすごいわ。
0985名前は開発中のものです。
2012/07/28(土) 13:55:21.86ID:Nq3GjYH8レス数が950を超えています。1000を超えると書き込みができなくなります。