ファミコンのプログラム4 (567レス)
1-

138: 2014/04/09(水)17:36 ID:Aiee0k4j(1)調 AAS
6502プログラミングの基礎はどうやって勉強するんだろ
アセンブラ言語そのものは分かるけど実装技術が・・・
139: 2014/04/10(木)21:35 ID:hnCuty6F(1/2)調 AAS
>プログラミングの基礎
6502のCPUの割り込みベクタとかの仕様を確認理解して、
他人が書いたソースコードを読んでいくのが良いかと。

ファミコン(古いゲーム機)のプログラミングは、初期化の後、
VSYNC待ち→1フレーム分の処理
の繰り返しとなる独特のプログラム構造を理解する必要があるかな。
140
(8): 2014/04/10(木)21:41 ID:hnCuty6F(2/2)調 AAS
開発途中で、まだゲームの体裁になっていないけど、自作のソフトをさらしてみる。
src.zipにソース一式入っているので、参考頂ければ幸いです。

http://homepage3.nifty.com/~kyoske/nes/RevolvingGems.zip

十字キーでカーソル移動、Aボタンが時計回り、Bボタンが反時計回りに宝石を回します。
宝石が4個以上つながったら消滅します。
141
(2): 2014/04/12(土)04:57 ID:IdgE9LS/(1)調 AAS
おお、すげぇ

宝石がヌルヌル流れるのがいいね。
なんでわざわざラスターしてるのかとおもったら、パレットのために必要なのか。
勉強になる・・・
142: 2014/04/12(土)13:04 ID:BjcqFb8t(1)調 AAS
すごい
仕事がコンピュータに関係ない仕事で趣味だけでここまで作ったのなら偉いと思われるレベル
当時のベーマガに投稿していれば採用されたと思う
143
(2): 2014/04/12(土)16:34 ID:D7Ld43hD(1)調 AAS
>>140
なかなか出来が良さそう
.macro 〜 .endm (引数付きで)
.func
なんかも使うと楽になる場合もあるよ

>>140
http://wiki.nesdev.com/w/index.php/Controller_port_registers
$4017への書き込み(W)によるstrobe(コントローラーのリセット行為)は無意味、
そもそも出力ポートにつながってないかと。
strobe行為は$4016だけで十分。

$4016のbit0が1か0かで、
?コン、?コン、bothのコントローラーの中のTC4021BP(シフトレジスタのIC)の、
パラレル、シリアルの各モードが変わる。
1→0で押しボタンのパラレルデータがシフトレジスタに取り込まれて、
シリアル化されたということだ。

シリアル化されたデータは
?コンは$4016の読み込み(R)で、
?コンは$4017の読み込み(R)で、
それぞれ独立にシフトされる。

http://green.ap.teacup.com/junker/116.html この回路図もいいな
http://nesdev.com/Ntd_8bit.jpg


>>141
パレットはいじってないよ?
144
(1): 2014/04/12(土)19:24 ID:Gzkbouk5(1)調 AAS
欲を言えば、宝石回転をもっと速くして欲しい。
145
(4): 141 2014/04/13(日)00:08 ID:KkvqpUBo(1)調 AAS
>>143
>パレットはいじってないよ?
パレットというか、アトリビュートテーブル?
ラスターしないとパレットの違う宝石が水平に8ドットずれの位置で表示できないよね
146
(3): 2014/04/13(日)16:38 ID:SW34DfG1(1)調 AAS
ラスタスクロールでずらす、って発想すごいなー。
こういう使い方初めて見た。勉強になりました。

当時もこういう使い方あったのかな?
ヘックスマップの戦略シミュとかでも使えそうだ。
147
(2): 2014/04/13(日)21:10 ID:mdytbhuJ(1)調 AAS
>>146
理解力なさすぎ
いくらでもある

スプライト0ヒットで同期とった分割スクロール
  スーパーマリオ、エキサイトバイク
ラスタースクロールの塊
  F-1レースのカーブ演出、ドラクエ?と?の旅の扉、rstrdemo.zip(VirtuaNES作者による)
IRQで同期とったスクロール(これが無ければゲームにならぬ)
  >>140、ロックマン3(武器、ボス選択、ワイリーステージ高速リフト)
  2chスレ:gameurawaza

>>145
色だけがズレるわけじゃない、BGそのものがズレる。
>>140の作品やいろいろなゲームの
G-NESのIRQライン表示をみてみ、ネームテーブル表示みながら。
無機能初期カセットのスプライト0ヒットのゲームでは何も表示されないけど
148
(1): 145 2014/04/14(月)00:05 ID:Ye30GFaz(1/5)調 AAS
>>147
なんでそんな否定からはいるのさ?

「アトリビュートテーブルの制限で、パレットが2x2BGキャラクタごとにしか
指定できないのを回避するために、ラスターでずらしてるのね」
まで言わないと伝わらない?
あなたの発言をみると、ファミコンの知識はあるのは分かるので、
ちょっと考えれば想像できると思うんだが。

146もラスターで「位置をずらす」んじゃなくて、「パレットの制限を回避」
するって発想を褒めてるんだろ。

まぁ、喧嘩したいわけじゃないんで、そこんとこご理解を(^^
149
(3): 146 2014/04/14(月)00:18 ID:BSoZ156l(1/2)調 AAS
>>147
メイン画面とステータス部の分割、疑似3D、疑似多重スクロール、
ゆらゆら燃える炎、巨大ボス、
そこに挙げてくれた例含めて実際に見て知ってるし、仕組みも理解できる。
理解できないのは、コズミックイプシロンくらいなもんでさ。
http://www.youtube.com/watch?v=C8F39OhAiRc#t=25

でも16*16ドットのブロックを行ごとに8ドットずつずらして表示、なんて使い道は見たことなかった。
その発想がすごいって話よ。
150
(1): 145 2014/04/14(月)00:44 ID:Ye30GFaz(2/5)調 AAS
補足。
ラスターに関して147の言ってることは技術的に正しいんだけど、
他人がそれを理解してないのを前提に、否定してるのが、ちょっとカチンときたということ。
(145も146もこの件に関して技術的に勘違いはしてないと思う)

>>140 とか >>131 とか手を動かしてるひとを応援してるんで、こんなレスでスレを汚してごめんよ。

>>146
当時のこういう使い方はあったのかは気になるね。
ヘックスといったら信長の野望くらいしか記憶にないなぁ・・・あれは4x4だから問題ないし。
151
(2): 2014/04/14(月)13:15 ID:PHq3J+m9(1/2)調 AAS
>>149
似たようなのでテトラスターもあるね

コズミックイプシロンは横にラスタースクロールもしているけど、ベースの
アイデアとしてはBGのバンク切り替えアニメと同じことで実現してる

1ラインずつ別バンクに切り替えて絵を組み上げていく感じ
152
(2): 2014/04/14(月)18:55 ID:dbr8gs6R(1/2)調 AAS
140です。

>143
strobeの件、情報ありがとうございます。
ソースに反映したいと思います。

>144
回転時のアニメーションは確かに落下時より遅いので修正します。
パラメータいじるだけなので、修正は難しくありません。

>149
>151
コズミックイプシロン見てみましたが、縦方向にも若干スクロールして立体感出しているみたいですね。
BGのバンク切り替えとの複合技でスゲーなと思います。

今作っているソフトも、2x2ブロック毎にずらしてあげれば
HEX表示できるな と思いつき実証の意味で作っています。
あと、1色共通で2色で描けば、1パレットで2種類、
3パレットで6種類の駒が表示できるなと。

ラスター割り込みは、他にもネタがあります。
例えば、8ドット毎に8ドット縦にずらせば、16x8ドット単位で
BGのパレット指定ができるなとか。
153: 2014/04/14(月)18:57 ID:Ye30GFaz(3/5)調 AAS
コズミックイプシロン、初めて知ったけど、たしかにすごいね・・・
デバッガで見るまで、どうやってるか想像もできんかった。

しかも、この手の3Dビュー系のゲームは個人的にはいまいち面白くないのが
多いけど、ゲームとしても楽しいw

good luck!
154
(1): 2014/04/14(月)19:22 ID:PHq3J+m9(2/2)調 AAS
>>152
カーソル枠でまわる宝石が▽と△の時でカーソル枠の上と下を少し
狭くしたほうがわかりやすいかなと思いました
155: 2014/04/14(月)19:58 ID:BSoZ156l(2/2)調 AAS
>>151
テトラスターは知らなかったんで見てきた。おんなじ感じっす。
それにしても、バンク切り替えでやるのか…すげーな。
ちゃんと地形の模様になってんだもん、良く考えついたもんだ。

いま手元にないんでアレだけど、そのうちデバッガで見てみたい。

>>152
思いついたのか、発想力すげー…。
156: 2014/04/14(月)20:06 ID:dbr8gs6R(2/2)調 AAS
>>154
最初、指摘の通り、カーソル枠を台形にして、▽か△かわかるようにしたのですが、
カーソル移動時にうねうねカーソルの形が変わるのが気持ち悪く感じたので、
今のただの四角にしています。
157: 2014/04/14(月)21:32 ID:qn3GgaV0(1/2)調 AAS
>>148-150 >>131
自演気持ち悪い

わかってないからってファビョって「他人」を弁護?w

>>148
>「アトリビュートテーブルの制限で、パレットが2x2BGキャラクタごとにしか
>指定できないのを回避するために、ラスターでずらしてるのね」
>まで言わないと伝わらない?

伝わってるからそれは違うって言ってるんだけどね

手を動かしていてもね
延々と即値でスプライト初期化してたから変な奴と思ったらやっぱりな

ずらしてパレット指定の限界突破という謎技術を語ってる人が他にもいるようだけど
158: 145 2014/04/14(月)22:05 ID:Ye30GFaz(4/5)調 AAS
>>131 の名誉のために、131と私は別人だよ。
スレのためにもう返事はしないし、あなたが正しいってことでいいよ(^^
159
(2): 2014/04/14(月)22:40 ID:Ye30GFaz(5/5)調 AAS
>>140 さんに質問です。

勉強にソースを読ませてもらってます〜
タスクのなかが下記のようなフローになっていると思うのですが理解あってますか?

...
jsr Yeild
...Vcmd_SequenceDataなど BG書き込み予約系処理、完了時はzフラグで判定...
jsr Yeild_Eq
(zフラグが立っていた場合は jsr Yieldの直後から再実行)
(zフラグが立っていない場合は、下に抜ける)
...

また、あってるとしたら、こういうフローっていうのは
8bitなアセンブラだとわりとよくある手法ですか?

C言語脳なので、pla pla とかで返りアドレス捨ててるの見て、
どこに帰るんだ〜、とか、しばらく混乱してました(^^;

不躾な質問ですいませんが、お暇だったら見て頂ければ幸いです。
160
(1): 2014/04/14(月)23:59 ID:qn3GgaV0(2/2)調 AAS
>>159
立ってる、立ってないが逆
161
(1): 2014/04/15(火)00:19 ID:Rogly49M(1/2)調 AAS
>>159 さん

> タスクのなかが下記のようなフローになっていると思うのですが理解あってますか?
> (zフラグが立っていた場合は jsr Yieldの直後から再実行)
> (zフラグが立っていない場合は、下に抜ける)

Yesです。

> また、あってるとしたら、こういうフローっていうのは
> 8bitなアセンブラだとわりとよくある手法ですか?

あまりないかと思います。
ゲーム屋として仕事したことはないので、どのような手法が一般的かは
知らないのですが、現在の進捗状態を番号で管理してジャンプテーブルで
飛ぶみたいな話は聞いたことがあります。

私の場合は、各処理を分解してジャンプテーブルで呼び出すのが
面倒そうだったので、次の呼び出し先のアドレスで管理する方式としました。
162: 2014/04/15(火)00:22 ID:Rogly49M(2/2)調 AAS
>>160

Yesと書いちゃったけど、確かに、zフラグが立っている場合に抜けるでした。
163: 2014/04/15(火)00:24 ID:4gJhlsqp(1/3)調 AAS
あ、ご指摘どうもです。逆でした
164: 2014/04/15(火)00:25 ID:4gJhlsqp(2/3)調 AAS
あら、、、フラグは z なのに beq/bne だから、頭が混乱する(xx
165: 2014/04/15(火)00:52 ID:4gJhlsqp(3/3)調 AAS
すいません、書き込み順の前後で混乱しました。160さんの指摘で正解ですね。

>>161
なるほど〜。ジャンプテーブルより柔軟性がありそうですね。
あと、継続っぽくてカッコイイ。

ありがとうございます
166
(9): 2014/04/18(金)18:15 ID:jpWSPUfh(1)調 AAS
画面表示中にパレットを書き換えるサンプルプログラムつくってみたので、興味があるひとはみてみてね。
自分は、情報がなくてけっこう試行錯誤したので。

http://www1.axfc.net/u/3224863

メタルスレイダーグローリーのIRQ割り込みを参考にしたんだけど、
7ラインくらい表示ができないのはしかたないのか。
もっといい方法とかあったら、教えてくだしあ。
167
(1): 2014/04/18(金)21:05 ID:GCyjwP+C(1)調 AAS
>>166
中央が黒いのは、書き換え中に色が付くのを防ぐため?
168
(1): 166 2014/04/19(土)02:10 ID:ENCcy0CN(1/2)調 AAS
>>167

うん。

たぶん、ラスター使えるようになってラスターでパレット変更もできるぜぃ、
と思って試した人(過去の俺とか)は、なぞのゴミが表示されて悩まされてると思う。
そのゴミをHBlankに押し込めるために、16byteの書き換えに7lineも画面表示を消してるって感じです。
169: 2014/04/19(土)09:55 ID:5+3bbh99(1)調 AAS
>>168
そうですか。知ってたらあれですが、3Dホットラリーはもろ見えてます。
http://img.gamefaqs.net/screens/b/3/c/gfs_18759_2_2.jpg

170: 2014/04/19(土)13:11 ID:ENCcy0CN(2/2)調 AAS
あ、ほんとだw
実は、3Dホットラリーの名前は以前でてたんで画面見たんだけど、
上2パレット、下2パレットくらいでやってるんじゃない?とおもって、スルーしてた。
ちゃんとパレット書き換えしてたのねw 失礼しますた
171
(2): 2014/04/21(月)00:26 ID:/pAmCg0v(1/2)調 AAS
ゴミなんて消してやんよ
って思ったら
意外と無理だった

if ((!IsRendering) && ((VRAMAddr & 0x3F00) == 0x3F00))
PalIndex = Palette[VRAMAddr & 0x1F];

こんな仕様しらんがな
nintendulatorのPPU.cppより
172
(1): 2014/04/21(月)10:13 ID:LbIV6qH+(1/2)調 AAS
おお、こういう原理だったのか。トンクス >>171

http://forums.nesdev.com/viewtopic.php?t=1209
コレみて、なんとなくパレットカキコミすると色が出るのは、理解してたんだけど、
細かい挙動はよくわかってなかった。
173
(2): 2014/04/21(月)10:17 ID:LbIV6qH+(2/2)調 AAS
ちなみに、これってハードウェア的にはどういう原理なの?
詳しい人いたら教えて。
174: 2014/04/21(月)17:28 ID:rQaSv6+b(1)調 AAS
>>171
そんな断片ソースで理解できるのがすごい。
175
(2): 2014/04/21(月)23:59 ID:/pAmCg0v(2/2)調 AAS
>>166を改造させてもらった

http://www1.axfc.net/u/3227965.zip

ゴミ消した

パレットの0x0dは使えないよ
垂直同期のパルスみたいな電圧になるから
176
(1): 2014/04/22(火)00:47 ID:Ncm5fcM0(1/3)調 AAS
レンダリング止めていればBGの色が出ると思ってた

>>166のおかげで本気出せていろいろ勉強になったわ
>>172系のやつへの理解向上
レベルが一気に3あがった!

rtiの戻り書き換えだとか組み終わった後に
http://forums.nesdev.com/viewtopic.php?t=6484
full_palette.s
の偶奇同期を見つけた
この簡潔なソースで横ブレの無さのキモさといったら

>>173
BGのレンダリングは内部で$3f00へアクセスするんだろうけど
そのバグ挙動なのかね
http://wiki.nesdev.com/w/index.php/Visual_2C02
これ結局まだいじったことないんだけど、使いこなせれば理解できるのかな!?

ところで、また謎現象を見つけてしまった
http://wiki.nesdev.com/w/index.php/PPU_registers#Bit_0_bus_conflict
http://forums.nesdev.com/viewtopic.php?p=112424#p112424
177
(1): 166 2014/04/22(火)03:41 ID:+4JN+sCM(1/5)調 AAS
>>175
おおお、これは技術の粋が詰まったコードですね!素晴らしい!!
私もレベル3上昇して、レベル4になった〜

クロック管理が神々しく緻密・・・
ちなみに、ゲームでこのテクニックを使うとすると、IRQが入りそうなタイミングで
メインスレッドはnop連打になってないとダメという認識でおk?
とすると、実用は難しいけど、、、
ジャストアイデアとしては
2、3ラインくらい前にIRQいれて、一時的にメインスレッドをnop連打ループに切り替えて、
終わったらまたもとのメインスレッドに戻すというのは可能かな?
考えるだけで、脳髄が痛い・・・

>パレットの0x0dは使えないよ
一部の黒はつかっちゃだめというのは聞いてたんだけど、反対におぼえてたみたい(^^;
今後は0x0f使います〜

>>176 の情報も含めて、いろいろありがたい(^^
やっぱり、コードは晒してみるものだなぁ・・・
178: 166 2014/04/22(火)03:55 ID:+4JN+sCM(2/5)調 AAS
いままでの自分の致命的な間違いに気づいた・・・
nopは2クロックだったのね。1クロックだとばっかり思ってた(^^;

よくいままでのコードうごいてたなぁw
179: 2014/04/22(火)18:39 ID:FEq/t9cI(1)調 AAS
てす
180
(2): 2014/04/22(火)20:21 ID:SP0raU7v(1/4)調 AAS
>>175

ソース読ませてもらったけど、
ldy #0
sty $2001
で、PPUのレンダリング止めると、PPUのバスが空くので
その間は自由にVRAMアクセスできたと理解していたんだが
違っていたかな?

そうであれば、HBlank待つ必要ないので、パレット書き換えで
非表示になるライン数を減らせると思う。

あと、割り込み時にはiフラグが立った状態でルーチンが
呼ばれるので sei は要らないと思う。

http://wiki.nesdev.com/w/index.php/CPU_interrupts#IRQ_and_NMI_tick-by-tick_execution
181
(3): 2014/04/22(火)20:38 ID:SP0raU7v(2/4)調 AAS
>>173

PPUのデータのバス(信号線)が1組で、PPUのレンダリング中はVRAMからデータを読み出している。
CPUがVRAMアクセスのためにPPUアドレスを設定するレジスタ($2006)とPPUがネームテーブルにアクセスするアドレスのレジスタが兼用のため、CPUがパレットのアドレスを書き込むとPPUはパレットデータを読み出してレンダリングすることになる。

と理解しているのですが、間違っていたら指摘お願いします。>他の人
182
(1): 166 2014/04/22(火)20:46 ID:+4JN+sCM(3/5)調 AAS
>>180

>で、PPUのレンダリング止めると、PPUのバスが空くので
>その間は自由にVRAMアクセスできたと理解していたんだが
>違っていたかな?
そう思ってたんだけど、PPUのアドレスレジスタが0x3f**だと、
**の色(=ゴミ)が出力されるっていうのが、171のコード片の意味。
183: 166 2014/04/22(火)20:59 ID:+4JN+sCM(4/5)調 AAS
>>181
なるほど〜、
ハードウェアは素人(簡単なワンチップマイコンをいじったくらい)
なんで、解説してもらえて助かるっす。ありがと〜

用語があってるかわからないけど、バスコンフリクトってやつでいいのかな?
あとチップに損傷を与えたりはしないのかしら・・・
まぁ、あとは電子回路関係の情報で調べてみます。
184
(1): 166 2014/04/22(火)21:04 ID:+4JN+sCM(5/5)調 AAS
連投でスマソ

>>181
追加で疑問。
そうすると、0x3f**以外のアドレスでも、そのアドレスのVRAMデータの色が出力されそうなんだけど、
0x3f**以外ではそうはならないみたいなんだよね・・・
これはレジスタ兼用でもそうならないものなのかな?
185: 2014/04/22(火)23:02 ID:SP0raU7v(3/4)調 AAS
>>182
なるほど、了解です。
自分も実験してみよう。
186
(1): 2014/04/22(火)23:13 ID:SP0raU7v(4/4)調 AAS
>>184

The PPUDATA read buffer (post-fetch)
http://wiki.nesdev.com/w/index.php/PPU_registers#The_PPUDATA_read_buffer_.28post-fetch.29

ここに $0000-$3effは内部リードバッファから返すが、$3f00-$3fffは(PPU内部の)データバスに直接配置されている
と書かれているので、この辺りの差で挙動が変わるっぽいですね。
187
(1): 2014/04/22(火)23:47 ID:Ncm5fcM0(2/3)調 AAS
>>180
>seiは要らない
しまった、モロ立ってた
どうも

>>181
パレット$3fxxは通常はPPU内部アクセス、つまり擬似NTSC信号を生成する回路とのやりとりであって
普通のPPU空間には出力されないとどこかに書いてあった気がする

http://nesdev.com/2C02%20technical%20reference.TXT
- palette RAM is accessed internally during playfield rendering (i.e., the
palette address/data is never put on the PPU bus during this time).

http://wiki.nesdev.com/w/images/d/d1/Ntsc_timing.png

画像の通りパレットのアクセスはない

しかしこういう挙動もある、これはレンダリング止めた場合だろう?
Additionally, when the programmer accesses palette RAM via $2006/7, the
palette address accessed actually does show up on the PPU address bus, but
the PPU's /RD & /WR flags are not activated.
この辺あやしいね
188
(1): 2014/04/22(火)23:59 ID:Ncm5fcM0(3/3)調 AAS
>>177
今回はjmp *にしてもHBlankに収まるっぽく大丈夫なようですが

127 line目で
$2001のレンダリングオフにする瞬間の
PPU tickのばらつきが
249〜254 nop連打の場合
249〜257 jmp連打の場合

ばらつきが3dot分増えることになります

市販ゲームのIRQ関係もゴミだらけだし気にすることはない

直前に入れるのはいいアイディアだね
189: 2014/04/23(水)17:56 ID:eYt0ULQB(1)調 AAS
>>186 >>187
なるほど、、、
まだ理解してないけど、このあたり読めばわかる気がしてきた。ありがと

しかし、PPUのアドレスレジスタの兼用さえなければ、レンダリング中に読み書きできて
BGアニメーションとかもっと便利だったろうにって思ってたけど、
Ntsc_timing.png みるかぎり、ひっきりなしにアクセスしてるんだね・・・
とするとメモリポートが2つないとだめだから、結局は無理だったのか。

>>188
了解。
sei/cliさえしなければ最大6クロックだから、6*3=18dot(nopにくらべて12dot大きく)
ずれるのが許容できればおkってことね。
許容できるのか、計算するのが大変だけど(xx
190
(1): 2014/04/23(水)20:09 ID:yop1NMPn(1)調 AAS
この現象で分った事。
パレットの04 08 0Cは00とは別の値を格納できるが、実用上何も使われていないと言う事(合ってるよね?)。
191
(1): 2014/04/23(水)21:35 ID:bXRTGLw+(1)調 AAS
↑あってるっぽい
ただしスプライトの四の倍数とは共有か

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;
192
(1): 2014/04/24(木)07:57 ID:RDg08ToE(1/2)調 AAS
流れぶったぎるようで申し訳ないけど、デバッガ機能が一番使いやすいNESエミュはどれですか?
193: 2014/04/24(木)10:17 ID:TazbtZqQ(1)調 AAS
>>192
FCEUXがおすすめ。
(読/書/実行)ブレークポイント、スキャンラインごとのVRAM内容表示、RAMウォッチ あたりの機能をよく使ってる。
194: 2014/04/24(木)11:46 ID:RDg08ToE(2/2)調 AAS
ありがとう
195: 2014/04/24(木)21:06 ID:Ozv2HHx1(1)調 AAS
ブレークポイントの使いやすさは
G-NESじゃないか
よっぽどトリッキーなコーディングしないならこれで十分

G-NES は使いやすい、指定行まで実行がStepOverを兼ねる
FCEUX はログ機能が最強、シンボル機能搭載、エミュ精度も結構よい
Nintendulator はデバッガ付きではエミュの精度が最強かな、使いにくい
196: 2014/04/24(木)23:37 ID:d8WjRMEc(1)調 AAS
>>191
そう、スプライトと共通(04=14、…)
僕は実機で確認したけど、nendoかnestopiaと同じなら間違いないだろうな。
古いネット上のドキュメントとか間違ってたりするから100%鵜呑みにしない方がいいよ(エミュのソースも)。
197: 2014/04/25(金)00:53 ID:ffWieyHe(1)調 AAS
G-NESは使ってなかったから、ちょっと触ってみた。
デバッガは、FCEUXとG-NESほぼ同等やね。
ちょっとわかりにくいけど、アドレスクリックして"Seek To"で指定行まで実行もできるし。
(この機能が超欲しかったけど、いま探すまでアドレスクリックで指定できるの気付かなかったw)

しかし、FECUXのシンボル情報って吐き出してくれるコンパイラあるのかな・・・
使えれば便利そうなんだけど。
198
(1): 2014/05/10(土)18:53 ID:ShrxaRho(1/4)調 AAS
マッパー0のカセットを何本か作りたいんですが
既存のソフトのHVC-NROM-256K-02基板からICを外すのが面倒なので
プリント基板だけを通販しているところとかないですかね?
もしくは,CADデータとか.
199
(8): 2014/05/10(土)19:06 ID:ShrxaRho(2/4)調 AAS
ちなみに作りたいカセットとはこれです.
この1週間ちょっと頑張ってインプリしてました.
アセンブラなんか普段いじらないので,めちゃくちゃです.
でも,このスレはちょくちょく見てるので,恩返しに公開します.
http://sayonari.com/famicom/FamilyBird.zip
綺麗に書き直したかったですが,しばらくいじれそうにないので,
皆さんに託します.

FCEUXではちゃんと動くんですが,ROMに焼いて,
FC互換機(GCC NEXT)で動かすと,
スプライトがチラチラと画面中に散らばって表示されます.

メモリ管理とかちゃんとしてないし,変なところに書き込んだり,
PPUアクセスのタイミングがむちゃくちゃだったりとかが原因だと思います.
互換機じゃなくて正規版本体ならちゃんとうごくのかな・・.
200
(2): 2014/05/10(土)19:40 ID:WvHa+XO0(1)調 AAS
そこまでやって正規版FCを持っていないというのが謎過ぎる
高いわけじゃないんだから普通に買えばいいのに
201
(2): 2014/05/10(土)20:09 ID:vMtYsoKB(1)調 AAS
>>199
スプライトDMAの前に$2003に$00入れるといいかも
202: 2014/05/10(土)20:52 ID:ShrxaRho(3/4)調 AAS
>>201
すごい!かなり軽減されました.しかしまだチラチラがあります.
しかしさすがのアドバイスありがとうございます.勉強になります.
203
(1): 2014/05/10(土)21:59 ID:2fP2DbGG(1)調 AAS
なんで土管に触っただけで死ぬんだ
こんなクソゲー久しぶりに見たわ
204: 2014/05/10(土)23:12 ID:ShrxaRho(4/4)調 AAS
>>200
ファミコン本体は実家にはいっぱいあるんですが,今の家にはなくて,
急遽必要になったので,とりあえず,ヤフオクで互換機を送料込み900円で落札しました.
その後,今もですが,正規版ファミコンをどれにしようかと,ヤフオクでキョロキョロしてます.
互換機は今日届きました

>>203
これは,FlappyBirdっていう人気アプリのオマージュですが,それも土管で即死です

ROMライターのLEAPER-3Cのドライバが64bitWin7では動かなかったので焦りましたが,
VirtualPC上のXPmodeというやつで,そのOSからLEAPER-3Cが使えたので
良かったです(´ρ`)
205
(1): 2014/05/11(日)01:44 ID:HiLhu8FK(1)調 AAS
非VBlanc期間がループで一切の処理をしていないからDMA転送がVblank内に収まってないんじゃないかね
通常は非VBlank期間にキー入力だのスプライトのデータ準備だのデータを用意しておいて
Vblank期間は描画処理だけを行うようにする
206: 2014/05/11(日)02:54 ID:Mnx9Nf8g(1/3)調 AAS
>>205
ありがとうございます!
チャレンジしてみましたが,上手く実装できませんでした(´ρ`)
どの処理をどこでやればよいか・・・.
もう時間的に頭が働いていないのかも.とりあえず寝ます.
207
(1): 2014/05/11(日)04:04 ID:YECX6XhP(1)調 AAS
>>199
なかなか、ファミコンらしい可愛いグラフィックやね。
nesdevでflappy bird作った奴いないの?みたいなスレがあったから、貼るのもおもしろいかも
http://forums.nesdev.com/viewtopic.php?f=2&t=11103

ちなみに、Nestopiaでもバグってるっぽいので実機の前にこっちでデバッグしたら楽かもしれない。
残念なことにデバッグ機能はほとんどないけど・・・
208
(1): 2014/05/11(日)04:53 ID:Mnx9Nf8g(2/3)調 AAS
>>207
nestopia情報ありがとうございます!
試してみましたが,パレットがおかしくなるバグはありますが,
実機互換機で起こるチラチラ飛び散りバグは出ません.
正規本体でもでないかな.正規本体早く買おうかな.

nesdevにも凸したいと思います(〃゜ω゜〃)
209: 2014/05/11(日)08:18 ID:IEErYv9U(1)調 AAS
>>208
最初のロゴでスプライトのゴミが出るのはメモリの初期化をして
いないからだと思う

パレットがおかしいとかスクロールがぶれるとかそういうのは恐らく
表示期間中にPPUに書き込みしてるんじゃないかな
210: 2014/05/11(日)08:23 ID:dYyMlr6C(1)調 AAS
fceuだとチラツキは見えない
211: 2014/05/11(日)09:26 ID:owqALoBe(1)調 AAS
時々音がおかしくなる。
212
(2): 2014/05/11(日)14:28 ID:rGvGrR+8(1/3)調 AAS
>>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しちゃえばすこしマシになるかな
根本解決にはならないけど
213
(2): 2014/05/11(日)14:29 ID:rGvGrR+8(2/3)調 AAS
>>199
もう構造的に破綻しているけど
この先スクロールゲームにするなら
今の構造のままだともっと破綻する

理想的には
バッファに命令語を用意しておき
NMI直後に命令語を読み取ってVRAMに書き込む
こういうスタイルじゃないとね

構造が悪いからデバッグの難度も上がる
小規模なうちに治さないと

シーンが増えると結局テーブルジャンプや間接ジャンプ( jmp [mem] )、こういった関数ポインタを使わないとやってられないと思う、
デカくなったswitch文のアセンブラでの効率のよい実装のことね。
cmp #n の比較地獄をしていたら、デカくなればなるほど後の方は遅くてやってられない。
シーンが続き番号でないなら比較地獄も免れないけど

>>198 >>200 LEAPER-3C
謎な奴だよなw
IC引っこ抜くよりCADデータある方が時短になるのかw
エミュでデバッグできないやつが、実機ROM焼きしてたら、ますます時間無駄にすると思うけど

>>201
姑息な手かと思ったら、少し根拠あったのね > Obscure details of OAMADDR
214
(1): 2014/05/11(日)15:05 ID:/Ki7K6oz(1)調 AAS
ファミコンは画面周りがややこしいからなぁ
自分も昔は資料が少なかったこともあって
BGを正常に表示できるようになるまでけっこうな時間を要したな
215: 2014/05/11(日)17:55 ID:vl3SyvU7(1)調 AAS
原理的にはむしろ単純だろ
なぜそうなるかの理解がないから理不尽に受け取るだけで
216: 2014/05/11(日)20:28 ID:FD888ndC(1)調 AAS
>>214
ハードウェア的には単純なので、ソフトウェア側での配慮が必要
という方が適切だと思う。
217
(2): 2014/05/11(日)21:03 ID:QGu2c1mG(1)調 AAS
惜しいなあ、技術的にはいいこと書いてるハズなのに口調で台無し
必要もなく刺々しい言葉「しとけよ」「やれ」などを使ったかと思えば
「釣りなの?」「と思う」などと子どもじみた表現が混ざる

いい歳こいて言葉を選べないって、それはもう恥ずかしい事だよ
書き込む前にきちんと自分の書いた文章、推敲したするべきだよ
自分も、他人も、傷つけないために
218
(2): 2014/05/11(日)21:45 ID:hyDhkYCi(1)調 AAS
>>199
□ゲームについて
全体的に良い感じにまとまっていると思いました。
ただ、ミス即ゲームオーバーなので、残機制かライフ制にした方が少し長く遊べて楽しいかなと思います。
あと、果物などのアイテムを出して取ればボーナス点が入るとか。

□プログラムについて
BG書き換えについては、VBlankを深く考えていない実装になっているので、ここから立て直すのはきついと思いました。
205さんの指摘のように、PPUに転送するデータを一旦バッファに入れてVBlank中に転送するフレームワークを作って移行する方が早いかと。
VBlank中にPPUに転送できるデータ量は限界があるので、BG書き換えの実装部分はそれを配慮した作りに直さないと駄目ですね。
219: 2014/05/11(日)23:13 ID:rGvGrR+8(3/3)調 AAS
>>217
ゆとりメンタルなやつは2ちゃん見なきゃいいんじゃない?

お前らは延々と即値でスプライトのバッファ初期化して、
100レス前も読めずNMI使えず$2002のポーリングでループ作ってるアホと同類だろ?w
何度同じこと言われても改善しようとしないやつw

前スレの>>700あたりから湧いてる

画面カクついてる時点で釣りかと思ったし
全部のシーンを厳密に検証する気はないから「思う」と書いただけでね

こういう書き込みも増えたね

>〜エミュで動作しました、バグってました
そりゃ画面がカクついていたり、
ソフトリセット、ハードリセット時に挙動が乱れたりするのは誰が見てもバグだよな

>>218
つくりはじめたばかりのやつが、まとまってるのか?
220
(1): 199 2014/05/11(日)23:30 ID:Mnx9Nf8g(3/3)調 AAS
皆さんご親切に本当に有難うございます.実際にプログラミングしながら勉強することで,
たくさん吸収出来てます!!

>>212
親切にソースチェック&修正案ありがとうございます.
こういう方が即レスくれるのも,さすがこのスレという感じです.
プログラムは,何も考えずに,ここまでとりあえずという感じなので,
皆さんから頂いた意見と,わかったことを入れて,プログラムし直したいとおもいます.

>>218
PPUへのアクセスに時間がかかるし,BG描画後にVRAM周りにアクセスするとヤバイ
っていうことを知らずに実装していった結果が今のプログラムです.
ご指摘のように,バッファに用意→転送にすることと, VBlankの時間を考慮した
実装にしたいです.

ソース公開は恥ずかしかったですが,頑張って出して良かったです!
想定よりも,皆さんからレスを頂けて嬉しいです.頑張ります!
221
(2): 2014/05/12(月)00:09 ID:jaOM61/S(1)調 AAS
>NMI使えず$2002のポーリングでループ作ってる
初心者でこれやらかす奴はたぶん某サイトの影響受けてるだろ
あそこは全体的に説明が不足しすぎてるよ
更新も長いこと止まってるし、当てにするのはやめたほうがいい

Nesdevの日本語資料理解するだけでもだいぶ変わるし
他にも今ではNES関連資料のサイトなんていっぱいある
特にI/Oレジスタについてはサイトによって書いてあること違ったりするから
一つのサイトに拘らず色々見るといい
222: 2014/05/12(月)00:13 ID:p9javgur(1)調 AAS
>>220
BG描画後にVRAMアクセスがNGではなくて、
非VBlank中にVRAMアクセスするのがNGなんです。(画面が乱れる)
短いVBlank中にVRAMを書き換えるために、バッファにデータを溜め込んでおいて、
VBlank(NMI)割り込みに入ったらすぐにバッファのデータを転送しろってことです。
あと、もちろんですが、スプライトのDMA転送もVBlank中に行わなければなりません。
223: 2014/05/12(月)08:39 ID:Wk7QwTB6(1/2)調 AAS
>>199 みたいな、打たれてもへこたれないヤツは2ch向きだね。ガンバレ!

>>217 の意見には同意だけど、そういうヤツもいるのが2chの味なのかなぁ
自分に対して >>213 みたいな反応されたときは、頭来たけどなw
修行が足りない
224: 2014/05/12(月)08:40 ID:Wk7QwTB6(2/2)調 AAS
失礼、>>213>>212 の間違いでした。
225: 2014/05/12(月)10:39 ID:cuBtqyJP(1)調 AAS
当時のRAMはデュアルポートではないから読んでいる最中に書き込みはできない
単純な構造だよね?

で、画面を描画している最中は(BGもOBJも)データをVRAMから読み出している真っ最中だから
そこで無理やりデータを書き込むと、今まで画面描画時に参照していたVRAMのアドレスが置き換えられてしまうため
元の描画処理を継続することができなくなり画面の表示が破綻してしまう

表示周りをいじる際VBlank期間中にアクセスしなければならないのはこういう理由
226
(1): 2014/05/12(月)22:05 ID:jsal4ZTv(1)調 AAS
キラキラスターナイトのソースを読んでみたい。
227: 2014/05/13(火)05:06 ID:9EaC9IEc(1)調 AAS
遊び方にパテントはないわけでして
228: 2014/05/13(火)06:22 ID:T2v6EbAW(1)調 AAS
>>226
絵は卓越しているけど
プログラムは大して高度なことはやってないでしょ
229
(1): 2014/05/13(火)19:16 ID:srI4FW40(1)調 AAS
RIKIがパソファミの安藤に媚び売っててワロタ
ロジックボム組み込んだりする基地外なのを知らんのか近頃のもんは
230: 2014/05/13(火)20:10 ID:f3qQ/xjJ(1)調 AAS
パソファミ作者はメールでの対応が最悪レベル
自分の非を認めないどころか人を犯罪者扱いしたりするキ○○イ
おまけにホンコンのソース盗用疑惑もあるしな ホントどうしようもねぇよ 
素人にはこれしかないから売れるんだろうけど それが余計にたち悪いね
231: 2014/05/15(木)00:00 ID:HB8Kbvvq(1)調 AAS
>>229
>>ロジックボム
そういう噂を聞いたから
その後にちょっとだけ調べたけど
プリンタポートでないI/Oポートに向けて
x86のout命令が発せられてたような、ないような
windows98なら簡単に発動するのかな
より堅牢なOSであるwindows2000にしてたから
効果なしっぽかったけど

近頃のもんが吸出しやROM焼き実機動作させてるのをよく見かけるようになったけど
ソソハメさんの名前がなぜあまり挙がらないか理由をよく認識しておいた方がいい>もっと近頃のもんたちへ
232: 2014/05/15(木)03:12 ID:AXeiaTDm(1)調 AAS
気持ち悪いのが涌いてきたな
233: 2014/05/15(木)05:14 ID:gGlXRPO1(1)調 AAS
すみません、吸出しというのは英語では何というのでしょうか?スペルを教えて下さい
234: 2014/05/15(木)08:42 ID:9cGRzDB1(1)調 AAS
dump
235
(1): 2014/05/20(火)00:15 ID:sHOtKBex(1)調 AAS
>>140
宝石のラスタスクロール凄いね。あと、スプライト吹雪は気持ちいいっす
このスレッドで新しい演出ジャンルに出会えたのは嬉しいね

>>199
土管避けるの難しいけど楽しいね
BGの判定は凄いと思う
どんどん成長してゆくのが楽しみ
236
(3): 140 2014/05/28(水)20:00 ID:pcO3WytB(1/2)調 AAS
ジョイパッドの読み取りルーチンをリファクタリングしたら結構コンパクトになった。
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
ありがとうございます。
237
(1): 140 2014/05/28(水)20:07 ID:pcO3WytB(2/2)調 AAS
あ、

sta <JOYPAD
ror a ; same as lda $80 & clc
sta <JOYPAD+1

として、JOYPADには$00入れないと不味いね。
1-
あと 330 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.037s