[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2ch.scのread.cgiへ]
Update time : 10/21 19:51 / Filesize : 213 KB / Number-of Response : 571
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:名前は開発中のものです。 mailto:sage [2012/07/29(日) 14:19:03.64 ID:a5QeqSA0.net]
■過去スレ

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

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

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

■関連サイト

MagicKit Homepage
www.magicengine.com/mkit/
すずめ愛好会
web.archive.org/web/*/http://vsync.org/ns/index.html
ギコ猫でもわかるファミコンプログラミング
gikofami.fc2web.com/
わいわいの巣
www.geocities.jp/yy_6502/
mck hogehoge
takamatsu.cool.ne.jp/dutycycle/
NES info, programs, and demos
nesdev.parodius.com/
pgate1@crystal
crystal.freespace.jp/pgate1/
cc65 @ wiki
www34.atwiki.jp/cc65/

171 名前:名前は開発中のものです。 mailto:sage [2014/04/21(月) 10:13:40.71 ID:LbIV6qH+.net]
おお、こういう原理だったのか。トンクス >>170

ttp://forums.nesdev.com/viewtopic.php?t=1209
コレみて、なんとなくパレットカキコミすると色が出るのは、理解してたんだけど、
細かい挙動はよくわかってなかった。

172 名前:名前は開発中のものです。 mailto:sage [2014/04/21(月) 10:17:13.69 ID:LbIV6qH+.net]
ちなみに、これってハードウェア的にはどういう原理なの?
詳しい人いたら教えて。

173 名前:名前は開発中のものです。 mailto:sage [2014/04/21(月) 17:28:24.83 ID:rQaSv6+b.net]
>>170
そんな断片ソースで理解できるのがすごい。

174 名前:名前は開発中のものです。 mailto:sage [2014/04/21(月) 23:59:09.10 ID:/pAmCg0v.net]
>>165を改造させてもらった

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

ゴミ消した


パレットの0x0dは使えないよ
垂直同期のパルスみたいな電圧になるから

175 名前:名前は開発中のものです。 mailto:sage [2014/04/22(火) 00:47:42.57 ID:Ncm5fcM0.net]
レンダリング止めていればBGの色が出ると思ってた

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

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


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



ところで、また謎現象を見つけてしまった
ttp://wiki.nesdev.com/w/index.php/PPU_registers#Bit_0_bus_conflict
ttp://forums.nesdev.com/viewtopic.php?p=112424#p112424

176 名前:166 mailto:sage [2014/04/22(火) 03:41:30.42 ID:+4JN+sCM.net]
>>174
おおお、これは技術の粋が詰まったコードですね!素晴らしい!!
私もレベル3上昇して、レベル4になった〜

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



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


>>175 の情報も含めて、いろいろありがたい(^^
やっぱり、コードは晒してみるものだなぁ・・・

177 名前:166 mailto:sage [2014/04/22(火) 03:55:38.11 ID:+4JN+sCM.net]
いままでの自分の致命的な間違いに気づいた・・・
nopは2クロックだったのね。1クロックだとばっかり思ってた(^^;

よくいままでのコードうごいてたなぁw

178 名前:名前は開発中のものです。 mailto:sage [2014/04/22(火) 18:39:42.31 ID:FEq/t9cI.net]
てす

179 名前:名前は開発中のものです。 mailto:sage [2014/04/22(火) 20:21:50.77 ID:SP0raU7v.net]
>>174

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

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

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

wiki.nesdev.com/w/index.php/CPU_interrupts#IRQ_and_NMI_tick-by-tick_execution



180 名前:名前は開発中のものです。 mailto:sage [2014/04/22(火) 20:38:14.58 ID:SP0raU7v.net]
>>172

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

と理解しているのですが、間違っていたら指摘お願いします。>他の人

181 名前:166 mailto:sage [2014/04/22(火) 20:46:59.02 ID:+4JN+sCM.net]
>>179

>で、PPUのレンダリング止めると、PPUのバスが空くので
>その間は自由にVRAMアクセスできたと理解していたんだが
>違っていたかな?
そう思ってたんだけど、PPUのアドレスレジスタが0x3f**だと、
**の色(=ゴミ)が出力されるっていうのが、171のコード片の意味。

182 名前:166 mailto:sage [2014/04/22(火) 20:59:26.06 ID:+4JN+sCM.net]
>>180
なるほど〜、
ハードウェアは素人(簡単なワンチップマイコンをいじったくらい)
なんで、解説してもらえて助かるっす。ありがと〜

用語があってるかわからないけど、バスコンフリクトってやつでいいのかな?
あとチップに損傷を与えたりはしないのかしら・・・
まぁ、あとは電子回路関係の情報で調べてみます。

183 名前:166 mailto:sage [2014/04/22(火) 21:04:00.85 ID:+4JN+sCM.net]
連投でスマソ

>>180
追加で疑問。
そうすると、0x3f**以外のアドレスでも、そのアドレスのVRAMデータの色が出力されそうなんだけど、
0x3f**以外ではそうはならないみたいなんだよね・・・
これはレジスタ兼用でもそうならないものなのかな?

184 名前:名前は開発中のものです。 mailto:sage [2014/04/22(火) 23:02:12.52 ID:SP0raU7v.net]
>>181
なるほど、了解です。
自分も実験してみよう。

185 名前:名前は開発中のものです。 mailto:sage [2014/04/22(火) 23:13:05.47 ID:SP0raU7v.net]
>>183

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

ここに $0000-$3effは内部リードバッファから返すが、$3f00-$3fffは(PPU内部の)データバスに直接配置されている
と書かれているので、この辺りの差で挙動が変わるっぽいですね。

186 名前:名前は開発中のものです。 mailto:sage [2014/04/22(火) 23:47:45.15 ID:Ncm5fcM0.net]
>>179
>seiは要らない
しまった、モロ立ってた
どうも

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

ttp://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).

ttp://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.
この辺あやしいね

187 名前:名前は開発中のものです。 mailto:sage [2014/04/22(火) 23:59:55.97 ID:Ncm5fcM0.net]
>>176
今回はjmp *にしてもHBlankに収まるっぽく大丈夫なようですが

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

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

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

直前に入れるのはいいアイディアだね

188 名前:名前は開発中のものです。 mailto:sage [2014/04/23(水) 17:56:22.78 ID:eYt0ULQB.net]
>>185 >>186
なるほど、、、
まだ理解してないけど、このあたり読めばわかる気がしてきた。ありがと

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

>>187
了解。
sei/cliさえしなければ最大6クロックだから、6*3=18dot(nopにくらべて12dot大きく)
ずれるのが許容できればおkってことね。
許容できるのか、計算するのが大変だけど(xx

189 名前:名前は開発中のものです。 mailto:sage [2014/04/23(水) 20:09:45.06 ID:yop1NMPn.net]
この現象で分った事。
パレットの04 08 0Cは00とは別の値を格納できるが、実用上何も使われていないと言う事(合ってるよね?)。



190 名前:名前は開発中のものです。 mailto:sage [2014/04/23(水) 21:35:50.97 ID: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 名前:名前は開発中のものです。 mailto:sage [2014/04/24(木) 07:57:06.72 ID:RDg08ToE.net]
流れぶったぎるようで申し訳ないけど、デバッガ機能が一番使いやすいNESエミュはどれですか?

192 名前:名前は開発中のものです。 mailto:sage [2014/04/24(木) 10:17:47.73 ID:TazbtZqQ.net]
>>191
FCEUXがおすすめ。
(読/書/実行)ブレークポイント、スキャンラインごとのVRAM内容表示、RAMウォッチ あたりの機能をよく使ってる。

193 名前:名前は開発中のものです。 mailto:sage [2014/04/24(木) 11:46:44.27 ID:RDg08ToE.net]
ありがとう

194 名前:名前は開発中のものです。 mailto:sage [2014/04/24(木) 21:06:44.07 ID:Ozv2HHx1.net]
ブレークポイントの使いやすさは
G-NESじゃないか
よっぽどトリッキーなコーディングしないならこれで十分


G-NES は使いやすい、指定行まで実行がStepOverを兼ねる
FCEUX はログ機能が最強、シンボル機能搭載、エミュ精度も結構よい
Nintendulator はデバッガ付きではエミュの精度が最強かな、使いにくい

195 名前:名前は開発中のものです。 mailto:sage [2014/04/24(木) 23:37:48.91 ID:d8WjRMEc.net]
>>190
そう、スプライトと共通(04=14、…)
僕は実機で確認したけど、nendoかnestopiaと同じなら間違いないだろうな。
古いネット上のドキュメントとか間違ってたりするから100%鵜呑みにしない方がいいよ(エミュのソースも)。

196 名前:名前は開発中のものです。 mailto:sage [2014/04/25(金) 00:53:39.01 ID:ffWieyHe.net]
G-NESは使ってなかったから、ちょっと触ってみた。
デバッガは、FCEUXとG-NESほぼ同等やね。
ちょっとわかりにくいけど、アドレスクリックして"Seek To"で指定行まで実行もできるし。
(この機能が超欲しかったけど、いま探すまでアドレスクリックで指定できるの気付かなかったw)

しかし、FECUXのシンボル情報って吐き出してくれるコンパイラあるのかな・・・
使えれば便利そうなんだけど。

197 名前:名前は開発中のものです。 mailto:sage [2014/05/10(土) 18:53:04.15 ID:ShrxaRho.net]
マッパー0のカセットを何本か作りたいんですが
既存のソフトのHVC-NROM-256K-02基板からICを外すのが面倒なので
プリント基板だけを通販しているところとかないですかね?
もしくは,CADデータとか.

198 名前:名前は開発中のものです。 mailto:sage [2014/05/10(土) 19:06:34.44 ID:ShrxaRho.net]
ちなみに作りたいカセットとはこれです.
この1週間ちょっと頑張ってインプリしてました.
アセンブラなんか普段いじらないので,めちゃくちゃです.
でも,このスレはちょくちょく見てるので,恩返しに公開します.
ttp://sayonari.com/famicom/FamilyBird.zip
綺麗に書き直したかったですが,しばらくいじれそうにないので,
皆さんに託します.

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

メモリ管理とかちゃんとしてないし,変なところに書き込んだり,
PPUアクセスのタイミングがむちゃくちゃだったりとかが原因だと思います.
互換機じゃなくて正規版本体ならちゃんとうごくのかな・・.

199 名前:名前は開発中のものです。 mailto:sage [2014/05/10(土) 19:40:22.36 ID:WvHa+XO0.net]
そこまでやって正規版FCを持っていないというのが謎過ぎる
高いわけじゃないんだから普通に買えばいいのに



200 名前:名前は開発中のものです。 mailto:sage [2014/05/10(土) 20:09:58.52 ID:vMtYsoKB.net]
>>198
スプライトDMAの前に$2003に$00入れるといいかも

201 名前:名前は開発中のものです。 mailto:sage [2014/05/10(土) 20:52:41.78 ID:ShrxaRho.net]
>>200
すごい!かなり軽減されました.しかしまだチラチラがあります.
しかしさすがのアドバイスありがとうございます.勉強になります.

202 名前:名前は開発中のものです。 mailto:sage [2014/05/10(土) 21:59:03.95 ID:2fP2DbGG.net]
なんで土管に触っただけで死ぬんだ
こんなクソゲー久しぶりに見たわ

203 名前:名前は開発中のものです。 mailto:sage [2014/05/10(土) 23:12:04.05 ID:ShrxaRho.net]
>>199
ファミコン本体は実家にはいっぱいあるんですが,今の家にはなくて,
急遽必要になったので,とりあえず,ヤフオクで互換機を送料込み900円で落札しました.
その後,今もですが,正規版ファミコンをどれにしようかと,ヤフオクでキョロキョロしてます.
互換機は今日届きました

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

ROMライターのLEAPER-3Cのドライバが64bitWin7では動かなかったので焦りましたが,
VirtualPC上のXPmodeというやつで,そのOSからLEAPER-3Cが使えたので
良かったです(´ρ`)

204 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 01:44:45.44 ID:HiLhu8FK.net]
非VBlanc期間がループで一切の処理をしていないからDMA転送がVblank内に収まってないんじゃないかね
通常は非VBlank期間にキー入力だのスプライトのデータ準備だのデータを用意しておいて
Vblank期間は描画処理だけを行うようにする

205 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 02:54:20.00 ID:Mnx9Nf8g.net]
>>204
ありがとうございます!
チャレンジしてみましたが,上手く実装できませんでした(´ρ`)
どの処理をどこでやればよいか・・・.
もう時間的に頭が働いていないのかも.とりあえず寝ます.

206 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 04:04:19.91 ID:YECX6XhP.net]
>>198
なかなか、ファミコンらしい可愛いグラフィックやね。
nesdevでflappy bird作った奴いないの?みたいなスレがあったから、貼るのもおもしろいかも
forums.nesdev.com/viewtopic.php?f=2&t=11103

ちなみに、Nestopiaでもバグってるっぽいので実機の前にこっちでデバッグしたら楽かもしれない。
残念なことにデバッグ機能はほとんどないけど・・・

207 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 04:53:13.07 ID:Mnx9Nf8g.net]
>>206
nestopia情報ありがとうございます!
試してみましたが,パレットがおかしくなるバグはありますが,
実機互換機で起こるチラチラ飛び散りバグは出ません.
正規本体でもでないかな.正規本体早く買おうかな.

nesdevにも凸したいと思います(〃゜ω゜〃)

208 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 08:18:39.15 ID:IEErYv9U.net]
>>207
最初のロゴでスプライトのゴミが出るのはメモリの初期化をして
いないからだと思う

パレットがおかしいとかスクロールがぶれるとかそういうのは恐らく
表示期間中にPPUに書き込みしてるんじゃないかな

209 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 08:23:06.60 ID:dYyMlr6C.net]
fceuだとチラツキは見えない



210 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 09:26:06.10 ID:owqALoBe.net]
時々音がおかしくなる。

211 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 14:28:37.07 ID: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 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 14:29:39.56 ID: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 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 15:05:47.12 ID:/Ki7K6oz.net]
ファミコンは画面周りがややこしいからなぁ
自分も昔は資料が少なかったこともあって
BGを正常に表示できるようになるまでけっこうな時間を要したな

214 名前:名前は開発中のものです。 [2014/05/11(日) 17:55:22.28 ID:vl3SyvU7.net]
原理的にはむしろ単純だろ
なぜそうなるかの理解がないから理不尽に受け取るだけで

215 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 20:28:01.30 ID:FD888ndC.net]
>>213
ハードウェア的には単純なので、ソフトウェア側での配慮が必要
という方が適切だと思う。

216 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 21:03:39.07 ID:QGu2c1mG.net]
惜しいなあ、技術的にはいいこと書いてるハズなのに口調で台無し
必要もなく刺々しい言葉「しとけよ」「やれ」などを使ったかと思えば
「釣りなの?」「と思う」などと子どもじみた表現が混ざる

いい歳こいて言葉を選べないって、それはもう恥ずかしい事だよ
書き込む前にきちんと自分の書いた文章、推敲したするべきだよ
自分も、他人も、傷つけないために

217 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 21:45:37.94 ID:hyDhkYCi.net]
>>198
□ゲームについて
全体的に良い感じにまとまっていると思いました。
ただ、ミス即ゲームオーバーなので、残機制かライフ制にした方が少し長く遊べて楽しいかなと思います。
あと、果物などのアイテムを出して取ればボーナス点が入るとか。

□プログラムについて
BG書き換えについては、VBlankを深く考えていない実装になっているので、ここから立て直すのはきついと思いました。
205さんの指摘のように、PPUに転送するデータを一旦バッファに入れてVBlank中に転送するフレームワークを作って移行する方が早いかと。
VBlank中にPPUに転送できるデータ量は限界があるので、BG書き換えの実装部分はそれを配慮した作りに直さないと駄目ですね。

218 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 23:13:04.21 ID:rGvGrR+8.net]
>>216
ゆとりメンタルなやつは2ちゃん見なきゃいいんじゃない?

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

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


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



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

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

>>217
つくりはじめたばかりのやつが、まとまってるのか?

219 名前:199 mailto:sage [2014/05/11(日) 23:30:36.97 ID:Mnx9Nf8g.net]
皆さんご親切に本当に有難うございます.実際にプログラミングしながら勉強することで,
たくさん吸収出来てます!!

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

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


ソース公開は恥ずかしかったですが,頑張って出して良かったです!
想定よりも,皆さんからレスを頂けて嬉しいです.頑張ります!



220 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 00:09:07.80 ID:jaOM61/S.net]
>NMI使えず$2002のポーリングでループ作ってる
初心者でこれやらかす奴はたぶん某サイトの影響受けてるだろ
あそこは全体的に説明が不足しすぎてるよ
更新も長いこと止まってるし、当てにするのはやめたほうがいい

Nesdevの日本語資料理解するだけでもだいぶ変わるし
他にも今ではNES関連資料のサイトなんていっぱいある
特にI/Oレジスタについてはサイトによって書いてあること違ったりするから
一つのサイトに拘らず色々見るといい

221 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 00:13:00.90 ID:p9javgur.net]
>>219
BG描画後にVRAMアクセスがNGではなくて、
非VBlank中にVRAMアクセスするのがNGなんです。(画面が乱れる)
短いVBlank中にVRAMを書き換えるために、バッファにデータを溜め込んでおいて、
VBlank(NMI)割り込みに入ったらすぐにバッファのデータを転送しろってことです。
あと、もちろんですが、スプライトのDMA転送もVBlank中に行わなければなりません。

222 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 08:39:01.88 ID:Wk7QwTB6.net]
>>198 みたいな、打たれてもへこたれないヤツは2ch向きだね。ガンバレ!

>>216 の意見には同意だけど、そういうヤツもいるのが2chの味なのかなぁ
自分に対して >>212 みたいな反応されたときは、頭来たけどなw
修行が足りない

223 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 08:40:54.97 ID:Wk7QwTB6.net]
失礼、>>211>>211 の間違いでした。

224 名前:名前は開発中のものです。 [2014/05/12(月) 10:39:31.18 ID:cuBtqyJP.net]
当時のRAMはデュアルポートではないから読んでいる最中に書き込みはできない
単純な構造だよね?

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

表示周りをいじる際VBlank期間中にアクセスしなければならないのはこういう理由

225 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 22:05:47.81 ID:jsal4ZTv.net]
キラキラスターナイトのソースを読んでみたい。

226 名前:名前は開発中のものです。 mailto:sage [2014/05/13(火) 05:06:48.28 ID:9EaC9IEc.net]
遊び方にパテントはないわけでして

227 名前:名前は開発中のものです。 mailto:sage [2014/05/13(火) 06:22:09.58 ID:T2v6EbAW.net]
>>225
絵は卓越しているけど
プログラムは大して高度なことはやってないでしょ

228 名前:名前は開発中のものです。 [2014/05/13(火) 19:16:50.69 ID:srI4FW40.net]
RIKIがパソファミの安藤に媚び売っててワロタ
ロジックボム組み込んだりする基地外なのを知らんのか近頃のもんは

229 名前:名前は開発中のものです。 mailto:sage [2014/05/13(火) 20:10:15.51 ID:f3qQ/xjJ.net]
パソファミ作者はメールでの対応が最悪レベル
自分の非を認めないどころか人を犯罪者扱いしたりするキ○○イ
おまけにホンコンのソース盗用疑惑もあるしな ホントどうしようもねぇよ 
素人にはこれしかないから売れるんだろうけど それが余計にたち悪いね



230 名前:名前は開発中のものです。 mailto:sage [2014/05/15(木) 00:00:39.68 ID:HB8Kbvvq.net]
>>228
>>ロジックボム
そういう噂を聞いたから
その後にちょっとだけ調べたけど
プリンタポートでないI/Oポートに向けて
x86のout命令が発せられてたような、ないような
windows98なら簡単に発動するのかな
より堅牢なOSであるwindows2000にしてたから
効果なしっぽかったけど

近頃のもんが吸出しやROM焼き実機動作させてるのをよく見かけるようになったけど
ソソハメさんの名前がなぜあまり挙がらないか理由をよく認識しておいた方がいい>もっと近頃のもんたちへ

231 名前:名前は開発中のものです。 mailto:sage [2014/05/15(木) 03:12:19.39 ID:AXeiaTDm.net]
気持ち悪いのが涌いてきたな

232 名前:名前は開発中のものです。 mailto:sage [2014/05/15(木) 05:14:14.01 ID:gGlXRPO1.net]
すみません、吸出しというのは英語では何というのでしょうか?スペルを教えて下さい

233 名前:名前は開発中のものです。 mailto:sage [2014/05/15(木) 08:42:17.70 ID:9cGRzDB1.net]
dump

234 名前:名前は開発中のものです。 mailto:sage [2014/05/20(火) 00:15:36.83 ID:sHOtKBex.net]
>>140
宝石のラスタスクロール凄いね。あと、スプライト吹雪は気持ちいいっす
このスレッドで新しい演出ジャンルに出会えたのは嬉しいね

>>198
土管避けるの難しいけど楽しいね
BGの判定は凄いと思う
どんどん成長してゆくのが楽しみ

235 名前:199 mailto:sage [2014/05/27(火) 16:46:17.78 ID:Yj5iT5NZO]
頂いた修正案をもとに「まずSPRDMA」にして(PAD情報ゲットも指定の場所に移した),
また,プログラム中で何回もSPRDMAしてしまっていたのを削除しました.
実機でのスプライト飛び散り表示はなくなりました.

ただ,シーン切替時のがたつきや,
BGのミラーリングの問題で,裏で画面更新していけないなどの構造欠陥などは
修正していないので,またまとまったらご報告させてください.

236 名前:140 mailto:sage [2014/05/28(水) 20:00:45.64 ID: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 mailto:sage [2014/05/28(水) 20:07:39.22 ID:pcO3WytB.net]
あ、

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

として、JOYPADには$00入れないと不味いね。

238 名前:名前は開発中のものです。 [2014/05/29(木) 00:32:25.75 ID:Ix+yqrZv.net]
>>237 (clcと)sbc #0をcmp #1にすればsta <JOYPADは不要

239 名前:140 mailto:sage [2014/05/29(木) 01:07:17.19 ID:Lo1UVUXb.net]
>>238
ああ、確かに。さらに小さくなりました。
ありがとうございます。



240 名前:名前は開発中のものです。 mailto:sage [2014/06/04(水) 21:11:42.02 ID:Wpb6i0Ha.net]
RevolvingGemsのゲーム本体部分が出来ましたので公開します。

ttp://homepage3.nifty.com/~kyoske/nes/RevolvingGems070.zip

残りはタイトル画面と遊び方画面を実装して終わる予定。

241 名前:名前は開発中のものです。 mailto:sage [2014/06/04(水) 21:35:20.41 ID:EpTIlg4F.net]
すげー

242 名前:名前は開発中のものです。 mailto:sage [2014/06/04(水) 23:51:21.70 ID:78Tpkbjc.net]
商用レベルのできだと思う。
気になるのは、連鎖がどんどん発生しやすすぎではないのかなと

243 名前:名前は開発中のものです。 mailto:sage [2014/06/05(木) 01:19:37.09 ID:9NxYghum.net]
>>242

連鎖しやすいのは、6方向に対して6種類の駒しかないので
仕様上、確率的につながり易いのが原因です。
駒の種類を増やせれば良いのですが、パレットが足りないw

最初は3個つながったらで実装していたのですが、
あまりにも連鎖が続くので4個にしています。
それでも消せなくなることが無く延々と続けられるので、時間制に逃げました。

作って思ったのは、ぷよぷよの仕様は絶妙なバランスなんだなぁと。

244 名前:名前は開発中のものです。 mailto:sage [2014/06/05(木) 23:11:37.79 ID:hfWG3l/O.net]
追加された音楽がスタートで変更できるのは、個人的にうれしいですね!
後、セレクトボタンはどんな効果があるのでしょうか?(効果音だけ?)

245 名前:131 mailto:sage [2014/06/06(金) 19:17:42.85 ID:5n3Zcu9W.net]
131です。あの後、
いろいろ注意深く書き込みを見ていたのですが
人に意見されるってすごく大事だと思いました。

ちなみに、cc65でオセロとShootingGameSampleを作ったのと、
nesasmでブロック崩しを作ったのも
自分です。

今までは自分はチキンで人に意見言われるだけで、
むっつりと黙っていましたが、これからは
もっと能動的に動きたいです。

ファミコンのブロック崩しをソース付きで晒すので
汚いし、ロジック的におかしいところばかりですが、
見てやってください。

僕はカービィやマリオ、くにおくんのファミコン少年の一人の
つもりなのでファミコンは、ホント好きですし、このスレッド
を最初から見ています

www1.axfc.net/u/3252687.zip

246 名前:131 mailto:sage [2014/06/06(金) 21:24:59.35 ID:5n3Zcu9W.net]
こんな事書き込みたくて書き込むわけじゃないですけど、
ファミコンの正常動作って何ですか?
どうすれば正常動作っていうんですか?

いつまにか、このスレッドは本物のROMと同じように動かす為に努力してる
人たちを称え、褒めてきました。

正常動作って定義がどこにあるかはファミコンで動作すれば分かるんじゃないですかね。
それ以外を異常動作というなら、エミュレータはほぼ全て異常動作ですよ。

247 名前:名前は開発中のものです。 mailto:sage [2014/06/06(金) 22:02:30.07 ID:4Zl9JWw3.net]
>>243
始まった瞬間操作する前に勝手に連鎖するってのだけでも
どうにかならないかな
初期配置のみパターンで持つとか

248 名前:名前は開発中のものです。 mailto:sage [2014/06/06(金) 22:51:57.22 ID:kdjIsC0c.net]
>>246
そうですよエミュは異常動作ですよ
実機で動かないのを言い訳してるだけにしか聞こえませんね

249 名前:131 mailto:sage [2014/06/07(土) 03:42:43.36 ID:hwRmu2MG.net]
本当に実機で試したのか知りたいですが、
自分の言いたい事は実機で動かない事の言い訳じゃなくて、

ファミコンのプログラミングが1つの古代技術でそれが通用するのはあくまでファミコンのみ
という事なんですが**が素晴らしいとか**の技術は優れているとかのある意味
マニアックな話の流れになっているというか、

ぶっちゃけ、自分の作ったファミコンゲームは技術的には全然優れてないので、
優れた技術を持った人たちに憧れたみたいなところがあります。



250 名前:131 mailto:sage [2014/06/07(土) 03:52:27.88 ID:hwRmu2MG.net]
**には、ラスタースクロールやスプライトダブラー、
FFの高速スクロール、BGの高速書き換え、パレットアニメーション
を入れてください。

251 名前:131 mailto:sage [2014/06/07(土) 09:33:01.78 ID:hwRmu2MG.net]
cc65の作ったやつは(REVERSI,SHOOTING GAME SAMPLE)動く自信がないですが、
nesasmで作ったやつも(IWA WO OTOSE,BLOCK)動かないんですかね。

252 名前:名前は開発中のものです。 mailto:sage [2014/06/07(土) 10:52:19.34 ID:0OqTmEOh.net]
>>244
スタートとセレクトは、サウンド系の開発用にテストできるように追加していた機能で
今回スタートを少し改良して選曲出来るようにしました。
セレクトは、効果音を作る時以外は意味を成さないので、次の完成版では削除する予定です。

253 名前:名前は開発中のものです。 mailto:sage [2014/06/07(土) 11:09:37.37 ID:0OqTmEOh.net]
>>247
初期配置をパターンで持つのは、バリエーションを作るのが大変なので、
採択したくないですね。

代わりに内部で連鎖が止まるまで処理を繰り返して、
そこからゲーム開始するよう実装してみます。

254 名前:名前は開発中のものです。 mailto:sage [2014/06/07(土) 11:18:00.96 ID:0OqTmEOh.net]
>>249
私も最終目標は実機で動作させてみることなのですが、
そこまでの道が遠い状態です。

一応、動作させるための目処は立っていて、材料とかもそろえたのですが
ROMライターから自作せねばならないため、いつになるかわかりません。

実機で動作したのを確認して初めて、ファミコンのプログラムを作ったと、
胸張って言えるかと個人的には思っています。

255 名前:131 mailto:sage [2014/06/07(土) 14:24:42.36 ID:HAL7UNXv.net]
>>254

ネットカフェから書き込みです。

そうですね。ファミコンの実機で動いたら感動しますし、
実機で動かしたいです。

ファミコンの実機は持っているのですが、ROMライターや
EEPROM、同軸ケーブル、ビデオデッキ、自分用のテレビ

256 名前:131 mailto:sage [2014/06/07(土) 14:27:25.94 ID:HAL7UNXv.net]
など問題が山積しているので、現段階では難しいです。

257 名前:名前は開発中のものです。 mailto:sage [2014/06/07(土) 15:48:51.46 ID: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 名前:名前は開発中のものです。 mailto:sage [2014/06/07(土) 15:49:29.84 ID: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座標だけでも表引きにすると処理が結構簡素化します)

259 名前:131 mailto:sage [2014/06/07(土) 17:02:04.46 ID:hwRmu2MG.net]
ギコ猫さんのところで、覚えた技術ばかりという理由は
英語が出来ないという理由なのですが、これは理由になってないみたいですね。

@英語が出来ない

A英語の技術情報が分からない

B日本語だけの技術情報に頼る
の無限ループなので、英語を中学英語から
やり直したいと思います。

ちょうど良い本がアマゾンで見つかったので
ttp://www.amazon.co.jp/%E4%B8%AD%E5%AD%A6%E3%83%BB%E9%AB%98%E6%A0%A16%E5%B9%B4%E5%88%86%E3%81%AE%E8%8B%B1%E8%AA%9E%E3%82%92%E7%B7%8F%E5%BE%A9%E7%BF%92%E3%81%99%E3%82%8B-CD%E4%BB%98-CD-BOOK-%E5%B9%B3%E5%B1%B1/dp/4860641663

あと、スプライトの定義のその定義の仕方は知らなかったです。
でも、ある意味スプライトDMAのアドレスを考えれば当たり前なんでしょうけど。

iny cpy bneの間違いは、間違えて覚えていました。

ギコ猫さんとこはパレットの読み込み時に
ldx #0
.loop
lda ourpal,x
sta $2007
inx
cpx #32
bne .loop
みたいにやっていたのですがよく考えれば、0-31までを読み込んでいたんですね。
これは、引き算の小学一年レベルの間違えですね。差がNの時、合計数は、N+1になるという事なんでしょう。

つづく



260 名前:131 mailto:sage [2014/06/07(土) 17:29:43.93 ID:hwRmu2MG.net]
>>257-258
VBlankとゲーム本体処理を分離ということはNMIを使うって事ですね。他の方も言ってましたが

スプライトと実際の座標を別に持つというのは、以前やったことがあるのですが、クソ汚いソースになってしまいましたが、少しだけわかってきた気がします。こんな感じですかね。
>>261に書きます。


VBlankのタイミングと書き換えは理解しずらいのですが、ファミコンのPPUの仕様なんですかね。

Pad_Checkは、他の方が作られたソースなので、あえて外しました。ROMに0を書き込んだ意図は、恐らくないです。気づかないまま放置してしまいました。

ブロックの配置位置が有限個ならテーブル化できるんですか?今度やってみます。

アドバイスありがとうございます!!ホント助かりました。知らなかった事や理解出来なかった事が分かってよかったです。

261 名前:131 mailto:sage [2014/06/07(土) 17:30:36.51 ID:hwRmu2MG.net]
.org $300 ;データ定義
Sprite:
Sp00_Y: $0300
Sp00_T: $0301
Sp00_S: $0302
Sp00_X: $0303
01_Y: $0304
01_T: $0305
01_S: $0306
01_X: $0307
...

ldx #0
.SetObjAxis2RealAxis ;スプライト座標を実際の座標に代入する
lda Sprite+0,x
sta Real_Y,x
lda Sprite+3,x
sta Real_X,x
inx
inx
inx
inx
cpx #(4*4) ;4つのスプライトを代入する
bne .SetObjAxis2RealAxis

262 名前:131 mailto:sage [2014/06/07(土) 17:32:41.18 ID:hwRmu2MG.net]
間違えました。


.org $300 ;データ定義
Sprite:
Sp00_Y= $0300
Sp00_T= $0301
Sp00_S= $0302
Sp00_X= $0303
01_Y= $0304
01_T= $0305
01_S= $0306
01_X= $0307
...

ldx #0
.SetObjAxis2RealAxis ;スプライト座標を実際の座標に代入する
lda Sprite+0,x
sta Real_Y,x
lda Sprite+3,x
sta Real_X,x
inx
inx
inx
inx
cpx #(4*4) ;4つのスプライトを代入する
bne .SetObjAxis2RealAxis

263 名前:名前は開発中のものです。 mailto:sage [2014/06/07(土) 17:38:24.41 ID:YYdbZPoT.net]
英検三級、即ち中学卒業程度の英語力とgoogle翻訳があれば十分。
海外サイトの情報も何も全部理解する必要はないし、図、表、技術用語さえわかれば殆ど問題ない。
それに今では日本語資料も充実していると思うし、あえてギコ猫のところだけを参考にすることもないだろう。

初心者のうちは他人が作ったソースを見てよく理解し、そこからいろいろ学ぶのもいいだろう。
公開されているソースによっては丁寧に説明が細かく書いてあるものもある。

264 名前:131 mailto:sage [2014/06/07(土) 18:21:24.08 ID:hwRmu2MG.net]
>>263

英検3級は持ってますが、かなり文法が怪しいです。単語に関しては最も初期の「萌えたん」を
P-StudySystemを自作問題集を作って覚えた程度です。

1つ1つの単語が読めても何を言いたいのかわからないので、今持っているくもん中学英文法
という本をゆっくりと確実にやる事にします。

初心者というにも、初めてから時間がかかり過ぎてる面はあるのですが、
恐らく他の方の作ったソースを断片的にしか分かっていないというのはあると思います。

google翻訳に関しては、使うブラウザがchromeなので、標準で使えます。

265 名前:名前は開発中のものです。 mailto:sage [2014/06/07(土) 19:18:59.23 ID:2SsDMldn.net]
>>252
セレクトは効果音テストだったのね。疑問解消しました
ソフトの完成楽しみにしてます

266 名前:名前は開発中のものです。 mailto:sage [2014/06/08(日) 02:10:46.27 ID:CkZRo6BG.net]
>>260

> VBlankのタイミングと書き換えは理解しずらいのですが、ファミコンのPPUの仕様なんですかね。

VBlankの意味を理解していない節があるので、まずは、ブラウン管の話からします。
機知の情報かも知れませんが聞いてください。

ブラウン管の裏から電子銃で電子を飛ばし、ブラウン管表の蛍光面を発光します。
真っ直ぐ飛ばしただけでは、ただの点なので、磁界をかけて電子が飛ぶ方向を変えて
左上から右へ水平方向に線を書くように発光させ、再び左端に戻ってさっきより
ちょっと下の位置で同じように水平方向の線を発光させます。
これを画面下まで繰り返して、再び左上に戻ります。
これをすばやく繰り返すことで、ブラウン管の蛍光面全体に画像を表示します。(ラスタスキャン方式)
電子の飛ばし先が右端から左端に戻る期間を水平帰線消去期間(HBlank期間)、
下端から上端に戻る期間を垂直帰線消去期間(VBlank期間)と呼びます。

267 名前:名前は開発中のものです。 mailto:sage [2014/06/08(日) 02:12:41.17 ID:CkZRo6BG.net]
>>266

続き

VBlank期間は、一瞬で戻るのではなく、NTSC(日本のアナログ放送の信号規格)の場合
20本分の横線を描くぐらいの時間があります。この間、電子銃から電子は飛びません。

非VBlank期間は、ファミコンのPPUは画像の信号を作るため、
CHR-ROMからパターンを読み込んだり、VRAMからネームテーブルや
属性情報を読み込んでいて、PPUの信号線(PPUバス)を占有しています。

VBlank期間は、PPUが画像の信号を作らないので、PPUバスは開放されており
CPUはPPUを介してPPUバスにつながっているVRAMにアクセスできます。

「VBlank待ちの直後にVRAMの書き換えを行え」というのは、PPUが映像信号を
作るのに邪魔にならないタイミングでVRAMにアクセスしなさいということです。

268 名前:名前は開発中のものです。 mailto:sage [2014/06/08(日) 02:53:09.19 ID:CkZRo6BG.net]
>>267

続き

非VBlank期間中にCPUがVRAMにアクセスできる方法があります。
PPUレジスタ $2001 のbit3とbit4を0にして、BGとスプライトを非表示にすることです。
画像の信号を作るためのPPUのCHR-ROMやVRAMへのアクセスが止まるので
PPUバスが開放され、CPUはPPUを介してVRAMにアクセスできます。

代わりに、画面に何も表示されない箇所が現れることになります。
BGとスプライトを非表示にするタイミングにばらつきがあると、
画面がちらつく現象となります。

> VBlankのタイミングと書き換えは理解しずらいのですが、ファミコンのPPUの仕様なんですかね。

ファミコンの設計による制限であるため、仕様と言えば、その通りです。

269 名前:名前は開発中のものです。 mailto:sage [2014/06/08(日) 02:54:30.27 ID:CkZRo6BG.net]
>>268

続き

同世代の他のパソコンとかでは、表示中にもCPUからVRAMにアクセスできるものが
あるのに、ファミコンで出来ないのはなぜ?

→画面表示用の信号線とCPUからVRAMにアクセスする信号線が別になっているためです。
 VRAMもデュアルポートメモリという、アクセスの口が2つある特別なRAMを使っています。
 ファミコンのWRAMやVRAMに使われているのは、アクセスの口が1つのシングルポートメモリです。
→信号線も増えるため、基板上の配線が複雑化し、基板のサイズや層が増えてコスト増になる可能性があります。

ファミコンのVRAMにデュアルポートメモリを使わなかったのはなぜ?

→コスト削減のためです。
 一般的にアクセスポートが余分にあるデュアルポートメモリの方がシングルポートメモリより部品代が高くなります。
 また、WRAMとVRAMに同じ部品を使うことで、大量に発注し部品メーカーに単価の引き下げを交渉できます。

とりあえず、わかりやすく説明したつもりですが、間違いなどがありましたら
フォローお願いします。>All



270 名前:131 mailto:sage [2014/06/08(日) 06:24:49.26 ID:RIyNgnKh.net]
>>266

VBlankに関しては、「ファミコンの驚くべき発想力」という本の78ページ前後に
記述がありました。が、>>266さんの説明の方がより詳しく説明しているように
見えます。

HBlank期間のHはホライゾン?(水平)の略でしょうね。VBlankのVは、バーチカル(垂直)
の略な気がします。

NTSCとPALの違いも知らなかったのですが、日本は、NTSCだったんですね。

VBlank待ちの直後にビデオメモリの書き換えをするのはそういう理由が
あったんですか。

非VBlank期間中にCPUがVRAMにアクセスできる方法、これは知っていましたが、
欠点は知りませんでした。

271 名前:名前は開発中のものです。 mailto:sage [2014/06/08(日) 07:01:43.99 ID:Jc27w7xL.net]
Horizontal Blankingですかね

かつてはPPUの特定のバージョンのみで発生する不具合なんてのもありました
スクロールレジスタがある値の時、VRAMアドレスレジスタを触ると背景色が化けるというもの・・






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<213KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef