ファミコンのプログラム4

2012/07/29(日) 14:19:03.64ID:a5QeqSA0
■過去スレ

ファミコンのプログラム
http://pc8.2ch.net/test/read.cgi/gamedev/1013696305/

ファミコンのプログラム2
http://pc11.2ch.net/test/read.cgi/gamedev/1135099156/

ファミコンのプログラム3
http://toro.2ch.net/test/read.cgi/gamedev/1214210285/

■関連サイト

MagicKit Homepage
http://www.magicengine.com/mkit/
すずめ愛好会
http://web.archive.org/web/*/http://vsync.org/ns/index.html
ギコ猫でもわかるファミコンプログラミング
http://gikofami.fc2web.com/
わいわいの巣
http://www.geocities.jp/yy_6502/
mck hogehoge
http://takamatsu.cool.ne.jp/dutycycle/
NES info, programs, and demos
http://nesdev.parodius.com/
pgate1@crystal
http://crystal.freespace.jp/pgate1/
cc65 @ wiki
http://www34.atwiki.jp/cc65/
2012/07/29(日) 14:19:59.97ID:a5QeqSA0
■ソフトウェア開発者のサイト

NES Hack Factory
http://www.geocities.jp/kz_s6502/
D-Soft
http://aqube.kir.jp/dsoft/index.html
OBONO's Web Site
http://homepage3.nifty.com/obono/
Family Assembler
http://fuguri23.hp.infoseek.co.jp/FamAsm/
nurvle.com(NES)
http://www.ash.ne.jp/~nurv/nes/
peacemay.net
http://peacemay.net/
ファミコンソフト開発のおへあ
http://stargate.game-server.cc/fc/
第7サプライヤー
http://seventhxevo.xxxxxxxx.jp/seventh/
2012/07/29(日) 17:33:33.81ID:h8AqcaeO
マリオ2ってスコアなどのパラメータ表示に
ディスクシステムのタイマー割り込み利用してたんだね
1だと0爆弾だったのに

なんかどのサイトにも
ディスクシステムのIRQタイマに関する記述があまりないんだよね・・・
どのアドレスを使うかはわかってんだけど
1カウントが何秒位なのかの載ってるとこがない・・・

自分で測った感じだと
カウンタに65535(MAX)を設定してみたところ
11フレーム中に5回割り込みが発生した

1回の割り込み毎に2.2フレームであるから
1/60*2.2=0.036666・・・秒、つまり
65,535カウント≒36,666,667n秒 よって
1カウント≒560n秒位
2012/07/29(日) 17:44:08.71ID:hixC6Gva
夢工場のことか?
スーパーマリオUSAか?
NESのマリオ2か?
2012/07/29(日) 17:52:48.30ID:h8AqcaeO
>>4 ディスクシステムのスーパーマリオブラザーズ2

でも>>3の計算だと少し精度が甘いからラスタスクロールとか使うときは
NMIが起きるごとに再設定した方が確実だろうね

それからRAMアダプタに入ってる水晶は21.47727MHzだったから
21,477,270*0.00000056≒12
つまり12分周されたクロックが入ってるっぽい
(つまりファミコンのMPUと同じ1.79MHz)

あとタイマーへのクロックを何分周するか変えられないのだろうか
$4022になにか知らないオプションもありそうな気がしてならない
2012/07/29(日) 18:11:08.04ID:hixC6Gva
>ディスクシステムのスーパーマリオブラザーズ2

そういえばそんなのあったな
すまんボケまくったw
2012/07/29(日) 18:15:32.39ID:hixC6Gva
結局はエミュのソース見ちゃえばいいんですよ
ディスクシステムなら日本人エミュ作者のがいい
2012/07/29(日) 18:39:34.34ID:hixC6Gva
見てきたらCPU同様の1.79MHzのカウンタのようです
CPUのクロックは12分周が基本だから
それ以上でもそれ以下でもメリットは無いでしょ
2012/07/29(日) 19:03:19.68ID:h8AqcaeO
>CPUのクロックは12分周が基本だから
>それ以上でもそれ以下でもメリットは無いでしょ

まあそうなんだけどね
2012/07/29(日) 20:16:49.27ID:rQX8VRkF
何秒とかそんな世界じゃ無い。
何クロックと考えた方が良い。1h=約113.7クロック
2012/08/02(木) 00:39:42.04ID:pHdQmVv7
なんでファミコンは描画中
PPUアドレス空間にアクセスできないようにしたんだろうね・・・
やはりコストからか
2012/08/14(火) 22:43:48.52ID:3GTdhVqH
アクセスできないんだっけ、アクセスすると異常なデータが読めるとかでなく
2012/08/15(水) 01:00:01.72ID:NFZzBwkk
アクセスはできるけど$2006自体が現在の画面描写位置そのものだから
画面表示が引きずられちゃう
2012/08/24(金) 23:22:57.17ID:EDbXndLG
ファミコンほど理解しやすいハードウェアって
なかなかない気がする
2012/08/24(金) 23:47:20.82ID:fbm4SP4s
>>14
あの頃のPCだとほとんど同じような感じだったと思うけどな
MSXとか感覚的にはファミコンとほぼ同じというかもっと簡単だけど
あの頃は個人レベルでハードウェアの隅々まで理解できる環境が多かったな
2012/08/29(水) 00:13:52.29ID:dCbNSnnq
0爆弾で画面2分割し、
上は縦スクロール、下は固定(「沙羅曼蛇」のような画面)に挑戦しています

0番スプライトを画面左端に持ってきて、左端8ピクセルを$2001で隠すと
$2002のヒット検出はできないでしょうか

ためしにやった所
G-NES:できる   VirtuaNES:できる
実機(AV仕様):できていない(下画面が描画されない。左端クリップ無ければできる)
おそらく実機PPUの仕様かと想像しています。
2012/08/29(水) 09:34:26.48ID:XGVG2N0d
マッパー変更してIRQ使えるやつで
やるってことじゃだめなのか?

実機でできないなら、できないものなんだろ
0spriteを1dotだけのものにするとか、回避策はいろいろあるだろう
2012/08/29(水) 10:01:11.44ID:i4hq19i2
開発の止まったエミュ持ち出していまさら何がしたいのか理解に苦しむ
2012/08/29(水) 18:07:15.63ID:KHvPZkYe
単純に考えると、
・クリップ領域から出るように、左から9ピクセル目に仕掛ける
・1つ前のラインの右端に仕掛ける。
のどちらかで出来ると思うんだけど。

クリップ領域に0爆弾置いたら不発になるのは、0爆弾はスプライトを表示するタイミングに依存してるからでないの。
つまり、クリップした区間ではスプライトの表示処理自体がスキップされるとかそういう理由で。
俺、0爆弾なんて使わないから想像なんで違ってたらすまんが。
2012/08/29(水) 18:11:14.26ID:G0Y2hDxx
左端だと描写中だからおかしくなって当然だろ
HBlank中に掛かるように右端でやれよ
2012/08/29(水) 19:00:35.13ID:V0VP3qcd
すごくザックリ&うろ覚えで申し訳ないのだけど、

背景ピクセルの上に0番スプライトのピクセルを重ねて、ピクセルを描画。

→ このとき、描画したピクセルが透明色でなければ、
  $2002の[6]番目のビットが立つ。
→ このとき、描画したピクセルが透明色ならば、
  $2002の[6]番目のビットは立たない。

って感じじゃなかったっけ?
クリップで強制的に透明色にされた背景ピクセル+強制的に透明色にされた透明スプライト=透明色

なので、0爆弾がヒットしないんじゃないかと。
実機もないし、エミュで試してもいないので、想像ですまん。

てか、過疎っぽく見えて、読んでる人いるんですねw
2216
垢版 |
2012/08/29(水) 21:37:22.64ID:3N5g/q8u
ありがとうございます
やっぱり0スプライトを左端、というのは
いい方法じゃないですね

右端に置くとか、IRQ割り込みとかでやってみます
0番スプライトでやるとなると、BGもひと工夫が必要ですね
2012/08/30(木) 00:13:48.09ID:2dcDlWaJ
>>16
ヒット検出しないのが正解だろうね。 実機でそうなったんだし。
上から覆い隠してる訳ではなくキャラクタを表示していない(と俺は考えてる)のだから、ヒットしなくて当然と思うけど。
左端がダメとかは、関係ない。横スクロールの指定はいつでもできる。
2012/08/30(木) 04:48:24.33ID:YFBZ+1yV
検出してからレジスタ叩いてるクロック分だけ画面描画進んでるから
次のラインまで最低でも12クロックはズレたままでしょ
ライン単位での描画しかサポートされてないエミュだと再現できないけど
2012/08/30(木) 23:09:45.06ID:mbhkbHVJ
>>23 がはぼ正しい
>>20 はどちらかというと間違い HBlank中が必須というわけではない

>>24 のようにCPUがフェッチ&デコード&実行&ライトやってる時間にも、PPUのドットは結構動くことに注意

普段はG-NESの使いやすいデバッガでデバッグ。
使いやすいVirtuaNESやNNNesterJでおおまかな確認。
際どいタイミングが必要なデバッグはFCEUXとNintendulator。
Nestopiaでタイミングの最終動作確認。
2012/08/31(金) 04:25:11.05ID:qhg8Zh3g
大まかなデバッグはエミュでやって最終的に実機で動作確認してるわ
2012/08/31(金) 23:35:00.18ID:gnF3SCUx
0爆弾の設置場所は捨てライン用意するならどこでもいいけど
右端なら画面に影響は出ないわな
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況