ファミコンのプログラ ..
141:名前は開発中のものです。
14/04/12 04:57:10.26 IdgE9LS/.net
おお、すげぇ
宝石がヌルヌル流れるのがいいね。
なんでわざわざラスターしてるのかとおもったら、パレットのために必要なのか。
勉強になる・・・
142:名前は開発中のものです。
14/04/12 13:04:08.62 BjcqFb8t.net
すごい
仕事がコンピュータに関係ない仕事で趣味だけでここまで作ったのなら偉いと思われるレベル
当時のベーマガに投稿していれば採用されたと思う
143:名前は開発中のものです。
14/04/12 16:34:03.45 D7Ld43hD.net
>>140
なかなか出来が良さそう
.macro 〜 .endm (引数付きで)
.func
なんかも使うと楽になる場合もあるよ
>>140
URLリンク(wiki.nesdev.com)
$4017への書き込み(W)によるstrobe(コントローラーのリセット行為)は無意味、
そもそも出力ポートにつながってないかと。
strobe行為は$4016だけで十分。
$4016のbit0が1か0かで、
Tコン、Uコン、bothのコントローラーの中のTC4021BP(シフトレジスタのIC)の、
パラレル、シリアルの各モードが変わる。
1→0で押しボタンのパラレルデータがシフトレジスタに取り込まれて、
シリアル化されたということだ。
シリアル化されたデータは
Tコンは$4016の読み込み(R)で、
Uコンは$4017の読み込み(R)で、
それぞれ独立にシフトされる。
URLリンク(green.ap.teacup.com) この回路図もいいな
URLリンク(nesdev.com)
>>141
パレットはいじってないよ?
144:名前は開発中のものです。
14/04/12 19:24:29.80 Gzkbouk5.net
欲を言えば、宝石回転をもっと速くして欲しい。
145:141
14/04/13 00:08:08.07 KkvqpUBo.net
>>143
>パレットはいじってないよ?
パレットというか、アトリビュートテーブル?
ラスターしないとパレットの違う宝石が水平に8ドットずれの位置で表示できないよね
146:名前は開発中のものです。
14/04/13 16:38:48.65 SW34DfG1.net
ラスタスクロールでずらす、って発想すごいなー。
こういう使い方初めて見た。勉強になりました。
当時もこういう使い方あったのかな?
ヘックスマップの戦略シミュとかでも使えそうだ。
147:名前は開発中のものです。
14/04/13 21:10:32.33 mdytbhuJ.net
>>146
理解力なさすぎ
いくらでもある
スプライト0ヒットで同期とった分割スクロール
スーパーマリオ、エキサイトバイク
ラスタースクロールの塊
F-1レースのカーブ演出、ドラクエVとWの旅の扉、rstrdemo.zip(VirtuaNES作者による)
IRQで同期とったスクロール(これが無ければゲームにならぬ)
>>140、ロックマン3(武器、ボス選択、ワイリーステージ高速リフト)
スレリンク(gameurawaza板:143番)
>>145
色だけがズレるわけじゃない、BGそのものがズレる。
>>140の作品やいろいろなゲームの
G-NESのIRQライン表示をみてみ、ネームテーブル表示みながら。
無機能初期カセットのスプライト0ヒットのゲームでは何も表示されないけど
148:145
14/04/14 00:05:28.57 Ye30GFaz.net
>>147
なんでそんな否定からはいるのさ?
「アトリビュートテーブルの制限で、パレットが2x2BGキャラクタごとにしか
指定できないのを回避するために、ラスターでずらしてるのね」
まで言わないと伝わらない?
あなたの発言をみると、ファミコンの知識はあるのは分かるので、
ちょっと考えれば想像できると思うんだが。
146もラスターで「位置をずらす」んじゃなくて、「パレットの制限を回避」
するって発想を褒めてるんだろ。
まぁ、喧嘩したいわけじゃないんで、そこんとこご理解を(^^
149:146
14/04/14 00:18:00.10 BSoZ156l.net
>>147
メイン画面とステータス部の分割、疑似3D、疑似多重スクロール、
ゆらゆら燃える炎、巨大ボス、
そこに挙げてくれた例含めて実際に見て知ってるし、仕組みも理解できる。
理解できないのは、コズミックイプシロンくらいなもんでさ。
URLリンク(www.youtube.com)
でも16*16ドットのブロックを行ごとに8ドットずつずらして表示、なんて使い道は見たことなかった。
その発想がすごいって話よ。
150:145
14/04/14 00:44:20.53 Ye30GFaz.net
補足。
ラスターに関して147の言ってることは技術的に正しいんだけど、
他人がそれを理解してないのを前提に、否定してるのが、ちょっとカチンときたということ。
(145も146もこの件に関して技術的に勘違いはしてないと思う)
>>140 とか >>131 とか手を動かしてるひとを応援してるんで、こんなレスでスレを汚してごめんよ。
>>146
当時のこういう使い方はあったのかは気になるね。
ヘックスといったら信長の野望くらいしか記憶にないなぁ・・・あれは4x4だから問題ないし。
151:名前は開発中のものです。
14/04/14 18:55:50.61 dbr8gs6R.net
140です。
>143
strobeの件、情報ありがとうございます。
ソースに反映したいと思います。
>144
回転時のアニメーションは確かに落下時より遅いので修正します。
パラメータいじるだけなので、修正は難しくありません。
>149
>151
コズミックイプシロン見てみましたが、縦方向にも若干スクロールして立体感出しているみたいですね。
BGのバンク切り替えとの複合技でスゲーなと思います。
今作っているソフトも、2x2ブロック毎にずらしてあげれば
HEX表示できるな と思いつき実証の意味で作っています。
あと、1色共通で2色で描けば、1パレットで2種類、
3パレットで6種類の駒が表示できるなと。
ラスター割り込みは、他にもネタがあります。
例えば、8ドット毎に8ドット縦にずらせば、16x8ドット単位で
BGのパレット指定ができるなとか。
152:名前は開発中のものです。
14/04/14 18:57:07.18 Ye30GFaz.net
コズミックイプシロン、初めて知ったけど、たしかにすごいね・・・
デバッガで見るまで、どうやってるか想像もできんかった。
しかも、この手の3Dビュー系のゲームは個人的にはいまいち面白くないのが
多いけど、ゲームとしても楽しいw
good luck!
153:名前は開発中のものです。
14/04/14 19:22:56.78 PHq3J+m9.net
>>151
カーソル枠でまわる宝石が▽と△の時でカーソル枠の上と下を少し
狭くしたほうがわかりやすいかなと思いました
154:名前は開発中のものです。
14/04/14 19:58:14.37 BSoZ156l.net
>>151
テトラスターは知らなかったんで見てきた。おんなじ感じっす。
それにしても、バンク切り替えでやるのか…すげーな。
ちゃんと地形の模様になってんだもん、良く考えついたもんだ。
いま手元にないんでアレだけど、そのうちデバッガで見てみたい。
>>151
思いついたのか、発想力すげー…。
155:名前は開発中のものです。
14/04/14 20:06:28.23 dbr8gs6R.net
>>153
最初、指摘の通り、カーソル枠を台形にして、▽か△かわかるようにしたのですが、
カーソル移動時にうねうねカーソルの形が変わるのが気持ち悪く感じたので、
今のただの四角にしています。
156:名前は開発中のものです。
14/04/14 21:32:22.23 qn3GgaV0.net
>>148-150 >>131
自演気持ち悪い
わかってないからってファビョって「他人」を弁護?w
>>148
>「アトリビュートテーブルの制限で、パレットが2x2BGキャラクタごとにしか
>指定できないのを回避するために、ラスターでずらしてるのね」
>まで言わないと伝わらない?
伝わってるからそれは違うって言ってるんだけどね
手を動かしていてもね
延々と即値でスプライト初期化してたから変な奴と思ったらやっぱりな
ずらしてパレット指定の限界突破という謎技術を語ってる人が他にもいるようだけど
157:145
14/04/14 22:05:09.05 Ye30GFaz.net
>>131 の名誉のために、131と私は別人だよ。
スレのためにもう返事はしないし、あなたが正しいってことでいいよ(^^
158:名前は開発中のものです。
14/04/14 22:40:16.03 Ye30GFaz.net
>>140 さんに質問です。
勉強にソースを読ませてもらってます〜
タスクのなかが下記のようなフローになっていると思うのですが理解あってますか?
...
jsr Yeild
...Vcmd_SequenceDataなど BG書き込み予約系処理、完了時はzフラグで判定...
jsr Yeild_Eq
(zフラグが立っていた場合は jsr Yieldの直後から再実行)
(zフラグが立っていない場合は、下に抜ける)
...
また、あってるとしたら、こういうフローっていうのは
8bitなアセンブラだとわりとよくある手法ですか?
C言語脳なので、pla pla とかで返りアドレス捨ててるの見て、
どこに帰るんだ〜、とか、しばらく混乱してました(^^;
不躾な質問ですいませんが、お暇だったら見て頂ければ幸いです。
159:名前は開発中のものです。
14/04/14 23:59:40.63 qn3GgaV0.net
>>158
立ってる、立ってないが逆
160:名前は開発中のものです。
14/04/15 00:19:44.09 Rogly49M.net
>>158 さん
> タスクのなかが下記のようなフローになっていると思うのですが理解あってますか?
> (zフラグが立っていた場合は jsr Yieldの直後から再実行)
> (zフラグが立っていない場合は、下に抜ける)
Yesです。
> また、あってるとしたら、こういうフローっていうのは
> 8bitなアセンブラだとわりとよくある手法ですか?
あまりないかと思います。
ゲーム屋として仕事したことはないので、どのような手法が一般的かは
知らないのですが、現在の進捗状態を番号で管理してジャンプテーブルで
飛ぶみたいな話は聞いたことがあります。
私の場合は、各処理を分解してジャンプテーブルで呼び出すのが
面倒そうだったので、次の呼び出し先のアドレスで管理する方式としました。
161:名前は開発中のものです。
14/04/15 00:22:16.34 Rogly49M.net
>>159
Yesと書いちゃったけど、確かに、zフラグが立っている場合に抜けるでした。
162:名前は開発中のものです。
14/04/15 00:24:55.54 4gJhlsqp.net
あ、ご指摘どうもです。逆でした
163:名前は開発中のものです。
14/04/15 00:25:59.35 4gJhlsqp.net
あら、、、フラグは z なのに beq/bne だから、頭が混乱する(xx
164:名前は開発中のものです。
14/04/15 00:52:17.35 4gJhlsqp.net
すいません、書き込み順の前後で混乱しました。160さんの指摘で正解ですね。
>>160
なるほど〜。ジャンプテーブルより柔軟性がありそうですね。
あと、継続っぽくてカッコイイ。
ありがとうございます
165:名前は開発中のものです。
14/04/18 18:15:30.91 jpWSPUfh.net
画面表示中にパレットを書き換えるサンプルプログラムつくってみたので、興味があるひとはみてみてね。
自分は、情報がなくてけっこう試行錯誤したので。
URLリンク(www1.axfc.net)
メタルスレイダーグローリーのIRQ割り込みを参考にしたんだけど、
7ラインくらい表示ができないのはしかたないのか。
もっといい方法とかあったら、教えてくだしあ。
166:名前は開発中のものです。
14/04/18 21:05:20.40 GCyjwP+C.net
>>165
中央が黒いのは、書き換え中に色が付くのを防ぐため?
167:166
14/04/19 02:10:32.86 ENCcy0CN.net
>>166
うん。
たぶん、ラスター使えるようになってラスターでパレット変更もできるぜぃ、
と思って試した人(過去の俺とか)は、なぞのゴミが表示されて悩まされてると思う。
そのゴミをHBlankに押し込めるために、16byteの書き換えに7lineも画面表示を消してるって感じです。
168:名前は開発中のものです。
14/04/19 09:55:49.50 5+3bbh99.net
>>167
そうですか。知ってたらあれですが、3Dホットラリーはもろ見えてます。
URLリンク(img.gamefaqs.net)
169:名前は開発中のものです。
14/04/19 13:11:45.50 ENCcy0CN.net
あ、ほんとだw
実は、3Dホットラリーの名前は以前でてたんで画面見たんだけど、
上2パレット、下2パレットくらいでやってるんじゃない?とおもって、スルーしてた。
ちゃんとパレット書き換えしてたのねw 失礼しますた
170:名前は開発中のものです。
14/04/21 00:26:08.69 /pAmCg0v.net
ゴミなんて消してやんよ
って思ったら
意外と無理だった
if ((!IsRendering) && ((VRAMAddr & 0x3F00) == 0x3F00))
PalIndex = Palette[VRAMAddr & 0x1F];
こんな仕様しらんがな
nintendulatorのPPU.cppより
171:名前は開発中のものです。
14/04/21 10:13:40.71 LbIV6qH+.net
おお、こういう原理だったのか。トンクス >>170
URLリンク(forums.nesdev.com)
コレみて、なんとなくパレットカキコミすると色が出るのは、理解してたんだけど、
細かい挙動はよくわかってなかった。
172:名前は開発中のものです。
14/04/21 10:17:13.69 LbIV6qH+.net
ちなみに、これってハードウェア的にはどういう原理なの?
詳しい人いたら教えて。
173:名前は開発中のものです。
14/04/21 17:28:24.83 rQaSv6+b.net
>>170
そんな断片ソースで理解できるのがすごい。
174:名前は開発中のものです。
14/04/21 23:59:09.10 /pAmCg0v.net
>>165を改造させてもらった
URLリンク(www1.axfc.net)
ゴミ消した
パレットの0x0dは使えないよ
垂直同期のパルスみたいな電圧になるから
175:名前は開発中のものです。
14/04/22 00:47:42.57 Ncm5fcM0.net
レンダリング止めていればBGの色が出ると思ってた
>>165のおかげで本気出せていろいろ勉強になったわ
>>171系のやつへの理解向上
レベルが一気に3あがった!
rtiの戻り書き換えだとか組み終わった後に
URLリンク(forums.nesdev.com)
full_palette.s
の偶奇同期を見つけた
この簡潔なソースで横ブレの無さのキモさといったら
>>172
BGのレンダリングは内部で$3f00へアクセスするんだろうけど
そのバグ挙動なのかね
URLリンク(wiki.nesdev.com)
これ結局まだいじったことないんだけど、使いこなせれば理解できるのかな!?
ところで、また謎現象を見つけてしまった
URLリンク(wiki.nesdev.com)
URLリンク(forums.nesdev.com)
176:166
14/04/22 03:41:30.42 +4JN+sCM.net
>>174
おおお、これは技術の粋が詰まったコードですね!素晴らしい!!
私もレベル3上昇して、レベル4になった〜
クロック管理が神々しく緻密・・・
ちなみに、ゲームでこのテクニックを使うとすると、IRQが入りそうなタイミングで
メインスレッドはnop連打になってないとダメという認識でおk?
とすると、実用は難しいけど、、、
ジャストアイデアとしては
2、3ラインくらい前にIRQいれて、一時的にメインスレッドをnop連打ループに切り替えて、
終わったらまたもとのメインスレッドに戻すというのは可能かな?
考えるだけで、脳髄が痛い・・・
>パレットの0x0dは使えないよ
一部の黒はつかっちゃだめというのは聞いてたんだけど、反対におぼえてたみたい(^^;
今後は0x0f使います〜
>>175 の情報も含めて、いろいろありがたい(^^
やっぱり、コードは晒してみるものだなぁ・・・
177:166
14/04/22 03:55:38.11 +4JN+sCM.net
いままでの自分の致命的な間違いに気づいた・・・
nopは2クロックだったのね。1クロックだとばっかり思ってた(^^;
よくいままでのコードうごいてたなぁw
178:名前は開発中のものです。
14/04/22 18:39:42.31 FEq/t9cI.net
てす
179:名前は開発中のものです。
14/04/22 20:21:50.77 SP0raU7v.net
>>174
ソース読ませてもらったけど、
ldy #0
sty $2001
で、PPUのレンダリング止めると、PPUのバスが空くので
その間は自由にVRAMアクセスできたと理解していたんだが
違っていたかな?
そうであれば、HBlank待つ必要ないので、パレット書き換えで
非表示になるライン数を減らせると思う。
あと、割り込み時にはiフラグが立った状態でルーチンが
呼ばれるので sei は要らないと思う。
URLリンク(wiki.nesdev.com)
180:名前は開発中のものです。
14/04/22 20:38:14.58 SP0raU7v.net
>>172
PPUのデータのバス(信号線)が1組で、PPUのレンダリング中はVRAMからデータを読み出している。
CPUがVRAMアクセスのためにPPUアドレスを設定するレジスタ($2006)とPPUがネームテーブルにアクセスするアドレスのレジスタが兼用のため、CPUがパレットのアドレスを書き込むとPPUはパレットデータを読み出してレンダリングすることになる。
と理解しているのですが、間違っていたら指摘お願いします。>他の人
181:166
14/04/22 20:46:59.02 +4JN+sCM.net
>>179
>で、PPUのレンダリング止めると、PPUのバスが空くので
>その間は自由にVRAMアクセスできたと理解していたんだが
>違っていたかな?
そう思ってたんだけど、PPUのアドレスレジスタが0x3f**だと、
**の色(=ゴミ)が出力されるっていうのが、171のコード片の意味。
182:166
14/04/22 20:59:26.06 +4JN+sCM.net
>>180
なるほど〜、
ハードウェアは素人(簡単なワンチップマイコンをいじったくらい)
なんで、解説してもらえて助かるっす。ありがと〜
用語があってるかわからないけど、バスコンフリクトってやつでいいのかな?
あとチップに損傷を与えたりはしないのかしら・・・
まぁ、あとは電子回路関係の情報で調べてみます。
183:166
14/04/22 21:04:00.85 +4JN+sCM.net
連投でスマソ
>>180
追加で疑問。
そうすると、0x3f**以外のアドレスでも、そのアドレスのVRAMデータの色が出力されそうなんだけど、
0x3f**以外ではそうはならないみたいなんだよね・・・
これはレジスタ兼用でもそうならないものなのかな?
184:名前は開発中のものです。
14/04/22 23:02:12.52 SP0raU7v.net
>>181
なるほど、了解です。
自分も実験してみよう。
185:名前は開発中のものです。
14/04/22 23:13:05.47 SP0raU7v.net
>>183
The PPUDATA read buffer (post-fetch)
URLリンク(wiki.nesdev.com)
ここに $0000-$3effは内部リードバッファから返すが、$3f00-$3fffは(PPU内部の)データバスに直接配置されている
と書かれているので、この辺りの差で挙動が変わるっぽいですね。
186:名前は開発中のものです。
14/04/22 23:47:45.15 Ncm5fcM0.net
>>179
>seiは要らない
しまった、モロ立ってた
どうも
>>180
パレット$3fxxは通常はPPU内部アクセス、つまり擬似NTSC信号を生成する回路とのやりとりであって
普通のPPU空間には出力されないとどこかに書いてあった気がする
URLリンク(nesdev.com)
- palette RAM is accessed internally during playfield rendering (i.e., the
palette address/data is never put on the PPU bus during this time).
URLリンク(wiki.nesdev.com)
画像の通りパレットのアクセスはない
しかしこういう挙動もある、これはレンダリング止めた場合だろう?
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.
この辺あやしいね
187:名前は開発中のものです。
14/04/22 23:59:55.97 Ncm5fcM0.net
>>176
今回はjmp *にしてもHBlankに収まるっぽく大丈夫なようですが
127 line目で
$2001のレンダリングオフにする瞬間の
PPU tickのばらつきが
249〜254 nop連打の場合
249〜257 jmp連打の場合
ばらつきが3dot分増えることになります
市販ゲームのIRQ関係もゴミだらけだし気にすることはない
直前に入れるのはいいアイディアだね
188:名前は開発中のものです。
14/04/23 17:56:22.78 eYt0ULQB.net
>>185 >>186
なるほど、、、
まだ理解してないけど、このあたり読めばわかる気がしてきた。ありがと
しかし、PPUのアドレスレジスタの兼用さえなければ、レンダリング中に読み書きできて
BGアニメーションとかもっと便利だったろうにって思ってたけど、
Ntsc_timing.png みるかぎり、ひっきりなしにアクセスしてるんだね・・・
とするとメモリポートが2つないとだめだから、結局は無理だったのか。
>>187
了解。
sei/cliさえしなければ最大6クロックだから、6*3=18dot(nopにくらべて12dot大きく)
ずれるのが許容できればおkってことね。
許容できるのか、計算するのが大変だけど(xx
189:名前は開発中のものです。
14/04/23 20:09:45.06 yop1NMPn.net
この現象で分った事。
パレットの04 08 0Cは00とは別の値を格納できるが、実用上何も使われていないと言う事(合ってるよね?)。
190:名前は開発中のものです。
14/04/23 21:35:50.97 bXRTGLw+.net
↑あってるっぽい
ただしスプライトの四の倍数とは共有か
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;
191:名前は開発中のものです。
14/04/24 07:57:06.72 RDg08ToE.net
流れぶったぎるようで申し訳ないけど、デバッガ機能が一番使いやすいNESエミュはどれですか?
192:名前は開発中のものです。
14/04/24 10:17:47.73 TazbtZqQ.net
>>191
FCEUXがおすすめ。
(読/書/実行)ブレークポイント、スキャンラインごとのVRAM内容表示、RAMウォッチ あたりの機能をよく使ってる。
193:名前は開発中のものです。
14/04/24 11:46:44.27 RDg08ToE.net
ありがとう
194:名前は開発中のものです。
14/04/24 21:06:44.07 Ozv2HHx1.net
ブレークポイントの使いやすさは
G-NESじゃないか
よっぽどトリッキーなコーディングしないならこれで十分
G-NES は使いやすい、指定行まで実行がStepOverを兼ねる
FCEUX はログ機能が最強、シンボル機能搭載、エミュ精度も結構よい
Nintendulator はデバッガ付きではエミュの精度が最強かな、使いにくい
195:名前は開発中のものです。
14/04/24 23:37:48.91 d8WjRMEc.net
>>190
そう、スプライトと共通(04=14、…)
僕は実機で確認したけど、nendoかnestopiaと同じなら間違いないだろうな。
古いネット上のドキュメントとか間違ってたりするから100%鵜呑みにしない方がいいよ(エミュのソースも)。
196:名前は開発中のものです。
14/04/25 00:53:39.01 ffWieyHe.net
G-NESは使ってなかったから、ちょっと触ってみた。
デバッガは、FCEUXとG-NESほぼ同等やね。
ちょっとわかりにくいけど、アドレスクリックして"Seek To"で指定行まで実行もできるし。
(この機能が超欲しかったけど、いま探すまでアドレスクリックで指定できるの気付かなかったw)
しかし、FECUXのシンボル情報って吐き出してくれるコンパイラあるのかな・・・
使えれば便利そうなんだけど。
197:名前は開発中のものです。
14/05/10 18:53:04.15 ShrxaRho.net
マッパー0のカセットを何本か作りたいんですが
既存のソフトのHVC-NROM-256K-02基板からICを外すのが面倒なので
プリント基板だけを通販しているところとかないですかね?
もしくは,CADデータとか.
198:名前は開発中のものです。
14/05/10 19:06:34.44 ShrxaRho.net
ちなみに作りたいカセットとはこれです.
この1週間ちょっと頑張ってインプリしてました.
アセンブラなんか普段いじらないので,めちゃくちゃです.
でも,このスレはちょくちょく見てるので,恩返しに公開します.
URLリンク(sayonari.com)
綺麗に書き直したかったですが,しばらくいじれそうにないので,
皆さんに託します.
FCEUXではちゃんと動くんですが,ROMに焼いて,
FC互換機(GCC NEXT)で動かすと,
スプライトがチラチラと画面中に散らばって表示されます.
メモリ管理とかちゃんとしてないし,変なところに書き込んだり,
PPUアクセスのタイミングがむちゃくちゃだったりとかが原因だと思います.
互換機じゃなくて正規版本体ならちゃんとうごくのかな・・.
199:名前は開発中のものです。
14/05/10 19:40:22.36 WvHa+XO0.net
そこまでやって正規版FCを持っていないというのが謎過ぎる
高いわけじゃないんだから普通に買えばいいのに
200:名前は開発中のものです。
14/05/10 20:09:58.52 vMtYsoKB.net
>>198
スプライトDMAの前に$2003に$00入れるといいかも
201:名前は開発中のものです。
14/05/10 20:52:41.78 ShrxaRho.net
>>200
すごい!かなり軽減されました.しかしまだチラチラがあります.
しかしさすがのアドバイスありがとうございます.勉強になります.
202:名前は開発中のものです。
14/05/10 21:59:03.95 2fP2DbGG.net
なんで土管に触っただけで死ぬんだ
こんなクソゲー久しぶりに見たわ
203:名前は開発中のものです。
14/05/10 23:12:04.05 ShrxaRho.net
>>199
ファミコン本体は実家にはいっぱいあるんですが,今の家にはなくて,
急遽必要になったので,とりあえず,ヤフオクで互換機を送料込み900円で落札しました.
その後,今もですが,正規版ファミコンをどれにしようかと,ヤフオクでキョロキョロしてます.
互換機は今日届きました
>>202
これは,FlappyBirdっていう人気アプリのオマージュですが,それも土管で即死です
ROMライターのLEAPER-3Cのドライバが64bitWin7では動かなかったので焦りましたが,
VirtualPC上のXPmodeというやつで,そのOSからLEAPER-3Cが使えたので
良かったです(´ρ`)
204:名前は開発中のものです。
14/05/11 01:44:45.44 HiLhu8FK.net
非VBlanc期間がループで一切の処理をしていないからDMA転送がVblank内に収まってないんじゃないかね
通常は非VBlank期間にキー入力だのスプライトのデータ準備だのデータを用意しておいて
Vblank期間は描画処理だけを行うようにする
205:名前は開発中のものです。
14/05/11 02:54:20.00 Mnx9Nf8g.net
>>204
ありがとうございます!
チャレンジしてみましたが,上手く実装できませんでした(´ρ`)
どの処理をどこでやればよいか・・・.
もう時間的に頭が働いていないのかも.とりあえず寝ます.
206:名前は開発中のものです。
14/05/11 04:04:19.91 YECX6XhP.net
>>198
なかなか、ファミコンらしい可愛いグラフィックやね。
nesdevでflappy bird作った奴いないの?みたいなスレがあったから、貼るのもおもしろいかも
URLリンク(forums.nesdev.com)
ちなみに、Nestopiaでもバグってるっぽいので実機の前にこっちでデバッグしたら楽かもしれない。
残念なことにデバッグ機能はほとんどないけど・・・
207:名前は開発中のものです。
14/05/11 04:53:13.07 Mnx9Nf8g.net
>>206
nestopia情報ありがとうございます!
試してみましたが,パレットがおかしくなるバグはありますが,
実機互換機で起こるチラチラ飛び散りバグは出ません.
正規本体でもでないかな.正規本体早く買おうかな.
nesdevにも凸したいと思います(〃゜ω゜〃)
208:名前は開発中のものです。
14/05/11 08:18:39.15 IEErYv9U.net
>>207
最初のロゴでスプライトのゴミが出るのはメモリの初期化をして
いないからだと思う
パレットがおかしいとかスクロールがぶれるとかそういうのは恐らく
表示期間中にPPUに書き込みしてるんじゃないかな
209:名前は開発中のものです。
14/05/11 08:23:06.60 dYyMlr6C.net
fceuだとチラツキは見えない
210:名前は開発中のものです。
14/05/11 09:26:06.10 owqALoBe.net
時々音がおかしくなる。
211:名前は開発中のものです。
14/05/11 14:28:37.07 rGvGrR+8.net
>>198
タイミングめちゃくちゃ&画面ゴミ&遷移時ちらつき&各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しちゃえばすこしマシになるかな
根本解決にはならないけど
212:名前は開発中のものです。
14/05/11 14:29:39.56 rGvGrR+8.net
>>197
もう構造的に破綻しているけど
この先スクロールゲームにするなら
今の構造のままだともっと破綻する
理想的には
バッファに命令語を用意しておき
NMI直後に命令語を読み取ってVRAMに書き込む
こういうスタイルじゃないとね
構造が悪いからデバッグの難度も上がる
小規模なうちに治さないと
シーンが増えると結局テーブルジャンプや間接ジャンプ( jmp [mem] )、こういった関数ポインタを使わないとやってられないと思う、
デカくなったswitch文のアセンブラでの効率のよい実装のことね。
cmp #n の比較地獄をしていたら、デカくなればなるほど後の方は遅くてやってられない。
シーンが続き番号でないなら比較地獄も免れないけど
>>197 >>199 LEAPER-3C
謎な奴だよなw
IC引っこ抜くよりCADデータある方が時短になるのかw
エミュでデバッグできないやつが、実機ROM焼きしてたら、ますます時間無駄にすると思うけど
>>200
姑息な手かと思ったら、少し根拠あったのね > Obscure details of OAMADDR
213:名前は開発中のものです。
14/05/11 15:05:47.12 /Ki7K6oz.net
ファミコンは画面周りがややこしいからなぁ
自分も昔は資料が少なかったこともあって
BGを正常に表示できるようになるまでけっこうな時間を要したな
214:名前は開発中のものです。
14/05/11 17:55:22.28 vl3SyvU7.net
原理的にはむしろ単純だろ
なぜそうなるかの理解がないから理不尽に受け取るだけで
215:名前は開発中のものです。
14/05/11 20:28:01.30 FD888ndC.net
>>213
ハードウェア的には単純なので、ソフトウェア側での配慮が必要
という方が適切だと思う。
216:名前は開発中のものです。
14/05/11 21:03:39.07 QGu2c1mG.net
惜しいなあ、技術的にはいいこと書いてるハズなのに口調で台無し
必要もなく刺々しい言葉「しとけよ」「やれ」などを使ったかと思えば
「釣りなの?」「と思う」などと子どもじみた表現が混ざる
いい歳こいて言葉を選べないって、それはもう恥ずかしい事だよ
書き込む前にきちんと自分の書いた文章、推敲したするべきだよ
自分も、他人も、傷つけないために
217:名前は開発中のものです。
14/05/11 21:45:37.94 hyDhkYCi.net
>>198
□ゲームについて
全体的に良い感じにまとまっていると思いました。
ただ、ミス即ゲームオーバーなので、残機制かライフ制にした方が少し長く遊べて楽しいかなと思います。
あと、果物などのアイテムを出して取ればボーナス点が入るとか。
□プログラムについて
BG書き換えについては、VBlankを深く考えていない実装になっているので、ここから立て直すのはきついと思いました。
205さんの指摘のように、PPUに転送するデータを一旦バッファに入れてVBlank中に転送するフレームワークを作って移行する方が早いかと。
VBlank中にPPUに転送できるデータ量は限界があるので、BG書き換えの実装部分はそれを配慮した作りに直さないと駄目ですね。
218:名前は開発中のものです。
14/05/11 23:13:04.21 rGvGrR+8.net
>>216
ゆとりメンタルなやつは2ちゃん見なきゃいいんじゃない?
お前らは延々と即値でスプライトのバッファ初期化して、
100レス前も読めずNMI使えず$2002のポーリングでループ作ってるアホと同類だろ?w
何度同じこと言われても改善しようとしないやつw
前スレの>>700あたりから湧いてる
画面カクついてる時点で釣りかと思ったし
全部のシーンを厳密に検証する気はないから「思う」と書いただけでね
こういう書き込みも増えたね
>〜エミュで動作しました、バグってました
そりゃ画面がカクついていたり、
ソフトリセット、ハードリセット時に挙動が乱れたりするのは誰が見てもバグだよな
>>217
つくりはじめたばかりのやつが、まとまってるのか?
219:199
14/05/11 23:30:36.97 Mnx9Nf8g.net
皆さんご親切に本当に有難うございます.実際にプログラミングしながら勉強することで,
たくさん吸収出来てます!!
>>211
親切にソースチェック&修正案ありがとうございます.
こういう方が即レスくれるのも,さすがこのスレという感じです.
プログラムは,何も考えずに,ここまでとりあえずという感じなので,
皆さんから頂いた意見と,わかったことを入れて,プログラムし直したいとおもいます.
>>217
PPUへのアクセスに時間がかかるし,BG描画後にVRAM周りにアクセスするとヤバイ
っていうことを知らずに実装していった結果が今のプログラムです.
ご指摘のように,バッファに用意→転送にすることと, VBlankの時間を考慮した
実装にしたいです.
ソース公開は恥ずかしかったですが,頑張って出して良かったです!
想定よりも,皆さんからレスを頂けて嬉しいです.頑張ります!
220:名前は開発中のものです。
14/05/12 00:09:07.80 jaOM61/S.net
>NMI使えず$2002のポーリングでループ作ってる
初心者でこれやらかす奴はたぶん某サイトの影響受けてるだろ
あそこは全体的に説明が不足しすぎてるよ
更新も長いこと止まってるし、当てにするのはやめたほうがいい
Nesdevの日本語資料理解するだけでもだいぶ変わるし
他にも今ではNES関連資料のサイトなんていっぱいある
特にI/Oレジスタについてはサイトによって書いてあること違ったりするから
一つのサイトに拘らず色々見るといい
221:名前は開発中のものです。
14/05/12 00:13:00.90 p9javgur.net
>>219
BG描画後にVRAMアクセスがNGではなくて、
非VBlank中にVRAMアクセスするのがNGなんです。(画面が乱れる)
短いVBlank中にVRAMを書き換えるために、バッファにデータを溜め込んでおいて、
VBlank(NMI)割り込みに入ったらすぐにバッファのデータを転送しろってことです。
あと、もちろんですが、スプライトのDMA転送もVBlank中に行わなければなりません。
222:名前は開発中のものです。
14/05/12 08:39:01.88 Wk7QwTB6.net
>>198 みたいな、打たれてもへこたれないヤツは2ch向きだね。ガンバレ!
>>216 の意見には同意だけど、そういうヤツもいるのが2chの味なのかなぁ
自分に対して >>212 みたいな反応されたときは、頭来たけどなw
修行が足りない
223:名前は開発中のものです。
14/05/12 08:40:54.97 Wk7QwTB6.net
失礼、>>211 は >>211 の間違いでした。
224:名前は開発中のものです。
14/05/12 10:39:31.18 cuBtqyJP.net
当時のRAMはデュアルポートではないから読んでいる最中に書き込みはできない
単純な構造だよね?
で、画面を描画している最中は(BGもOBJも)データをVRAMから読み出している真っ最中だから
そこで無理やりデータを書き込むと、今まで画面描画時に参照していたVRAMのアドレスが置き換えられてしまうため
元の描画処理を継続することができなくなり画面の表示が破綻してしまう
表示周りをいじる際VBlank期間中にアクセスしなければならないのはこういう理由
225:名前は開発中のものです。
14/05/12 22:05:47.81 jsal4ZTv.net
キラキラスターナイトのソースを読んでみたい。
226:名前は開発中のものです。
14/05/13 05:06:48.28 9EaC9IEc.net
遊び方にパテントはないわけでして
227:名前は開発中のものです。
14/05/13 06:22:09.58 T2v6EbAW.net
>>225
絵は卓越しているけど
プログラムは大して高度なことはやってないでしょ
228:名前は開発中のものです。
14/05/13 19:16:50.69 srI4FW40.net
RIKIがパソファミの安藤に媚び売っててワロタ
ロジックボム組み込んだりする基地外なのを知らんのか近頃のもんは
229:名前は開発中のものです。
14/05/13 20:10:15.51 f3qQ/xjJ.net
パソファミ作者はメールでの対応が最悪レベル
自分の非を認めないどころか人を犯罪者扱いしたりするキ○○イ
おまけにホンコンのソース盗用疑惑もあるしな ホントどうしようもねぇよ
素人にはこれしかないから売れるんだろうけど それが余計にたち悪いね
230:名前は開発中のものです。
14/05/15 00:00:39.68 HB8Kbvvq.net
>>228
>>ロジックボム
そういう噂を聞いたから
その後にちょっとだけ調べたけど
プリンタポートでないI/Oポートに向けて
x86のout命令が発せられてたような、ないような
windows98なら簡単に発動するのかな
より堅牢なOSであるwindows2000にしてたから
効果なしっぽかったけど
近頃のもんが吸出しやROM焼き実機動作させてるのをよく見かけるようになったけど
ソソハメさんの名前がなぜあまり挙がらないか理由をよく認識しておいた方がいい>もっと近頃のもんたちへ
231:名前は開発中のものです。
14/05/15 03:12:19.39 AXeiaTDm.net
気持ち悪いのが涌いてきたな
232:名前は開発中のものです。
14/05/15 05:14:14.01 gGlXRPO1.net
すみません、吸出しというのは英語では何というのでしょうか?スペルを教えて下さい
233:名前は開発中のものです。
14/05/15 08:42:17.70 9cGRzDB1.net
dump
234:名前は開発中のものです。
14/05/20 00:15:36.83 sHOtKBex.net
>>140
宝石のラスタスクロール凄いね。あと、スプライト吹雪は気持ちいいっす
このスレッドで新しい演出ジャンルに出会えたのは嬉しいね
>>198
土管避けるの難しいけど楽しいね
BGの判定は凄いと思う
どんどん成長してゆくのが楽しみ
235:199
14/05/27 16:46:17.78 Yj5iT5NZO
頂いた修正案をもとに「まずSPRDMA」にして(PAD情報ゲットも指定の場所に移した),
また,プログラム中で何回もSPRDMAしてしまっていたのを削除しました.
実機でのスプライト飛び散り表示はなくなりました.
ただ,シーン切替時のがたつきや,
BGのミラーリングの問題で,裏で画面更新していけないなどの構造欠陥などは
修正していないので,またまとまったらご報告させてください.
236:140
14/05/28 20:00:45.64 pcO3WytB.net
ジョイパッドの読み取りルーチンをリファクタリングしたら結構コンパクトになった。
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
>>234
ありがとうございます。
237:140
14/05/28 20:07:39.22 pcO3WytB.net
あ、
sta <JOYPAD
ror a ; same as lda $80 & clc
sta <JOYPAD+1
として、JOYPADには$00入れないと不味いね。
238:名前は開発中のものです。
14/05/29 00:32:25.75 Ix+yqrZv.net
>>237 (clcと)sbc #0をcmp #1にすればsta <JOYPADは不要
239:140
14/05/29 01:07:17.19 Lo1UVUXb.net
>>238
ああ、確かに。さらに小さくなりました。
ありがとうございます。
240:名前は開発中のものです。
14/06/04 21:11:42.02 Wpb6i0Ha.net
RevolvingGemsのゲーム本体部分が出来ましたので公開します。
URLリンク(homepage3.nifty.com)
残りはタイトル画面と遊び方画面を実装して終わる予定。
241:名前は開発中のものです。
14/06/04 21:35:20.41 EpTIlg4F.net
すげー
242:名前は開発中のものです。
14/06/04 23:51:21.70 78Tpkbjc.net
商用レベルのできだと思う。
気になるのは、連鎖がどんどん発生しやすすぎではないのかなと
243:名前は開発中のものです。
14/06/05 01:19:37.09 9NxYghum.net
>>242
連鎖しやすいのは、6方向に対して6種類の駒しかないので
仕様上、確率的につながり易いのが原因です。
駒の種類を増やせれば良いのですが、パレットが足りないw
最初は3個つながったらで実装していたのですが、
あまりにも連鎖が続くので4個にしています。
それでも消せなくなることが無く延々と続けられるので、時間制に逃げました。
作って思ったのは、ぷよぷよの仕様は絶妙なバランスなんだなぁと。
244:名前は開発中のものです。
14/06/05 23:11:37.79 hfWG3l/O.net
追加された音楽がスタートで変更できるのは、個人的にうれしいですね!
後、セレクトボタンはどんな効果があるのでしょうか?(効果音だけ?)
245:131
14/06/06 19:17:42.85 5n3Zcu9W.net
131です。あの後、
いろいろ注意深く書き込みを見ていたのですが
人に意見されるってすごく大事だと思いました。
ちなみに、cc65でオセロとShootingGameSampleを作ったのと、
nesasmでブロック崩しを作ったのも
自分です。
今までは自分はチキンで人に意見言われるだけで、
むっつりと黙っていましたが、これからは
もっと能動的に動きたいです。
ファミコンのブロック崩しをソース付きで晒すので
汚いし、ロジック的におかしいところばかりですが、
見てやってください。
僕はカービィやマリオ、くにおくんのファミコン少年の一人の
つもりなのでファミコンは、ホント好きですし、このスレッド
を最初から見ています
URLリンク(www1.axfc.net)
246:131
14/06/06 21:24:59.35 5n3Zcu9W.net
こんな事書き込みたくて書き込むわけじゃないですけど、
ファミコンの正常動作って何ですか?
どうすれば正常動作っていうんですか?
いつまにか、このスレッドは本物のROMと同じように動かす為に努力してる
人たちを称え、褒めてきました。
正常動作って定義がどこにあるかはファミコンで動作すれば分かるんじゃないですかね。
それ以外を異常動作というなら、エミュレータはほぼ全て異常動作ですよ。
247:名前は開発中のものです。
14/06/06 22:02:30.07 4Zl9JWw3.net
>>243
始まった瞬間操作する前に勝手に連鎖するってのだけでも
どうにかならないかな
初期配置のみパターンで持つとか
248:名前は開発中のものです。
14/06/06 22:51:57.22 kdjIsC0c.net
>>246
そうですよエミュは異常動作ですよ
実機で動かないのを言い訳してるだけにしか聞こえませんね
249:131
14/06/07 03:42:43.36 hwRmu2MG.net
本当に実機で試したのか知りたいですが、
自分の言いたい事は実機で動かない事の言い訳じゃなくて、
ファミコンのプログラミングが1つの古代技術でそれが通用するのはあくまでファミコンのみ
という事なんですが**が素晴らしいとか**の技術は優れているとかのある意味
マニアックな話の流れになっているというか、
ぶっちゃけ、自分の作ったファミコンゲームは技術的には全然優れてないので、
優れた技術を持った人たちに憧れたみたいなところがあります。
250:131
14/06/07 03:52:27.88 hwRmu2MG.net
**には、ラスタースクロールやスプライトダブラー、
FFの高速スクロール、BGの高速書き換え、パレットアニメーション
を入れてください。
251:131
14/06/07 09:33:01.78 hwRmu2MG.net
cc65の作ったやつは(REVERSI,SHOOTING GAME SAMPLE)動く自信がないですが、
nesasmで作ったやつも(IWA WO OTOSE,BLOCK)動かないんですかね。
252:名前は開発中のものです。
14/06/07 10:52:19.34 0OqTmEOh.net
>>244
スタートとセレクトは、サウンド系の開発用にテストできるように追加していた機能で
今回スタートを少し改良して選曲出来るようにしました。
セレクトは、効果音を作る時以外は意味を成さないので、次の完成版では削除する予定です。
253:名前は開発中のものです。
14/06/07 11:09:37.37 0OqTmEOh.net
>>247
初期配置をパターンで持つのは、バリエーションを作るのが大変なので、
採択したくないですね。
代わりに内部で連鎖が止まるまで処理を繰り返して、
そこからゲーム開始するよう実装してみます。
254:名前は開発中のものです。
14/06/07 11:18:00.96 0OqTmEOh.net
>>249
私も最終目標は実機で動作させてみることなのですが、
そこまでの道が遠い状態です。
一応、動作させるための目処は立っていて、材料とかもそろえたのですが
ROMライターから自作せねばならないため、いつになるかわかりません。
実機で動作したのを確認して初めて、ファミコンのプログラムを作ったと、
胸張って言えるかと個人的には思っています。
255:131
14/06/07 14:24:42.36 HAL7UNXv.net
>>254
ネットカフェから書き込みです。
そうですね。ファミコンの実機で動いたら感動しますし、
実機で動かしたいです。
ファミコンの実機は持っているのですが、ROMライターや
EEPROM、同軸ケーブル、ビデオデッキ、自分用のテレビ
256:131
14/06/07 14:27:25.94 HAL7UNXv.net
など問題が山積しているので、現段階では難しいです。
257:名前は開発中のものです。
14/06/07 15:48:51.46 0OqTmEOh.net
>>245
一通り読んでみました。
.bank 0 ; バンク0
.org $0300 ; $0300から開始、スプライトDMAデータ配置
Paddle00_Y: .db 0 ; スプライト#1 Y座標
Paddle00_T: .db 0 ; スプライト#1 ナンバー
WRAM領域の$0300にデータ定義の記述があるが、
ビルド出来ているのであろうが、記述としてはまぎわらしいので
Paddle00_Y = $0300
Paddle00_T = $0301
と記述した方が良い
.memclearloop
sta [$00],y
iny
cpy #255
bne .memclearloop
254までしかループしていない。cpy #255が不要
258:名前は開発中のものです。
14/06/07 15:49:29.84 0OqTmEOh.net
>>257
続き
VBlank直後に行うべき処理と、ゲーム本体の処理を分離したほうが良い。
パッドとボールの座標と、スプライトの座標は別に持っておき、
パッドとボールの座標をスプライトデータに反映するにように
実装した方が、プログラムの書き方としては綺麗だと思う。
VBlankのタイミングを考えずに、スプライトとBGの表示をOFF/ONにして
VRAMを書き換えるのはやめた方が良いと思う。
nestopiaとかでも普通に表示できていたけど、書き換え量が多くなると
画面がちらつくのでは?
jsr Pad_Check
ソース上に Pad_Check が見つからない。
lda #0 ;これはROMなので出来ないので、こうする
sta STAGE1,x ;〃
ROMに0を書き込む意図がわからない。
VRAM書き込み先のアドレスをブロックの座標から
計算しているが、ブロックの配置位置が有限個であれば
表引きで求める方法もある。
(Y座標だけでも表引きにすると処理が結構簡素化します)
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
45日前に更新/213 KB
担当:undef