■過去スレ
ファミコンのプログラム
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/
ファミコンのプログラム4
2012/07/29(日) 14:19:03.64ID:a5QeqSA0
264131
2014/06/07(土) 18:21:24.08ID:hwRmu2MG >>263
英検3級は持ってますが、かなり文法が怪しいです。単語に関しては最も初期の「萌えたん」を
P-StudySystemを自作問題集を作って覚えた程度です。
1つ1つの単語が読めても何を言いたいのかわからないので、今持っているくもん中学英文法
という本をゆっくりと確実にやる事にします。
初心者というにも、初めてから時間がかかり過ぎてる面はあるのですが、
恐らく他の方の作ったソースを断片的にしか分かっていないというのはあると思います。
google翻訳に関しては、使うブラウザがchromeなので、標準で使えます。
英検3級は持ってますが、かなり文法が怪しいです。単語に関しては最も初期の「萌えたん」を
P-StudySystemを自作問題集を作って覚えた程度です。
1つ1つの単語が読めても何を言いたいのかわからないので、今持っているくもん中学英文法
という本をゆっくりと確実にやる事にします。
初心者というにも、初めてから時間がかかり過ぎてる面はあるのですが、
恐らく他の方の作ったソースを断片的にしか分かっていないというのはあると思います。
google翻訳に関しては、使うブラウザがchromeなので、標準で使えます。
265名前は開発中のものです。
2014/06/07(土) 19:18:59.23ID:2SsDMldn266名前は開発中のものです。
2014/06/08(日) 02:10:46.27ID:CkZRo6BG >>260
> VBlankのタイミングと書き換えは理解しずらいのですが、ファミコンのPPUの仕様なんですかね。
VBlankの意味を理解していない節があるので、まずは、ブラウン管の話からします。
機知の情報かも知れませんが聞いてください。
ブラウン管の裏から電子銃で電子を飛ばし、ブラウン管表の蛍光面を発光します。
真っ直ぐ飛ばしただけでは、ただの点なので、磁界をかけて電子が飛ぶ方向を変えて
左上から右へ水平方向に線を書くように発光させ、再び左端に戻ってさっきより
ちょっと下の位置で同じように水平方向の線を発光させます。
これを画面下まで繰り返して、再び左上に戻ります。
これをすばやく繰り返すことで、ブラウン管の蛍光面全体に画像を表示します。(ラスタスキャン方式)
電子の飛ばし先が右端から左端に戻る期間を水平帰線消去期間(HBlank期間)、
下端から上端に戻る期間を垂直帰線消去期間(VBlank期間)と呼びます。
> VBlankのタイミングと書き換えは理解しずらいのですが、ファミコンのPPUの仕様なんですかね。
VBlankの意味を理解していない節があるので、まずは、ブラウン管の話からします。
機知の情報かも知れませんが聞いてください。
ブラウン管の裏から電子銃で電子を飛ばし、ブラウン管表の蛍光面を発光します。
真っ直ぐ飛ばしただけでは、ただの点なので、磁界をかけて電子が飛ぶ方向を変えて
左上から右へ水平方向に線を書くように発光させ、再び左端に戻ってさっきより
ちょっと下の位置で同じように水平方向の線を発光させます。
これを画面下まで繰り返して、再び左上に戻ります。
これをすばやく繰り返すことで、ブラウン管の蛍光面全体に画像を表示します。(ラスタスキャン方式)
電子の飛ばし先が右端から左端に戻る期間を水平帰線消去期間(HBlank期間)、
下端から上端に戻る期間を垂直帰線消去期間(VBlank期間)と呼びます。
267名前は開発中のものです。
2014/06/08(日) 02:12:41.17ID:CkZRo6BG >>266
続き
VBlank期間は、一瞬で戻るのではなく、NTSC(日本のアナログ放送の信号規格)の場合
20本分の横線を描くぐらいの時間があります。この間、電子銃から電子は飛びません。
非VBlank期間は、ファミコンのPPUは画像の信号を作るため、
CHR-ROMからパターンを読み込んだり、VRAMからネームテーブルや
属性情報を読み込んでいて、PPUの信号線(PPUバス)を占有しています。
VBlank期間は、PPUが画像の信号を作らないので、PPUバスは開放されており
CPUはPPUを介してPPUバスにつながっているVRAMにアクセスできます。
「VBlank待ちの直後にVRAMの書き換えを行え」というのは、PPUが映像信号を
作るのに邪魔にならないタイミングでVRAMにアクセスしなさいということです。
続き
VBlank期間は、一瞬で戻るのではなく、NTSC(日本のアナログ放送の信号規格)の場合
20本分の横線を描くぐらいの時間があります。この間、電子銃から電子は飛びません。
非VBlank期間は、ファミコンのPPUは画像の信号を作るため、
CHR-ROMからパターンを読み込んだり、VRAMからネームテーブルや
属性情報を読み込んでいて、PPUの信号線(PPUバス)を占有しています。
VBlank期間は、PPUが画像の信号を作らないので、PPUバスは開放されており
CPUはPPUを介してPPUバスにつながっているVRAMにアクセスできます。
「VBlank待ちの直後にVRAMの書き換えを行え」というのは、PPUが映像信号を
作るのに邪魔にならないタイミングでVRAMにアクセスしなさいということです。
268名前は開発中のものです。
2014/06/08(日) 02:53:09.19ID:CkZRo6BG >>267
続き
非VBlank期間中にCPUがVRAMにアクセスできる方法があります。
PPUレジスタ $2001 のbit3とbit4を0にして、BGとスプライトを非表示にすることです。
画像の信号を作るためのPPUのCHR-ROMやVRAMへのアクセスが止まるので
PPUバスが開放され、CPUはPPUを介してVRAMにアクセスできます。
代わりに、画面に何も表示されない箇所が現れることになります。
BGとスプライトを非表示にするタイミングにばらつきがあると、
画面がちらつく現象となります。
> VBlankのタイミングと書き換えは理解しずらいのですが、ファミコンのPPUの仕様なんですかね。
ファミコンの設計による制限であるため、仕様と言えば、その通りです。
続き
非VBlank期間中にCPUがVRAMにアクセスできる方法があります。
PPUレジスタ $2001 のbit3とbit4を0にして、BGとスプライトを非表示にすることです。
画像の信号を作るためのPPUのCHR-ROMやVRAMへのアクセスが止まるので
PPUバスが開放され、CPUはPPUを介してVRAMにアクセスできます。
代わりに、画面に何も表示されない箇所が現れることになります。
BGとスプライトを非表示にするタイミングにばらつきがあると、
画面がちらつく現象となります。
> VBlankのタイミングと書き換えは理解しずらいのですが、ファミコンのPPUの仕様なんですかね。
ファミコンの設計による制限であるため、仕様と言えば、その通りです。
269名前は開発中のものです。
2014/06/08(日) 02:54:30.27ID:CkZRo6BG >>268
続き
同世代の他のパソコンとかでは、表示中にもCPUからVRAMにアクセスできるものが
あるのに、ファミコンで出来ないのはなぜ?
→画面表示用の信号線とCPUからVRAMにアクセスする信号線が別になっているためです。
VRAMもデュアルポートメモリという、アクセスの口が2つある特別なRAMを使っています。
ファミコンのWRAMやVRAMに使われているのは、アクセスの口が1つのシングルポートメモリです。
→信号線も増えるため、基板上の配線が複雑化し、基板のサイズや層が増えてコスト増になる可能性があります。
ファミコンのVRAMにデュアルポートメモリを使わなかったのはなぜ?
→コスト削減のためです。
一般的にアクセスポートが余分にあるデュアルポートメモリの方がシングルポートメモリより部品代が高くなります。
また、WRAMとVRAMに同じ部品を使うことで、大量に発注し部品メーカーに単価の引き下げを交渉できます。
とりあえず、わかりやすく説明したつもりですが、間違いなどがありましたら
フォローお願いします。>All
続き
同世代の他のパソコンとかでは、表示中にもCPUからVRAMにアクセスできるものが
あるのに、ファミコンで出来ないのはなぜ?
→画面表示用の信号線とCPUからVRAMにアクセスする信号線が別になっているためです。
VRAMもデュアルポートメモリという、アクセスの口が2つある特別なRAMを使っています。
ファミコンのWRAMやVRAMに使われているのは、アクセスの口が1つのシングルポートメモリです。
→信号線も増えるため、基板上の配線が複雑化し、基板のサイズや層が増えてコスト増になる可能性があります。
ファミコンのVRAMにデュアルポートメモリを使わなかったのはなぜ?
→コスト削減のためです。
一般的にアクセスポートが余分にあるデュアルポートメモリの方がシングルポートメモリより部品代が高くなります。
また、WRAMとVRAMに同じ部品を使うことで、大量に発注し部品メーカーに単価の引き下げを交渉できます。
とりあえず、わかりやすく説明したつもりですが、間違いなどがありましたら
フォローお願いします。>All
270131
2014/06/08(日) 06:24:49.26ID:RIyNgnKh271名前は開発中のものです。
2014/06/08(日) 07:01:43.99ID:Jc27w7xL Horizontal Blankingですかね
かつてはPPUの特定のバージョンのみで発生する不具合なんてのもありました
スクロールレジスタがある値の時、VRAMアドレスレジスタを触ると背景色が化けるというもの・・
かつてはPPUの特定のバージョンのみで発生する不具合なんてのもありました
スクロールレジスタがある値の時、VRAMアドレスレジスタを触ると背景色が化けるというもの・・
272131
2014/06/08(日) 10:50:38.68ID:RIyNgnKh PPUの特定バージョンというのが分かりませんが、製造されたファミコン本体
ですか?それともエミュレータか何かですか?
スクロールレジスタは、$2005の二度書きレジスタですよね。
ですか?それともエミュレータか何かですか?
スクロールレジスタは、$2005の二度書きレジスタですよね。
273名前は開発中のものです。
2014/06/08(日) 15:26:42.07ID:25kxI5vs RPGやなんかでフィールドから街へフィールドから戦闘への場面変更で一旦ブラックアウトするのは
画面初期化して書き直す時間を稼ぐためでもあったんだろうか?
画面初期化して書き直す時間を稼ぐためでもあったんだろうか?
274名前は開発中のものです。
2014/06/08(日) 15:31:42.31ID:Eog1TIRJ 製造ロットによるがファミコンの中には2つのカスタムLSIが入っている。
一つはRP2A03というもの もう一つがRP2C02というもの。
前者がCPUとAPUやI/Oポート周りで、後者がPPU。
PPUがRP2C02なのはNTSC出力のものだけで、PALならRP2C03、RGBならRC2C05など。
型番の後に続くアルファベット(例:RP2C02EのE)がバージョンを表している。
特定バージョンというか、初期型に不具合が多かった。
ちなみに製造後期になるとデコーダやインバータも1チップのカスタムLSIにまとめられる。
でもなぜかSRAMがSOPからDIPに戻ってる。入手先が限られてきたのかな?
一つはRP2A03というもの もう一つがRP2C02というもの。
前者がCPUとAPUやI/Oポート周りで、後者がPPU。
PPUがRP2C02なのはNTSC出力のものだけで、PALならRP2C03、RGBならRC2C05など。
型番の後に続くアルファベット(例:RP2C02EのE)がバージョンを表している。
特定バージョンというか、初期型に不具合が多かった。
ちなみに製造後期になるとデコーダやインバータも1チップのカスタムLSIにまとめられる。
でもなぜかSRAMがSOPからDIPに戻ってる。入手先が限られてきたのかな?
275名前は開発中のものです。
2014/06/08(日) 17:20:23.01ID:2cLvFL4/ >>273
スクロールは基本的にネームテーブルを2枚とも使うので
表示されていない方を裏画面として使うのはちょっとめんどくさい
だから場面転換時には画面表示を一旦オフにする必要はあるけど
画面全体を書き換えるにしても数フレームだからほぼ一瞬で終わる
わざわざ時間稼ぎしなければならないほどでもないので
フェードなりの画面効果は演出を目的としてると思っていい
スクロールは基本的にネームテーブルを2枚とも使うので
表示されていない方を裏画面として使うのはちょっとめんどくさい
だから場面転換時には画面表示を一旦オフにする必要はあるけど
画面全体を書き換えるにしても数フレームだからほぼ一瞬で終わる
わざわざ時間稼ぎしなければならないほどでもないので
フェードなりの画面効果は演出を目的としてると思っていい
276名前は開発中のものです。
2014/06/08(日) 18:14:36.81ID:QSuHGJdX >>269
同世代のパソコンなどのVRAMはシングルポートのDRAMだよ
CPUをウェイトで止めたり、DMAで勝手にCPUが止まったり、アクセスするタイミングを
工夫して見かけ上同時に読み書き出来るようにしてあったり、VDPが調停してくれたり
色々あるけども
同世代のパソコンなどのVRAMはシングルポートのDRAMだよ
CPUをウェイトで止めたり、DMAで勝手にCPUが止まったり、アクセスするタイミングを
工夫して見かけ上同時に読み書き出来るようにしてあったり、VDPが調停してくれたり
色々あるけども
277名前は開発中のものです。
2014/06/08(日) 20:16:46.77ID:p43hB49G >>245-246
名乗り出なくてもバグだらけのキ○ガイプログラムだからすぐわかるよ。
人の言うことを聞かないで数年間NMI使えないで、いつも同じバグ出して、「正常動作の定義は?」って逆ギレ。愚痴キ○ガイ消えてくれ。
・あちこちでゼロページ < 忘れすぎ → auto-zeropageが施された改造版のnesasmあるよ
・なにをしているのかよくわからない。ROMに書き込んではいけない。実機動作を狙ってるなら
lda #0 ;これはROMなので出来ないので、こうする
sta STAGE1,x ;〃
・Aボタン押したときのデューティ比的な音バグ(数年間放置されたバグ
誤 lda APU_REG0_DUTY_875
誤 ora APU_REG0_COUNT_ON ← PadStat = $20 と重複!
誤 ora APU_REG0_FIX_ON
正 lda #( APU_REG0_DUTY_875 | APU_REG0_COUNT_ON | APU_REG0_FIX_ON )
・
誤 lda APU_REG1_FRQCHG_ON
正 lda #APU_REG1_FRQCHG_ON
・既に指摘があるようにcmpが変。loadのフラグの変化とブランチのフラグ条件を理解していない。
lda なんたら
cmp #0
beq または bne
・jsr Pad_Check は 他人 >>236 の? 算術sbc使ってるから変だと思ったけど
パッと見でこれだけミスしてて、どこにまともに動く要素があるわけ?氷山の一角だろう。
今回も 「.dw 0; VBlank割り込み」見てまたお前かとやる気を失ったけど、BLOCK.symが同梱されていたので捗った。
名乗り出なくてもバグだらけのキ○ガイプログラムだからすぐわかるよ。
人の言うことを聞かないで数年間NMI使えないで、いつも同じバグ出して、「正常動作の定義は?」って逆ギレ。愚痴キ○ガイ消えてくれ。
・あちこちでゼロページ < 忘れすぎ → auto-zeropageが施された改造版のnesasmあるよ
・なにをしているのかよくわからない。ROMに書き込んではいけない。実機動作を狙ってるなら
lda #0 ;これはROMなので出来ないので、こうする
sta STAGE1,x ;〃
・Aボタン押したときのデューティ比的な音バグ(数年間放置されたバグ
誤 lda APU_REG0_DUTY_875
誤 ora APU_REG0_COUNT_ON ← PadStat = $20 と重複!
誤 ora APU_REG0_FIX_ON
正 lda #( APU_REG0_DUTY_875 | APU_REG0_COUNT_ON | APU_REG0_FIX_ON )
・
誤 lda APU_REG1_FRQCHG_ON
正 lda #APU_REG1_FRQCHG_ON
・既に指摘があるようにcmpが変。loadのフラグの変化とブランチのフラグ条件を理解していない。
lda なんたら
cmp #0
beq または bne
・jsr Pad_Check は 他人 >>236 の? 算術sbc使ってるから変だと思ったけど
パッと見でこれだけミスしてて、どこにまともに動く要素があるわけ?氷山の一角だろう。
今回も 「.dw 0; VBlank割り込み」見てまたお前かとやる気を失ったけど、BLOCK.symが同梱されていたので捗った。
278名前は開発中のものです。
2014/06/08(日) 20:24:54.45ID:p43hB49G NMI使えない、各種メモリやレジスタの初期化していない奴って
ギコ猫の前半章のコピペ&拡張だったんだな
後半章ばかり見てたから原因がわからなかった>>221
言い訳にもならないけどね
他人のソース調べればわかることだから
後半章のソースも問題あり
>>270
指摘されると、「私は〜知ってましたが、あえてやりませんでした」 じゃなんでNMI使えないの?
「VBlank待ちの直後にビデオメモリの書き換えをするのはそういう理由があったんですか。 」
(レトロ)ゲームのプログラムに興味ある人はみんな知ってるよ。Direct3Dだって垂直同期の概念あるでしょ。
>>273
ゲームによる。
特にCHRがRAMでドラクエVやWのようにROM容量がきつくて圧縮されたゲームは遅い。
数10フレームかかる。
エミュのパレットをハックしてネームテーブルビュワー見ると展開のスピードを見やすい。
・戦闘画面に移行するとき
CHRのパターンテーブルがRAMな場合は普通に書き換えるだけで時間がかかる。
書き換える前にPRG内の画像圧縮を展開するだろうからもっと時間がかかる。
・マップ画面に移行するとき
マップとマップチップの展開に時間がかかる
市販のゲームは限られたRAMやROMのスペースで展開と転送をこなさなければならず
我々が専用のルーチンで高速転送するのとはわけが違う場合もある
全部ROMで持ってるゲームならもっと速くて10フレーム程度かな
ギコ猫の前半章のコピペ&拡張だったんだな
後半章ばかり見てたから原因がわからなかった>>221
言い訳にもならないけどね
他人のソース調べればわかることだから
後半章のソースも問題あり
>>270
指摘されると、「私は〜知ってましたが、あえてやりませんでした」 じゃなんでNMI使えないの?
「VBlank待ちの直後にビデオメモリの書き換えをするのはそういう理由があったんですか。 」
(レトロ)ゲームのプログラムに興味ある人はみんな知ってるよ。Direct3Dだって垂直同期の概念あるでしょ。
>>273
ゲームによる。
特にCHRがRAMでドラクエVやWのようにROM容量がきつくて圧縮されたゲームは遅い。
数10フレームかかる。
エミュのパレットをハックしてネームテーブルビュワー見ると展開のスピードを見やすい。
・戦闘画面に移行するとき
CHRのパターンテーブルがRAMな場合は普通に書き換えるだけで時間がかかる。
書き換える前にPRG内の画像圧縮を展開するだろうからもっと時間がかかる。
・マップ画面に移行するとき
マップとマップチップの展開に時間がかかる
市販のゲームは限られたRAMやROMのスペースで展開と転送をこなさなければならず
我々が専用のルーチンで高速転送するのとはわけが違う場合もある
全部ROMで持ってるゲームならもっと速くて10フレーム程度かな
279131
2014/06/09(月) 18:51:10.28ID:Sx48Gggw >>277
NMIは使わなかったのは、確かにギコ猫のコピペだからと使い方を知らないからです。
いろいろ問題があったのは、事実ですし、バグがあったのも事実です。
何と言ったら良いか分かりませんが、ガッカリさせてすみませんでした。
みなさん、wという笑いや嘲笑の意味の文字を使っていないので、自分の為を思って
書き込んでいるのが見て取れます。
>>あちこちでゼロページ < 忘れすぎ → auto-zeropageが施された改造版のnesasmあるよ
どうもアドバイスありがとうございます。
>>・なにをしているのかよくわからない。ROMに書き込んではいけない。実機動作を狙ってるなら
>>lda #0 ;これはROMなので出来ないので、こうする
>>sta STAGE1,x ;〃
ROMは書き込めないということは知っていましたが、放置したバグの結果であることは
この前言ったはずです。
>>・Aボタン押したときのデューティ比的な音バグ(数年間放置されたバグ
>>誤 lda APU_REG0_DUTY_875
>>誤 ora APU_REG0_COUNT_ON ← PadStat = $20 と重複!
>>誤 ora APU_REG0_FIX_ON
>>正 lda #( APU_REG0_DUTY_875 | APU_REG0_COUNT_ON | APU_REG0_FIX_ON )
ありがとうございます。どうしてボタンを押すと変な音なのか分かりませんでした。
何か原因があるとは思っていましたが何が原因かは全くわかりませんでした
>>・ 誤 lda APU_REG1_FRQCHG_ON
>>正 lda #APU_REG1_FRQCHG_ON
これもありがとうございます。
つづく
NMIは使わなかったのは、確かにギコ猫のコピペだからと使い方を知らないからです。
いろいろ問題があったのは、事実ですし、バグがあったのも事実です。
何と言ったら良いか分かりませんが、ガッカリさせてすみませんでした。
みなさん、wという笑いや嘲笑の意味の文字を使っていないので、自分の為を思って
書き込んでいるのが見て取れます。
>>あちこちでゼロページ < 忘れすぎ → auto-zeropageが施された改造版のnesasmあるよ
どうもアドバイスありがとうございます。
>>・なにをしているのかよくわからない。ROMに書き込んではいけない。実機動作を狙ってるなら
>>lda #0 ;これはROMなので出来ないので、こうする
>>sta STAGE1,x ;〃
ROMは書き込めないということは知っていましたが、放置したバグの結果であることは
この前言ったはずです。
>>・Aボタン押したときのデューティ比的な音バグ(数年間放置されたバグ
>>誤 lda APU_REG0_DUTY_875
>>誤 ora APU_REG0_COUNT_ON ← PadStat = $20 と重複!
>>誤 ora APU_REG0_FIX_ON
>>正 lda #( APU_REG0_DUTY_875 | APU_REG0_COUNT_ON | APU_REG0_FIX_ON )
ありがとうございます。どうしてボタンを押すと変な音なのか分かりませんでした。
何か原因があるとは思っていましたが何が原因かは全くわかりませんでした
>>・ 誤 lda APU_REG1_FRQCHG_ON
>>正 lda #APU_REG1_FRQCHG_ON
これもありがとうございます。
つづく
280131
2014/06/09(月) 18:53:26.51ID:Sx48Gggw >>・既に指摘があるようにcmpが変。loadのフラグの変化とブランチのフラグ条件を理解していない。
>>lda なんたら
>>cmp #0
>>beq または bne
これは言えてますね。単純な頭なので、単純に考えていました。
>>・jsr Pad_Check は 他人 >>236 の? 算術sbc使ってるから変だと思ったけど
はい、他人のソースを使いました。
>>パッと見でこれだけミスしてて、どこにまともに動く要素があるわけ?氷山の一角だろう。
>>今回も 「.dw 0; VBlank割り込み」見てまたお前かとやる気を失ったけど、BLOCK.symが同梱されていたので捗った。
えーとこれも失敗してしまいましたね。ファミコン開発は思ったより難しいんですね。
>>278 :名前は開発中のものです。:2014/06/08(日) 20:24:54.45 ID:p43hB49G
>>NMI使えない、各種メモリやレジスタの初期化していない奴って
>>ギコ猫の前半章のコピペ&拡張だったんだな
>>後半章ばかり見てたから原因がわからなかった>>221
はい、そうです。ギコ猫の前半章の主に9章のコピペです。
>>言い訳にもならないけどね
>>他人のソース調べればわかることだから
他人のソースを調べるという事がどんなに重要か分かりました。
>>後半章のソースも問題あり
>>270
>>指摘されると、「私は〜知ってましたが、あえてやりませんでした」 じゃなんでNMI使えないの?
>>「VBlank待ちの直後にビデオメモリの書き換えをするのはそういう理由があったんですか。 」
>>(レトロ)ゲームのプログラムに興味ある人はみんな知ってるよ。Direct3Dだって垂直同期の概念あるでしょ。
”NMI”という言葉を知っていても言葉を忘れていたのと、使い方を知らないからです。
>>lda なんたら
>>cmp #0
>>beq または bne
これは言えてますね。単純な頭なので、単純に考えていました。
>>・jsr Pad_Check は 他人 >>236 の? 算術sbc使ってるから変だと思ったけど
はい、他人のソースを使いました。
>>パッと見でこれだけミスしてて、どこにまともに動く要素があるわけ?氷山の一角だろう。
>>今回も 「.dw 0; VBlank割り込み」見てまたお前かとやる気を失ったけど、BLOCK.symが同梱されていたので捗った。
えーとこれも失敗してしまいましたね。ファミコン開発は思ったより難しいんですね。
>>278 :名前は開発中のものです。:2014/06/08(日) 20:24:54.45 ID:p43hB49G
>>NMI使えない、各種メモリやレジスタの初期化していない奴って
>>ギコ猫の前半章のコピペ&拡張だったんだな
>>後半章ばかり見てたから原因がわからなかった>>221
はい、そうです。ギコ猫の前半章の主に9章のコピペです。
>>言い訳にもならないけどね
>>他人のソース調べればわかることだから
他人のソースを調べるという事がどんなに重要か分かりました。
>>後半章のソースも問題あり
>>270
>>指摘されると、「私は〜知ってましたが、あえてやりませんでした」 じゃなんでNMI使えないの?
>>「VBlank待ちの直後にビデオメモリの書き換えをするのはそういう理由があったんですか。 」
>>(レトロ)ゲームのプログラムに興味ある人はみんな知ってるよ。Direct3Dだって垂直同期の概念あるでしょ。
”NMI”という言葉を知っていても言葉を忘れていたのと、使い方を知らないからです。
282131
2014/06/09(月) 18:57:30.62ID:Sx48Gggw 変数に
>>・ 誤 lda APU_REG1_FRQCHG_ON
>>正 lda #APU_REG1_FRQCHG_ON
の違いって何ですか?
>>・ 誤 lda APU_REG1_FRQCHG_ON
>>正 lda #APU_REG1_FRQCHG_ON
の違いって何ですか?
283名前は開発中のものです。
2014/06/09(月) 20:17:24.32ID:dEpln6L7 実機で検証してくれたことに対して
>本当に実機で試したのか知りたいですが
って何気に失礼だよなこいつ
>本当に実機で試したのか知りたいですが
って何気に失礼だよなこいつ
284266
2014/06/09(月) 20:51:16.15ID:oKltYKig >>280
> ”NMI”という言葉を知っていても言葉を忘れていたのと、使い方を知らないからです。
131さんには申し訳ないが、
まずは、WikipediaでCPUの割り込みについて勉強してきた上で
ttp://ja.wikipedia.org/wiki/%e5%89%b2%e3%82%8a%e8%be%bc%e3%81%bf_(%e3%82%b3%e3%83%b3%e3%83%94%e3%83%a5%e3%83%bc%e3%82%bf)
1) NMIとVBlankの違い
2) ファミコンのプログラミングでNMIとVBlankを混在しても話が通る理由
3) .org $FFFA .dw 0 .dw Start .dw 0 というソースを見た他人が呆れる理由
を、自分なりの理解や考えで説明してもらえるかな。
> ”NMI”という言葉を知っていても言葉を忘れていたのと、使い方を知らないからです。
131さんには申し訳ないが、
まずは、WikipediaでCPUの割り込みについて勉強してきた上で
ttp://ja.wikipedia.org/wiki/%e5%89%b2%e3%82%8a%e8%be%bc%e3%81%bf_(%e3%82%b3%e3%83%b3%e3%83%94%e3%83%a5%e3%83%bc%e3%82%bf)
1) NMIとVBlankの違い
2) ファミコンのプログラミングでNMIとVBlankを混在しても話が通る理由
3) .org $FFFA .dw 0 .dw Start .dw 0 というソースを見た他人が呆れる理由
を、自分なりの理解や考えで説明してもらえるかな。
285131
2014/06/09(月) 21:16:45.44ID:Sx48Gggw 言い訳になっちゃうかわかりませんが、できたら明日の朝に書き込みます。
ホント自分は基地外なのと、頭が痛いし熱いのでこのままほおっておくと
風邪をこじらすので、すみませんが、失礼します。
リアルが充実してる人たちがうらやましいです。
ホント自分は基地外なのと、頭が痛いし熱いのでこのままほおっておくと
風邪をこじらすので、すみませんが、失礼します。
リアルが充実してる人たちがうらやましいです。
287名前は開発中のものです。
2014/06/09(月) 21:32:44.17ID:fvy3sA+P 頭の悪い高校生なんだから察してやれよ
こいつ高校の名前を自分から暴露するような奴だぞ
しかしまぁ基地外って自覚あるなら5年ぐらいROMってればいいのに
色々と知識が欠けすぎててこのスレで質問できるレベルにすら至ってないわ
こいつ高校の名前を自分から暴露するような奴だぞ
しかしまぁ基地外って自覚あるなら5年ぐらいROMってればいいのに
色々と知識が欠けすぎててこのスレで質問できるレベルにすら至ってないわ
288名前は開発中のものです。
2014/06/09(月) 21:38:04.12ID:dEpln6L7 自分の理解不足を棚に上げて正常動作の定義がおかしいなどと言い張るのは
自分を肯定するために社会を逆恨みする典型的秋葉原通り魔みたいな思考回路だよな
近所でネコの惨殺死体がなければいいけど
自分を肯定するために社会を逆恨みする典型的秋葉原通り魔みたいな思考回路だよな
近所でネコの惨殺死体がなければいいけど
289名前は開発中のものです。
2014/06/10(火) 03:34:36.85ID:OhR24Wq5 多くのエミュレータの再現目標は「市販ゲームが動作すること」であって
不完全なプログラムが「実機と同じように動作しない」というレベルでの再現には至っていません
ファミコン程度の規模であっても完全再現するエミュレータはいまだに存在していません
たとえばファミコンでは電源投入時にRAMの内容が不定であり
すべての市販ソフトでは確実に動作させるために必ずRAMを上書き消去するなど、必ずそれを前提とした実装がされています
しかしエミュレータの中には通電直後のRAMの初期値が&H00に設定されているものがあり
初期値が何であれRAM内容を消去するように実装されている市販ゲームは問題なく動作しますが
RAMの初期値が&H00になっているものであるとして組まれた不完全なプログラムだと
そのエミュレータでは動作するが実機では意図した動作をしないという問題に陥ってしまいます
同様ににVBlank期間が実機より長めに設定されているエミュレータも存在しています
VBlank期間が長いことで市販ゲームを動作させることに影響はありませんが
そのエミュレータ固有のVBlank期間を基準として作成された自作プログラムは
実機上だとプログラマの意図通りの動作をしないことになります
このようにエミュレータ上のほぼすべての挙動において、実機ほどシビアではなく動作してしまう方向に緩く設計・再現されているため
実機の挙動を意識せずにエミュレータを基準として作成された自作プログラムの多くは
結果として実機で動かないものになってしまいます
不完全なプログラムが「実機と同じように動作しない」というレベルでの再現には至っていません
ファミコン程度の規模であっても完全再現するエミュレータはいまだに存在していません
たとえばファミコンでは電源投入時にRAMの内容が不定であり
すべての市販ソフトでは確実に動作させるために必ずRAMを上書き消去するなど、必ずそれを前提とした実装がされています
しかしエミュレータの中には通電直後のRAMの初期値が&H00に設定されているものがあり
初期値が何であれRAM内容を消去するように実装されている市販ゲームは問題なく動作しますが
RAMの初期値が&H00になっているものであるとして組まれた不完全なプログラムだと
そのエミュレータでは動作するが実機では意図した動作をしないという問題に陥ってしまいます
同様ににVBlank期間が実機より長めに設定されているエミュレータも存在しています
VBlank期間が長いことで市販ゲームを動作させることに影響はありませんが
そのエミュレータ固有のVBlank期間を基準として作成された自作プログラムは
実機上だとプログラマの意図通りの動作をしないことになります
このようにエミュレータ上のほぼすべての挙動において、実機ほどシビアではなく動作してしまう方向に緩く設計・再現されているため
実機の挙動を意識せずにエミュレータを基準として作成された自作プログラムの多くは
結果として実機で動かないものになってしまいます
290名前は開発中のものです。
2014/06/10(火) 03:38:20.96ID:OhR24Wq5 マッパーが電源投入時に選択するバンクですが
通常、実機ではハードワイヤードされている最終バンク以外の選択可能バンクは第1バンクが選択されるケースがほとんどですが
多くのエミュレータはなぜか先頭から順番通り昇順に選択されます
市販プログラムは必ず初期バンクを設定するように実装されているため問題なく動作しますが
バンクの並びをアテにした不完全なプログラムはエミュレータでは動くが実機では動かないというケースが起こります
>>240のプログラムはCHRバンクの初期設定がされていないので
CHRバンクが未設定でも順並びに選択されるようなエミュレータでは問題なく動作しているように見えますが
実機だとスプライト側のバンクがすべてバンク0になっているので、宝石落下時のスプライトがBG用のCHRで表示されてしまっています
通常、実機ではハードワイヤードされている最終バンク以外の選択可能バンクは第1バンクが選択されるケースがほとんどですが
多くのエミュレータはなぜか先頭から順番通り昇順に選択されます
市販プログラムは必ず初期バンクを設定するように実装されているため問題なく動作しますが
バンクの並びをアテにした不完全なプログラムはエミュレータでは動くが実機では動かないというケースが起こります
>>240のプログラムはCHRバンクの初期設定がされていないので
CHRバンクが未設定でも順並びに選択されるようなエミュレータでは問題なく動作しているように見えますが
実機だとスプライト側のバンクがすべてバンク0になっているので、宝石落下時のスプライトがBG用のCHRで表示されてしまっています
291名前は開発中のものです。
2014/06/10(火) 05:50:34.76ID:DX+Q254R 初期化処理って重要なんだなぁ
292131
2014/06/10(火) 07:44:01.93ID:rVY6XcCX >>287 :名前は開発中のものです。:2014/06/09(月) 21:32:44.17 ID:fvy3sA+P
>>頭の悪い高校生なんだから察してやれよ
>>こいつ高校の名前を自分から暴露するような奴だぞ
>>しかしまぁ基地外って自覚あるなら5年ぐらいROMってればいいのに
>>色々と知識が欠けすぎててこのスレで質問できるレベルにすら至ってないわ
以前チャタリングに関して質問したり、ネームテーブルが固定画面で960もあるから
どうやって書き込むのかと質問した者でもあるのですが、それではマズイんですか。
あと、これはおかしい話なんですが、このスレッドのパート1からROMってました。
もう10年も前の話ですよね。
>>288 :名前は開発中のものです。:2014/06/09(月) 21:38:04.12 ID:dEpln6L7
>>自分の理解不足を棚に上げて正常動作の定義がおかしいなどと言い張るのは
>>自分を肯定するために社会を逆恨みする典型的秋葉原通り魔みたいな思考回路だよな
>>近所でネコの惨殺死体がなければいいけど
猫や犬は可愛いので、そんな事しません。小さい子供に馬鹿にされても黙ってしまうような
性格なので。あと、その時は、自分でも実力が足りない自覚が無かったんです。
逆ギレ云々言った人たちには悪いですが、切れたのは事実ですが、本音と建前を
使い分けるのが日本人の美徳じゃないですかね。
そもそも、逆ギレと決めつけるあたり、あなたたちは
叱ったのではなく、怒ったと考えてよろしいでしょうか。
>>284
途中ですみませんが、
1)NMIは、ハードウェア割り込みの一種でマスク不可能な割り込み、
VBlankはブラウン管の電子銃が下端から上端に戻る際の割り込み。
>>頭の悪い高校生なんだから察してやれよ
>>こいつ高校の名前を自分から暴露するような奴だぞ
>>しかしまぁ基地外って自覚あるなら5年ぐらいROMってればいいのに
>>色々と知識が欠けすぎててこのスレで質問できるレベルにすら至ってないわ
以前チャタリングに関して質問したり、ネームテーブルが固定画面で960もあるから
どうやって書き込むのかと質問した者でもあるのですが、それではマズイんですか。
あと、これはおかしい話なんですが、このスレッドのパート1からROMってました。
もう10年も前の話ですよね。
>>288 :名前は開発中のものです。:2014/06/09(月) 21:38:04.12 ID:dEpln6L7
>>自分の理解不足を棚に上げて正常動作の定義がおかしいなどと言い張るのは
>>自分を肯定するために社会を逆恨みする典型的秋葉原通り魔みたいな思考回路だよな
>>近所でネコの惨殺死体がなければいいけど
猫や犬は可愛いので、そんな事しません。小さい子供に馬鹿にされても黙ってしまうような
性格なので。あと、その時は、自分でも実力が足りない自覚が無かったんです。
逆ギレ云々言った人たちには悪いですが、切れたのは事実ですが、本音と建前を
使い分けるのが日本人の美徳じゃないですかね。
そもそも、逆ギレと決めつけるあたり、あなたたちは
叱ったのではなく、怒ったと考えてよろしいでしょうか。
>>284
途中ですみませんが、
1)NMIは、ハードウェア割り込みの一種でマスク不可能な割り込み、
VBlankはブラウン管の電子銃が下端から上端に戻る際の割り込み。
293名前は開発中のものです。
2014/06/10(火) 08:52:45.01ID:FVxA7Fkb NMIとVBlの正確なタイミングが分からないんだよな。
同時だと動かない市販タイトルがある。
同時だと動かない市販タイトルがある。
294名前は開発中のものです。
2014/06/10(火) 11:40:26.64ID:CuFktdyJ 10年もこのスレ見ててそのレベル・・・そして技術資料すら理解できない英語力・・・
最早かわいそう過ぎて同情するわ・・・
最早かわいそう過ぎて同情するわ・・・
295131
2014/06/10(火) 12:27:03.05ID:21YAZMo1 他のパソコンから書き込みです。
なんというか、僕が素直じゃなくてしかも怒りっぽくて
先人の知恵を学ばないという姿勢が悪いと思っています。
低能という言葉がありますが、まさに自分がそうだと思っていますよ。
自他ともに認める低能です。ファミコンのCPUより遅い動作周波数
なので。>>246は撤回します。まことにすみませんでした。
ごめんなさい
なんというか、僕が素直じゃなくてしかも怒りっぽくて
先人の知恵を学ばないという姿勢が悪いと思っています。
低能という言葉がありますが、まさに自分がそうだと思っていますよ。
自他ともに認める低能です。ファミコンのCPUより遅い動作周波数
なので。>>246は撤回します。まことにすみませんでした。
ごめんなさい
296131
2014/06/10(火) 18:17:23.08ID:rVY6XcCX >>284
2)
VBlankに入った時に必ずNMIの割り込みが訪れるからでしょうか
3)
本来ならばメインループにNMIを使うべきだからでしょうか
VBlankにポーリング?という言葉を初めて知りました。
2)
VBlankに入った時に必ずNMIの割り込みが訪れるからでしょうか
3)
本来ならばメインループにNMIを使うべきだからでしょうか
VBlankにポーリング?という言葉を初めて知りました。
297名前は開発中のものです。
2014/06/10(火) 22:38:25.24ID:iI+cGjJO >>245
ところで
NES Assembler (v3.21, 2005/04/09, Denki Release)
これどこで手に入れたの?
かなりレアなバージョンぽくて見つからない。
RAMの初期化、スプライトメモリの初期化
以前誰かに指導してるでしょ、あちこちの他人ソースでも示されているし
スプライトONにしているデモプログラムでスプライトメモリ初期化してないのは論外なんだよ
だからG-NESのスプライトメモリビュワー使えって
未初期化メモリにアクセスしたら他の言語のコンパイラは警告出すでしょ
逆にファミコンほどの原始的なハードで、なぜ0フィルされると思った?
0フィル傾向が強いエミュだってハードリセット、ソフトリセットで挙動違うわけだしね
ところで
NES Assembler (v3.21, 2005/04/09, Denki Release)
これどこで手に入れたの?
かなりレアなバージョンぽくて見つからない。
RAMの初期化、スプライトメモリの初期化
以前誰かに指導してるでしょ、あちこちの他人ソースでも示されているし
スプライトONにしているデモプログラムでスプライトメモリ初期化してないのは論外なんだよ
だからG-NESのスプライトメモリビュワー使えって
未初期化メモリにアクセスしたら他の言語のコンパイラは警告出すでしょ
逆にファミコンほどの原始的なハードで、なぜ0フィルされると思った?
0フィル傾向が強いエミュだってハードリセット、ソフトリセットで挙動違うわけだしね
298名前は開発中のものです。
2014/06/10(火) 23:25:46.23ID:DX+Q254R HuC v3.21付属のやつじゃねえかな
299名前は開発中のものです。
2014/06/10(火) 23:48:02.78ID:iI+cGjJO 見つけた
300名前は開発中のものです。
2014/06/11(水) 00:54:21.08ID:vuASjJOE 1)Vblankは厳密には割り込みそのものではない。語源を考えればわかる。
あとマスク不可能な割り込みでは説明不足。
2)ファミコンにおいてNMIは必ず訪れるものか。
もし必ず訪れるのならあんたが今まで書いてきたプログラムはどうなる。
$0000から命令を実行しまくる羽目になってるだろ。
3)それならばなぜNMIを使うべきか。
全体的に不正解および説明不足そして調査不足、理解や考えも不足。
わからない言葉があったらまず目の前のPCで調べろ。
あと自虐がまるでへそを曲げた子供のようでみっともない。自虐は反省とは違う。
しばらくROMって頭冷やすことをおすすめする。
あとマスク不可能な割り込みでは説明不足。
2)ファミコンにおいてNMIは必ず訪れるものか。
もし必ず訪れるのならあんたが今まで書いてきたプログラムはどうなる。
$0000から命令を実行しまくる羽目になってるだろ。
3)それならばなぜNMIを使うべきか。
全体的に不正解および説明不足そして調査不足、理解や考えも不足。
わからない言葉があったらまず目の前のPCで調べろ。
あと自虐がまるでへそを曲げた子供のようでみっともない。自虐は反省とは違う。
しばらくROMって頭冷やすことをおすすめする。
301131
2014/06/11(水) 04:31:31.45ID:FDPL1IKA 分かりました。しばらくROMることにします。
ただ、僕は本当に低能ですよ。何しろ、IQが69なんで
(test the nation)
ただ、僕は本当に低能ですよ。何しろ、IQが69なんで
(test the nation)
302名前は開発中のものです。
2014/06/11(水) 19:10:46.06ID:HuzB/5/t 言葉選べない奴ってみっともないなぁ
上級者気取ってふんぞり返って偉そうに他人に説教しとるが相変わらずガキ丸出し
これが一人だけやってるんだから目立つわな
いいかげんさあ、そのチンピラみたいな恥ずかしい態度で人に接するのはおよしなさいよ
上級者気取ってふんぞり返って偉そうに他人に説教しとるが相変わらずガキ丸出し
これが一人だけやってるんだから目立つわな
いいかげんさあ、そのチンピラみたいな恥ずかしい態度で人に接するのはおよしなさいよ
303名前は開発中のものです。
2014/06/11(水) 19:14:38.42ID:HuzB/5/t まあ、こういう苦言を呈してあげても
前みたいに自分の口汚さを正当化するための言い訳しか言わないで
何が悪いのか理解出来ないまま同じ事を繰り返し続けるんだろうけど
他人に反省促す前に、自分がまず反省して態度改めなよ
前みたいに自分の口汚さを正当化するための言い訳しか言わないで
何が悪いのか理解出来ないまま同じ事を繰り返し続けるんだろうけど
他人に反省促す前に、自分がまず反省して態度改めなよ
304名前は開発中のものです。
2014/06/11(水) 20:42:36.74ID:QsOFOWgt 多重人格らしき
”リバーシ君” が湧いてから同時期湧いて来た子たち
”YY-CHRとNESASMが使いづらい君”
”NESASMが難しいからC言語で組もうよ君”
”iNESヘッダや.incbinのことはわからないけど、nesdevの仕様書すべて読んできます君”
能書き”ダブラ君”
三日坊主の”まとめwiki君”
”DPCMの仕様教えて君”
”www.dotup.org大好き君”
スタックぶちこわしてても ”PPU制御レジスタのタイミング等も問題無いはずなのに。 君”
”デバッガ使えません君”
こんな初歩の初歩教えるのが上級者扱いなのか
だから自演て言われてるのに
ゴミみたいな不良動作のプログラムのアップロードに対し
わずか数時間で
”fceuで陽性かくにん よかった”
とレスが付くのも特徴
追い込まれると
〜とは別人だけど、と枕詞をつけて自己弁護
”リバーシ君” が湧いてから同時期湧いて来た子たち
”YY-CHRとNESASMが使いづらい君”
”NESASMが難しいからC言語で組もうよ君”
”iNESヘッダや.incbinのことはわからないけど、nesdevの仕様書すべて読んできます君”
能書き”ダブラ君”
三日坊主の”まとめwiki君”
”DPCMの仕様教えて君”
”www.dotup.org大好き君”
スタックぶちこわしてても ”PPU制御レジスタのタイミング等も問題無いはずなのに。 君”
”デバッガ使えません君”
こんな初歩の初歩教えるのが上級者扱いなのか
だから自演て言われてるのに
ゴミみたいな不良動作のプログラムのアップロードに対し
わずか数時間で
”fceuで陽性かくにん よかった”
とレスが付くのも特徴
追い込まれると
〜とは別人だけど、と枕詞をつけて自己弁護
305266
2014/06/12(木) 01:31:23.63ID:VinxFlKC >>292 >>296
1)
NMIの説明はまぁ正解。300さんの指摘の通りVBlankを割り込みと言い切るのは誤り。
NMIは割り込みの種類を示す言葉でVBlankは映像信号に関する言葉であり、そもそもカテゴリが違う。
2)
私が考えていた正解は、
PPUから出るVBlank期間を示す信号線が、CPUのNMI割り込みの入力ピンにつながっているから
300さんが「必ず訪れる」は誤りと言っているのは、VBlank期間に入ったときに
VBlank期間を示す信号線に信号を出すか出さないかをPPUで制御できるため
3)
NMIを使用するかどうかは別に問題ではない。
NMIとIRQのベクタ(割り込み時に実行されるアドレス)に0が設定されているから。
PPUなどのレジスタの設定を誤り割込みを受け付ける状態になった場合に
何が書かれているかわからない0番地をプログラムが走ることになり、
安全性を考慮しておらず、知識不足であることが読み取れるから。
割り込みを使わないのであれば、すぐに rti で戻るルーチンのアドレスをベクタに設定するべき。
Nmi:
rti
Irq:
rti
.org $FFFA
.dw Nmi
.dw Start
.dw Irq
1)
NMIの説明はまぁ正解。300さんの指摘の通りVBlankを割り込みと言い切るのは誤り。
NMIは割り込みの種類を示す言葉でVBlankは映像信号に関する言葉であり、そもそもカテゴリが違う。
2)
私が考えていた正解は、
PPUから出るVBlank期間を示す信号線が、CPUのNMI割り込みの入力ピンにつながっているから
300さんが「必ず訪れる」は誤りと言っているのは、VBlank期間に入ったときに
VBlank期間を示す信号線に信号を出すか出さないかをPPUで制御できるため
3)
NMIを使用するかどうかは別に問題ではない。
NMIとIRQのベクタ(割り込み時に実行されるアドレス)に0が設定されているから。
PPUなどのレジスタの設定を誤り割込みを受け付ける状態になった場合に
何が書かれているかわからない0番地をプログラムが走ることになり、
安全性を考慮しておらず、知識不足であることが読み取れるから。
割り込みを使わないのであれば、すぐに rti で戻るルーチンのアドレスをベクタに設定するべき。
Nmi:
rti
Irq:
rti
.org $FFFA
.dw Nmi
.dw Start
.dw Irq
306名前は開発中のものです。
2014/06/12(木) 01:36:18.33ID:VinxFlKC307名前は開発中のものです。
2014/06/12(木) 02:17:39.78ID:VinxFlKC >>301
ROMてても知識は身に付かないだろうし、お題を出すのでプログラミングの経験を積んでみてはどうだろうか。
第1ステップ
スタック、メモリ、PPUなどの初期化を行い、VBlank待ちのループを行う、基本のプログラムを実装する。
NMIの割り込みも実装し、NMIの割り込みの度に、$ffのメモリを1増加させる。
割り込み処理でないVBlank待ちのループでは、$ffのメモリを監視して255から0になる度に$feのメモリを1増加させる。
エミュレータのメモリビュアーで約4秒ごとに$feのメモリの値が1増加することを確認する。
第2ステップ
BG画面を16x16サイズのブロックで画面いっぱいに埋める。
パレットの設定を行う。
画面にゴミが出ないように全スプライトを画面外(Y>=240)の位置に表示する。
第1ステップのプログラムを改良する。
割り込み処理ではないVBlank待ちのループで、VRAMに書き込みたいデータを用意してバッファに格納する。
NMI割り込みで、スプライトデータのDMA転送の実行とバッファに格納されたデータをVRAMに書き込む処理を行う。
プログラムを書く際に、他人のソースを参照するのは良いが、コピペは絶対行わないこと。
必ず目で見て手打ちすること。
書いたソースは、何度も読み直して、処理を説明できるぐらいまで理解すること。
プログラムが出来たら内容をレビューしたいので、批判にめげずに公開して欲しいと思う。
ROMてても知識は身に付かないだろうし、お題を出すのでプログラミングの経験を積んでみてはどうだろうか。
第1ステップ
スタック、メモリ、PPUなどの初期化を行い、VBlank待ちのループを行う、基本のプログラムを実装する。
NMIの割り込みも実装し、NMIの割り込みの度に、$ffのメモリを1増加させる。
割り込み処理でないVBlank待ちのループでは、$ffのメモリを監視して255から0になる度に$feのメモリを1増加させる。
エミュレータのメモリビュアーで約4秒ごとに$feのメモリの値が1増加することを確認する。
第2ステップ
BG画面を16x16サイズのブロックで画面いっぱいに埋める。
パレットの設定を行う。
画面にゴミが出ないように全スプライトを画面外(Y>=240)の位置に表示する。
第1ステップのプログラムを改良する。
割り込み処理ではないVBlank待ちのループで、VRAMに書き込みたいデータを用意してバッファに格納する。
NMI割り込みで、スプライトデータのDMA転送の実行とバッファに格納されたデータをVRAMに書き込む処理を行う。
プログラムを書く際に、他人のソースを参照するのは良いが、コピペは絶対行わないこと。
必ず目で見て手打ちすること。
書いたソースは、何度も読み直して、処理を説明できるぐらいまで理解すること。
プログラムが出来たら内容をレビューしたいので、批判にめげずに公開して欲しいと思う。
308名前は開発中のものです。
2014/06/12(木) 06:23:30.12ID:WH6q4E6P なんでこいつが仕切っとるの?
309131
2014/06/12(木) 16:17:30.84ID:kfJUEFGs 書き込みたい気持ちはありますが、大分経って事態が鎮静化
してから書き込みたいです。あと、少なくとも今から
100レス程度は様子を見ながら、今から同時にお題を解いてみます。
というのも技術的な指導ならゲーム開発技術板のスレッドなので分かります。
しかし、自分の未熟な部分があるのは自分でも分かるのですが、
明らかに何度も自分の人格を否定していてスレ違いになってるのもあります。
してから書き込みたいです。あと、少なくとも今から
100レス程度は様子を見ながら、今から同時にお題を解いてみます。
というのも技術的な指導ならゲーム開発技術板のスレッドなので分かります。
しかし、自分の未熟な部分があるのは自分でも分かるのですが、
明らかに何度も自分の人格を否定していてスレ違いになってるのもあります。
310131
2014/06/12(木) 16:19:26.08ID:kfJUEFGs それがどうした?悪いのはお前だろと言われればそうなのですが
これが何度も続くようなら、明らかにいじめとしか思えないのです。
いじめと思うのは間違っていると思うのなら、どうして簡単に何度も
いろんな欠点や粗を探してこうも傷つけたがるのですか?
あと、自演と言っている人へ、
自演をしているように見えるのは、明らかにおかしいですね。
IPアドレスを2chの運営元に頼んでもらって調べれば分かる
とは思います。IPアドレスが分かるという事は、書き込んだ場所も
特定されます。
ファミコンのプログラムを公開する書き込んでから家から出かけて
帰ってきてから同じパソコンで書き込んだ事くらい見抜けると思うのですが。
これが何度も続くようなら、明らかにいじめとしか思えないのです。
いじめと思うのは間違っていると思うのなら、どうして簡単に何度も
いろんな欠点や粗を探してこうも傷つけたがるのですか?
あと、自演と言っている人へ、
自演をしているように見えるのは、明らかにおかしいですね。
IPアドレスを2chの運営元に頼んでもらって調べれば分かる
とは思います。IPアドレスが分かるという事は、書き込んだ場所も
特定されます。
ファミコンのプログラムを公開する書き込んでから家から出かけて
帰ってきてから同じパソコンで書き込んだ事くらい見抜けると思うのですが。
311名前は開発中のものです。
2014/06/12(木) 19:04:44.04ID:W0ti7vxN それにしてもやけに静岡県民が多いな
自演に間違いないな不自然すぎるわ
自演に間違いないな不自然すぎるわ
312名前は開発中のものです。
2014/06/12(木) 20:14:34.35ID:+ww++sAc あと100レスと言わず一生ROMってればいいのに
そうすりゃスレも荒れずに済む
そうすりゃスレも荒れずに済む
313131
2014/06/12(木) 22:17:28.55ID:kfJUEFGs まってください。静岡県民が多いのは、俺が周囲から基地外呼ばわり
されてるのと、症状のせいだと思いますよ。
それと、自演と決めつるのはまだ早いです。なぜなら、
専門用語を知らない人間が自分を弁護できると思いますか?
そして、恐らくその症状のせいで、うざったく思うから
このスレで叩かれているのだと思います
これで最後にします。100レス待ちます
されてるのと、症状のせいだと思いますよ。
それと、自演と決めつるのはまだ早いです。なぜなら、
専門用語を知らない人間が自分を弁護できると思いますか?
そして、恐らくその症状のせいで、うざったく思うから
このスレで叩かれているのだと思います
これで最後にします。100レス待ちます
314名前は開発中のものです。
2014/06/13(金) 06:24:29.34ID:6Pgo1qVH いいから>>307が終わるまで書きこみを控えてくれ・・
315名前は開発中のものです。
2014/06/13(金) 16:40:28.64ID:vJRDBdqC スレ違いかもしれないけど、ディスクカードをromに焼くことができる?
316名前は開発中のものです。
2014/06/13(金) 19:00:31.08ID:KxCbS2Qo317名前は開発中のものです。
2014/06/13(金) 20:43:27.55ID:CSwUA4nC >>316
機械語レベルの理解力があれば、できる?
機械語レベルの理解力があれば、できる?
318名前は開発中のものです。
2014/06/13(金) 21:03:18.07ID:KxCbS2Qo 理解力と相当な根気が要るだろうな
絶対アドレス参照の命令で$6000以降参照のものをすべて書き換えなきゃいけないのだから
絶対アドレス参照の命令で$6000以降参照のものをすべて書き換えなきゃいけないのだから
319名前は開発中のものです。
2014/06/13(金) 21:17:05.99ID:r1M/KsAU >>318
ディスクシステムの片面の容量は64Kバイト?64Kビット?
ディスクシステムの片面の容量は64Kバイト?64Kビット?
320名前は開発中のものです。
2014/06/13(金) 21:36:12.04ID:JJAfyk3S ディスクシステムの仕組みも理解する必要があるだろう。
321名前は開発中のものです。
2014/06/13(金) 21:36:22.79ID:KxCbS2Qo 64Kバイトといわれている 実際にはもっと少ないけど
というか厳密には1バイト単位のような定まった容量はなかったはず
もし片面8Kバイト(64Kビット)だとしたらドンキーコングすら収まらないよ
というかこれぐらい調べれば出てくるのでまず調べようね
というか厳密には1バイト単位のような定まった容量はなかったはず
もし片面8Kバイト(64Kビット)だとしたらドンキーコングすら収まらないよ
というかこれぐらい調べれば出てくるのでまず調べようね
322名前は開発中のものです。
2014/06/13(金) 22:34:15.19ID:AgN9/sjS >>321
ディスクシステムのソフトには、名作が多いのでリンクの冒険、ドラキュラ2など海外版を所有してますが、ディスクシステムでしか遊べないソフトがあるので、ROM化出来たらなと思いました。音源も積んで。って誰かやってないですかね?
ディスクシステムのソフトには、名作が多いのでリンクの冒険、ドラキュラ2など海外版を所有してますが、ディスクシステムでしか遊べないソフトがあるので、ROM化出来たらなと思いました。音源も積んで。って誰かやってないですかね?
323名前は開発中のものです。
2014/06/13(金) 23:03:40.54ID:KxCbS2Qo かつてmdc5linkerというものがあった(ROM化の際にはこれの個別パッチが参考になるかもしれない)
ただし悪用が多すぎてサポートは終了した、ディスク>カセット変換したものを売りさばくような輩が続出した
事実、ある時期ヤフオクで本来ディスクでしか出ていないソフトがカセットとして出品されている例が多数確認できた
というか普通にディスクシステムでやれば?
一体ROM化ってなんのため?ディスク持ってるならディスクシステムでやればいいじゃん
ROM化前提なら吸出しも完了してるだろうしバックアップも万全、なのにあえてROM化しようとする意図がわからない
どの道、音源までサポートした上でROM化するにはいろんな知識が要る
ディスク音源と互換性のあるチップは存在しないため、RAMアダプタ内のもの(ただし非常に大きい、64pinDipだったかな?)を使用するか、もしくは
新たにFPGAなどのPLDを使って実装するか・・・方法はあるがディスク音源如きにそこまでする人がいるかどうか
ただし悪用が多すぎてサポートは終了した、ディスク>カセット変換したものを売りさばくような輩が続出した
事実、ある時期ヤフオクで本来ディスクでしか出ていないソフトがカセットとして出品されている例が多数確認できた
というか普通にディスクシステムでやれば?
一体ROM化ってなんのため?ディスク持ってるならディスクシステムでやればいいじゃん
ROM化前提なら吸出しも完了してるだろうしバックアップも万全、なのにあえてROM化しようとする意図がわからない
どの道、音源までサポートした上でROM化するにはいろんな知識が要る
ディスク音源と互換性のあるチップは存在しないため、RAMアダプタ内のもの(ただし非常に大きい、64pinDipだったかな?)を使用するか、もしくは
新たにFPGAなどのPLDを使って実装するか・・・方法はあるがディスク音源如きにそこまでする人がいるかどうか
324名前は開発中のものです。
2014/06/13(金) 23:55:45.03ID:D3ve8EiV >>323
ディスクシステムは、ツインファミコンもそうですが、ベルトの劣化もありますし、ヘッドも劣化するでしょう。
ディスクシステムは、ツインファミコンもそうですが、ベルトの劣化もありますし、ヘッドも劣化するでしょう。
325名前は開発中のものです。
2014/06/14(土) 00:13:40.26ID:dYYokVoB >>324
http://fcs.main.jp/archives/fcs_road/Diskbelt/diskbelt2.html
知っているかもしれないがこういう方法もある。
バックアップについてはエミュが嫌なら、FDSLOADRという、
PCを仮想ディスクドライブとして使えるようにするソフトがある。ただ数年前の記憶では、相当PCの機種を選ぶソフトだった。
それからDOSベースのソフトのため現代のNT系OSじゃ動かないから、古いWin9x系の動くPCが必要になる。
更にRAMアダプタとの接続のためPCが双方向通信可能なパラレルポートを持っている必要がある。
これを使うとPCに存在するFDSファイルをRAMアダプタに転送できる。
http://fcs.main.jp/archives/fcs_road/Diskbelt/diskbelt2.html
知っているかもしれないがこういう方法もある。
バックアップについてはエミュが嫌なら、FDSLOADRという、
PCを仮想ディスクドライブとして使えるようにするソフトがある。ただ数年前の記憶では、相当PCの機種を選ぶソフトだった。
それからDOSベースのソフトのため現代のNT系OSじゃ動かないから、古いWin9x系の動くPCが必要になる。
更にRAMアダプタとの接続のためPCが双方向通信可能なパラレルポートを持っている必要がある。
これを使うとPCに存在するFDSファイルをRAMアダプタに転送できる。
326名前は開発中のものです。
2014/06/14(土) 00:21:55.47ID:zzfPZdkB 最近FDSLOADRrの上位版のようなfdsloadersaverを作った方がいるよ
327名前は開発中のものです。
2014/06/14(土) 00:25:39.56ID:TXG/RYzX >>325
アドバイスありがとうございます。今思いついたんですが、ディスクのRAMアダプターを改造してMicroSDカードに入っているディスクのイメージを転送できるに出来たらいいのになあ
アドバイスありがとうございます。今思いついたんですが、ディスクのRAMアダプターを改造してMicroSDカードに入っているディスクのイメージを転送できるに出来たらいいのになあ
328名前は開発中のものです。
2014/06/14(土) 16:29:21.64ID:+sFuyt6O 機械語の知識(開発ができるレベル)と、
論理回路の知識(設計ができるレベル)に加えて、
電子工作を行えるスキルが必要
あと、英語力(データシートとか、ほとんど英語)。
論理回路の知識(設計ができるレベル)に加えて、
電子工作を行えるスキルが必要
あと、英語力(データシートとか、ほとんど英語)。
329名前は開発中のものです。
2014/06/14(土) 21:38:32.26ID:L1L59kK3 131氏は何が嫌われてるか分かってないんだろうな
何か指摘されたら「あ、はい俺が悪いですさて、」くらいの勢いで
全く態度を変えず話を続けるのがどれだけ人を無視した行為か
理解できないんだろうからもう書き込むなって言われてるんだよ
何か指摘されたら「あ、はい俺が悪いですさて、」くらいの勢いで
全く態度を変えず話を続けるのがどれだけ人を無視した行為か
理解できないんだろうからもう書き込むなって言われてるんだよ
330名前は開発中のものです。
2014/06/17(火) 15:26:48.71ID:6w/HBkb5 なんだそりゃ
ヤクザの因縁レベルだな
キチガイに粘着されて可哀想
ヤクザの因縁レベルだな
キチガイに粘着されて可哀想
331名前は開発中のものです。
2014/06/22(日) 12:04:05.94ID:FYXz9cFX Vblank(NMI)発生待ちじゃなくてVblank(NMI)終了待ちの書き方がわからない。
$2002読めばVblank中でも即座にスキャンラインの頭に戻るのかな?
$2002読めばVblank中でも即座にスキャンラインの頭に戻るのかな?
332名前は開発中のものです。
2014/06/22(日) 12:46:49.11ID:RkNLcYOw 普通は終了待ちなんてしないと思うが・・・
あるとすればフレームIRQをVblank終了間際に起こすようにするとか、かな?
試していないからできるかどうかわからないけど
あるとすればフレームIRQをVblank終了間際に起こすようにするとか、かな?
試していないからできるかどうかわからないけど
333名前は開発中のものです。
2014/06/22(日) 15:38:33.12ID:cAYbetgY あのバカはまだデバッガ扱えないんだな
他人のソースを読む気もない
他人のソースを読む気もない
334名前は開発中のものです。
2014/06/22(日) 21:47:58.16ID:SUkUlJAf 何だかんだ、がんばっているんだし応援しようと思う
完成を楽しみに待っています〜
完成を楽しみに待っています〜
335名前は開発中のものです。
2014/06/26(木) 01:45:41.89ID:Mvj8DjXQ RevolvingGemsで予定していた実装が全て出来たので公開します。
指摘を受けていた
・ゲーム開始時に消滅が発生しないよう駒を配置
・初期化時にCHR-ROMのバンクセレクトを明示的に行う
の処理も盛り込んでいます。
あと、フレームワーク部分(main.asm)も処理を見直して結構手が入っています。
ttp://homepage3.nifty.com/~kyoske/nes/RevolvingGems100.zip
ここまでお付き合いして頂きありがとうございました。
指摘を受けていた
・ゲーム開始時に消滅が発生しないよう駒を配置
・初期化時にCHR-ROMのバンクセレクトを明示的に行う
の処理も盛り込んでいます。
あと、フレームワーク部分(main.asm)も処理を見直して結構手が入っています。
ttp://homepage3.nifty.com/~kyoske/nes/RevolvingGems100.zip
ここまでお付き合いして頂きありがとうございました。
336名前は開発中のものです。
2014/06/26(木) 21:00:12.97ID:9qzAY4Nu 夜中2時に書き込む
出来る方の別人格さんおつ
出来る方の別人格さんおつ
337名前は開発中のものです。
2014/06/26(木) 22:36:58.03ID:HYUmCg5c すげー(2回目)
乙
乙
338名前は開発中のものです。
2014/06/28(土) 08:52:02.98ID:1mbR3dV7 335氏
ソース勉強させていただきます
ソース勉強させていただきます
339131
2014/07/02(水) 17:15:28.00ID:b6UJAuU+ ここを見てても本当に良いのだろうか?という気持ちと
ヤジでいまだに言ってくる人がいて、不快感しか湧かない
ので、ここはまず、書き込みも見ることも辞める事にします。
なのでいさぎよく、このスレから出ていく事にします。
ちなみに、「逃げる理由が出来て良かったな」とか書き込みそうなんで
言っておきますが、言う人は何とでも言うので仕方ないと思います。
最後まで不快感をお互いに感じあってしまい、すみませんでした。
ヤジでいまだに言ってくる人がいて、不快感しか湧かない
ので、ここはまず、書き込みも見ることも辞める事にします。
なのでいさぎよく、このスレから出ていく事にします。
ちなみに、「逃げる理由が出来て良かったな」とか書き込みそうなんで
言っておきますが、言う人は何とでも言うので仕方ないと思います。
最後まで不快感をお互いに感じあってしまい、すみませんでした。
340名前は開発中のものです。
2014/07/02(水) 21:15:54.55ID:ccGvVyCV 前スレで戦力外通告されてなぜ残った
英語読む気ないのはこの板的にも戦力外
英語読む気ないのはこの板的にも戦力外
341名前は開発中のものです。
2014/07/03(木) 22:16:55.66ID:hPES0Si7342名前は開発中のものです。
2014/07/11(金) 02:02:23.66ID:63/tpOMg 他スレみたいにテンプレに
初心者向けに何か書いておいたほうがいいかもね
初心者向けに何か書いておいたほうがいいかもね
343名前は開発中のものです。
2014/10/05(日) 12:06:25.72ID:TCLHVT3o 東方Projectみたいな画面は作れないか?との興味から作りはじめたのですが、弾丸の表示時点で、CPUの処理能力不足により先が見えてしまいました。
http://homepage3.nifty.com/~kyoske/nes/Experi9.zip
Experi9.nes .. 160発表示版
Experi9x.nes .. 負荷可視化板
Experi8_noshot.nes .. 弾丸非表示版
Select+下 でスクロール開始、Select+左右 で画面モード切替です。
弾丸の最大数を96に落として、仕切り直す予定。
自キャラ、敵キャラ、弾丸以外は、BGで描画しています。
枠内のスクロールは、ハードウェアスクロールとソフトウェアスクロールの併用です。
16x8の範囲でパレット指定や会話ウィンドウの表示に、縦方向のラスタスクロールを駆使しています。
http://homepage3.nifty.com/~kyoske/nes/Experi9.zip
Experi9.nes .. 160発表示版
Experi9x.nes .. 負荷可視化板
Experi8_noshot.nes .. 弾丸非表示版
Select+下 でスクロール開始、Select+左右 で画面モード切替です。
弾丸の最大数を96に落として、仕切り直す予定。
自キャラ、敵キャラ、弾丸以外は、BGで描画しています。
枠内のスクロールは、ハードウェアスクロールとソフトウェアスクロールの併用です。
16x8の範囲でパレット指定や会話ウィンドウの表示に、縦方向のラスタスクロールを駆使しています。
344名前は開発中のものです。
2014/10/06(月) 04:59:32.10ID:6+tpiQ9J ジェムの人キター
消えてる時間が結構長いのでかなりスプライトが見難いですねぇ
BGは相変わらずえらいことになってますが、負荷軽減でパレットはあきらめて
MMC5の画面分割機能の使用を考えてみても良いかも
消えてる時間が結構長いのでかなりスプライトが見難いですねぇ
BGは相変わらずえらいことになってますが、負荷軽減でパレットはあきらめて
MMC5の画面分割機能の使用を考えてみても良いかも
345名前は開発中のものです。
2014/10/06(月) 23:47:50.82ID:5bZUXl8p >>344
160発を56個のスプライトで表示しているので、
大体3フレームに1回の表示でちらつきが目立ちます。
次の版は、96発にスペックを落とすので、
2フレームに1回の表示になるので多少は改善されるはず。
MMC5は魅力的なのですが、最終目標が実機での動作なので
勿体無くないMMC3で頑張ろうと思っています。
あと、負荷は弾丸の処理が半分以上占めているので
MMC5を使っても状況はあまり変わらないかと思います。
すでに96発MAXに書き換えて、弾丸1つ辺り5byteの領域から
8byteに増えて、Tile番号と属性値が保持できるようになったので
処理が軽くなりました。
弾丸の角度の変化が無ければ、Bombの下辺りまでの
処理時間で済んでいます。
160発を56個のスプライトで表示しているので、
大体3フレームに1回の表示でちらつきが目立ちます。
次の版は、96発にスペックを落とすので、
2フレームに1回の表示になるので多少は改善されるはず。
MMC5は魅力的なのですが、最終目標が実機での動作なので
勿体無くないMMC3で頑張ろうと思っています。
あと、負荷は弾丸の処理が半分以上占めているので
MMC5を使っても状況はあまり変わらないかと思います。
すでに96発MAXに書き換えて、弾丸1つ辺り5byteの領域から
8byteに増えて、Tile番号と属性値が保持できるようになったので
処理が軽くなりました。
弾丸の角度の変化が無ければ、Bombの下辺りまでの
処理時間で済んでいます。
346名前は開発中のものです。
2014/10/07(火) 04:35:07.91ID:3yj7hFfS >>345
1/2フレーム表示ならグラIIのミサイルなどで使ってましたね
欲を言えばですが、弾数が少ないときは1/1フレームで表示出来たら
いいかも
試しに割り込み無しにしたところ18ライン分くらい処理が減ってました
MMC5自体は光栄のゲームで結構出回ってるので入手は簡単かと
思いますが、今更変えるのもあれですね…
期待してますので頑張ってください
1/2フレーム表示ならグラIIのミサイルなどで使ってましたね
欲を言えばですが、弾数が少ないときは1/1フレームで表示出来たら
いいかも
試しに割り込み無しにしたところ18ライン分くらい処理が減ってました
MMC5自体は光栄のゲームで結構出回ってるので入手は簡単かと
思いますが、今更変えるのもあれですね…
期待してますので頑張ってください
347名前は開発中のものです。
2014/10/09(木) 21:46:13.35ID:44sWDsnn NESASMでアセンブルしたNESファイルは自作カートリッジに焼く時もそのまま使えるんですか?
348sage
2014/10/09(木) 21:50:10.76ID:hFc1Ndfq RevolvingGems 1.00を実機で動かしたら不具合が出たので、
今さらですが調べて直してみました。
・タイトル画面の表示が乱れる
ウエイトが足りず、割込み処理での最後の$2006への書込みが
HBLANK中に行われていないようので、user.asmのUser_Irq_Title:直後に
nopを(余裕を持たせて)3つ追加して乱れを消しました。
・あそびかたを選ぶと止まる
タイトルで設定された割込みが無効化できずに発生し続けているようです。
Guide_Init:でIRQ_FNC+1を0にしたことで、
Irq:のjsr IRQ_FNC-1が飛ばされるため、
User_Irq_Title:中での割込みの無効化が動かないのが原因と思います。
user.asm 474行目のsta IRQ_FNC+1をコメントアウトして動くようになりました。
今さらですが調べて直してみました。
・タイトル画面の表示が乱れる
ウエイトが足りず、割込み処理での最後の$2006への書込みが
HBLANK中に行われていないようので、user.asmのUser_Irq_Title:直後に
nopを(余裕を持たせて)3つ追加して乱れを消しました。
・あそびかたを選ぶと止まる
タイトルで設定された割込みが無効化できずに発生し続けているようです。
Guide_Init:でIRQ_FNC+1を0にしたことで、
Irq:のjsr IRQ_FNC-1が飛ばされるため、
User_Irq_Title:中での割込みの無効化が動かないのが原因と思います。
user.asm 474行目のsta IRQ_FNC+1をコメントアウトして動くようになりました。
349名前は開発中のものです。
2014/10/09(木) 21:51:03.03ID:hFc1Ndfq sage間違えたorz
350名前は開発中のものです。
2014/10/09(木) 21:56:48.11ID:hFc1Ndfq351名前は開発中のものです。
2014/10/09(木) 22:09:17.01ID:44sWDsnn >>350
ありがとうございますNESplitという分割ツールがありました。
ありがとうございますNESplitという分割ツールがありました。
352名前は開発中のものです。
2014/10/09(木) 23:56:08.22ID:EgCI09Ne >>348
実機での動作確認ありがとうございます。
>タイトル画面の乱れ
割り込みが入ってから110clk目に最後の$2006を書いていたのですが、
nop3つ追加ということで、116clk目が正解ということですね。
今のやつも直さないと。
>あそびかたを選ぶと止まる
VBlank中にIRQ_FNCを更新する仕組みを追加します。
実機での動作確認ありがとうございます。
>タイトル画面の乱れ
割り込みが入ってから110clk目に最後の$2006を書いていたのですが、
nop3つ追加ということで、116clk目が正解ということですね。
今のやつも直さないと。
>あそびかたを選ぶと止まる
VBlank中にIRQ_FNCを更新する仕組みを追加します。
353名前は開発中のものです。
2014/10/10(金) 00:27:59.23ID:giiUNY1I >>352
MMC3だとラスタの260ppu_clk辺りで割込み発生みたいなので、
そこから次ラスタの表示期間終了の256ppu_clkまでの、
(341-260)+256=337ppu_clk = 112.3cpu_clk
が必要な待ち時間だと思います。
sta $2006を確実にHBLANKに入れるために+4clkしましたが、
書込みが最後の1clkに行われるとすれば、数クロック削れるかもしれません。
MMC3だとラスタの260ppu_clk辺りで割込み発生みたいなので、
そこから次ラスタの表示期間終了の256ppu_clkまでの、
(341-260)+256=337ppu_clk = 112.3cpu_clk
が必要な待ち時間だと思います。
sta $2006を確実にHBLANKに入れるために+4clkしましたが、
書込みが最後の1clkに行われるとすれば、数クロック削れるかもしれません。
354名前は開発中のものです。
2014/10/10(金) 21:22:02.81ID:giiUNY1I355名前は開発中のものです。
2014/10/11(土) 11:53:25.77ID:JCcDlcCt >>353
ttp://wiki.nesdev.com/w/index.php/MMC3#Hardware
Regarding PPU A12 rises:
If the BG uses $0000, and the sprites use $1000, then the IRQ will occur after PPU cycle 260 (as in, a little after the visible part of the target scanline has ended).
If the BG uses $1000, and the sprites use $0000, then the IRQ will occur after PPU cycle 324 of the previous scanline (as in, right before the target scanline is about to be drawn).
When using 8x16 sprites: When there are less than 8 sprites on a scanline, the PPU makes a dummy fetch to tile $FF for each leftover sprite. In 8x16 sprite mode, tile $FF corresponds to the right pattern table ($1000).
PPUアドレスバスA12がスキャンラインカウンタのクロックとなっている。
The counter is clocked on each rising edge of PPU A12, no matter what caused it, so it is possible to (intentionally or not) clock the counter by writing to $2006
BGとSPRをどっちに配置するかで、立ち上がり、立下りが変わるので、
IRQが起きる位置とライン数が変わるようだ。
ttp://wiki.nesdev.com/w/index.php/MMC3#Hardware
Regarding PPU A12 rises:
If the BG uses $0000, and the sprites use $1000, then the IRQ will occur after PPU cycle 260 (as in, a little after the visible part of the target scanline has ended).
If the BG uses $1000, and the sprites use $0000, then the IRQ will occur after PPU cycle 324 of the previous scanline (as in, right before the target scanline is about to be drawn).
When using 8x16 sprites: When there are less than 8 sprites on a scanline, the PPU makes a dummy fetch to tile $FF for each leftover sprite. In 8x16 sprite mode, tile $FF corresponds to the right pattern table ($1000).
PPUアドレスバスA12がスキャンラインカウンタのクロックとなっている。
The counter is clocked on each rising edge of PPU A12, no matter what caused it, so it is possible to (intentionally or not) clock the counter by writing to $2006
BGとSPRをどっちに配置するかで、立ち上がり、立下りが変わるので、
IRQが起きる位置とライン数が変わるようだ。
356名前は開発中のものです。
2014/10/13(月) 07:14:58.66ID:khCfiiiQ >>354
追試ありがとうございます。
clkを伸ばした場合、エミュレータでどうなるか確認したのですが
こちらでは1clk伸ばしただけでも乱れが発生しました。
実機向けとエミュレータ向けの2つのバイナリを用意する必要があるようです。
追試ありがとうございます。
clkを伸ばした場合、エミュレータでどうなるか確認したのですが
こちらでは1clk伸ばしただけでも乱れが発生しました。
実機向けとエミュレータ向けの2つのバイナリを用意する必要があるようです。
357名前は開発中のものです。
2014/10/20(月) 02:34:56.29ID:VhFQD/az だれかギコ猫より分かりやすいサイト作って
もしくは解説コメント付きのソース
もしくは解説コメント付きのソース
358名前は開発中のものです。
2014/10/27(月) 22:58:49.97ID:WLPSmV4W ギコ猫があるだけ恵まれた環境。1990年代のネットはファミコンの
内部資料は英語しか無かったからね。だから普通に挫折した。
内部資料は英語しか無かったからね。だから普通に挫折した。
359名前は開発中のものです。
2014/10/28(火) 05:34:41.72ID:40z/j/Ad バッ活とファミリーベーシック
360名前は開発中のものです。
2014/11/05(水) 02:06:14.46ID:8FC6s1LF Experi9(>>343)の改良版をアップしました。
http://homepage3.nifty.com/~kyoske/nes/Experi10.zip
結局のところ、ファミコン本体の2KBのWRAMだけでは
性能面を向上させつつ、やりくりするのは難しいとわかったので
MMC3の拡張WRAMを解禁、弾丸のワーク領域をそちらに移しました。
本体のWRAMに余裕が出来たので、マップの仮想バッファを
倍に増加して、既存の処理を最適化して負荷を下げました。
色々なテーブルを乗せている関係で、共通ルーチン用のプログラム領域の
サイズが足りないか不安になってきたのですが、拡張WRAMの空き領域に
プログラムを転送すれば良い事に気づき、さらにRAMに転送するんだから
自己書き換えルーチンにできるな、ということで、自己書き換えで性能が
上がりそうなルーチンを試作してみました。
あと、当たり判定実装したり、弾丸の移動処理作ったり、BGM鳴らしてみたりで
処理落ちしないのを確認できたので、性能面で目処が立ったかなというところです。
http://homepage3.nifty.com/~kyoske/nes/Experi10.zip
結局のところ、ファミコン本体の2KBのWRAMだけでは
性能面を向上させつつ、やりくりするのは難しいとわかったので
MMC3の拡張WRAMを解禁、弾丸のワーク領域をそちらに移しました。
本体のWRAMに余裕が出来たので、マップの仮想バッファを
倍に増加して、既存の処理を最適化して負荷を下げました。
色々なテーブルを乗せている関係で、共通ルーチン用のプログラム領域の
サイズが足りないか不安になってきたのですが、拡張WRAMの空き領域に
プログラムを転送すれば良い事に気づき、さらにRAMに転送するんだから
自己書き換えルーチンにできるな、ということで、自己書き換えで性能が
上がりそうなルーチンを試作してみました。
あと、当たり判定実装したり、弾丸の移動処理作ったり、BGM鳴らしてみたりで
処理落ちしないのを確認できたので、性能面で目処が立ったかなというところです。
361名前は開発中のものです。
2014/11/05(水) 02:20:57.06ID:8FC6s1LF 試作した自己書き換えルーチンその1
ClearExtWorkMemory:
ldy #$60
lda #$00
tax
.1:
sty SMCLabel(.2+2)
.2:
sta $6000,x
inx
bne .2
iny
cpy #$68
bne .1
rts
SMCLabelは、転送先のアドレスに変換するユーザ関数です。
sta $6000,xの$60を書き換えています。
Indirect Indexモード 6clkに対して、Absolute Indexモード 4clkで
((6clk-4clk)*256-4clk)*8 = 4064clkの節約。
ClearExtWorkMemory:
ldy #$60
lda #$00
tax
.1:
sty SMCLabel(.2+2)
.2:
sta $6000,x
inx
bne .2
iny
cpy #$68
bne .1
rts
SMCLabelは、転送先のアドレスに変換するユーザ関数です。
sta $6000,xの$60を書き換えています。
Indirect Indexモード 6clkに対して、Absolute Indexモード 4clkで
((6clk-4clk)*256-4clk)*8 = 4064clkの節約。
362名前は開発中のものです。
2014/11/05(水) 02:32:50.39ID:8FC6s1LF 試作した自己書き換えルーチンその2
Shot_Alloc:
ldx SMCLabel(.2+1)
.1:
lda SH_X,x
bmi .9
lda Round96+1,x
tax
.2:
cpx #0
bne .1
.db $24 ; bit <$b8 (set v-flag)
.9:
clv
lda Round96+1,x
sta SMCLabel(.2+1)
rts
cpx #0の#0の部分を書き換え。
弾丸の空きを検索するルーチンで、次回の検索時は空きを検出した
次の場所から検索を始める処理となっています。
Round96は、0,1,2,...94,95,0,1,..と定義されているテーブルで
lda Round96+1,x で (x+1)%96 の計算をしています。
ゼロページの$b8には、$6cが格納されており、bit <$b8 でv-flagが設定されます。
空きがない場合にv-flagが設定されてリターンします。
Shot_Alloc:
ldx SMCLabel(.2+1)
.1:
lda SH_X,x
bmi .9
lda Round96+1,x
tax
.2:
cpx #0
bne .1
.db $24 ; bit <$b8 (set v-flag)
.9:
clv
lda Round96+1,x
sta SMCLabel(.2+1)
rts
cpx #0の#0の部分を書き換え。
弾丸の空きを検索するルーチンで、次回の検索時は空きを検出した
次の場所から検索を始める処理となっています。
Round96は、0,1,2,...94,95,0,1,..と定義されているテーブルで
lda Round96+1,x で (x+1)%96 の計算をしています。
ゼロページの$b8には、$6cが格納されており、bit <$b8 でv-flagが設定されます。
空きがない場合にv-flagが設定されてリターンします。
363名前は開発中のものです。
2014/11/05(水) 02:43:06.58ID:8FC6s1LF ファミコンのプログラム領域はROMだし、メモリも余裕無いから、
自己書き換えルーチンには縁が無いと思っていたのですが、
拡張WRAM使うとなると、有効な手段であるなと。
ただ、よく考えないと自己書き換えやっても効果を得られないので
どのようなパターンが有効か思考する必要ありだなというところです。
自己書き換えルーチンには縁が無いと思っていたのですが、
拡張WRAM使うとなると、有効な手段であるなと。
ただ、よく考えないと自己書き換えやっても効果を得られないので
どのようなパターンが有効か思考する必要ありだなというところです。
364名前は開発中のものです。
2014/11/05(水) 11:50:49.69ID:kV2Q14jG >>360
おお、スプライトも見易くなりましたね。
実機(MMC3B)でExperi10.nes焼いて動かしてみましたが、BGが結構
崩れています。
Experi10_irq114.nesですとBGが崩れはしませんが東方の文字の中心あたり
からチラチラしています。
また、東方を知らないのでわかりませんが会話表示とスクロールをするとたまに
BGが崩れるようです。
(バンク切り替えに失敗したような感じで別の絵が出てました)
参考になれば
おお、スプライトも見易くなりましたね。
実機(MMC3B)でExperi10.nes焼いて動かしてみましたが、BGが結構
崩れています。
Experi10_irq114.nesですとBGが崩れはしませんが東方の文字の中心あたり
からチラチラしています。
また、東方を知らないのでわかりませんが会話表示とスクロールをするとたまに
BGが崩れるようです。
(バンク切り替えに失敗したような感じで別の絵が出てました)
参考になれば
レスを投稿する
ニュース
- 【足立区暴走11人死傷】歩行者はねた後も減速せず…精神疾患がある37歳男「車で神奈川の山の方に行きたいと思った」 [ぐれ★]
- 【北海道】「稀に見る大きな個体」 体長1.9m、体重400kg超の巨大グマを捕獲 苫前町 [煮卵★]
- SuicaとPASMOのコード決済「teppay(テッペイ)」26年秋開始 🐧🤖 [少考さん★]
- 【円安】「ホストに貢ぎたい」と海外で売春する日本人女性 2カ月で2千万円稼ぐケースも★2 [1ゲットロボ★]
- 【フジ】クリスマスイブ恒例の「明石家サンタ」見送りへ 今年は「お笑い向上委員会」SP放送 [征夷大将軍★]
- フィフィ “工作員”と疑う声に「日本のために…昔から身を挺して発信している」「どんだけ探ったところで、なんも出てこないよ」 [Anonymous★]
- 【速報】米中電話会談、おやびん側からの提案だった。高市さん... [834922174]
- デフレ日本、ラーメン500円でインフレ進まず… [667744927]
- 【悲報】ネトウヨ「高市発言のどこが人災なんだ😡チャイナリスクを考えてない奴らの自己責任だろ!」7千いいね [359965264]
- 防衛省「台湾有事にロシア参戦するかも」 [177178129]
- メディアさん、高市総理を無理のある褒め方で称賛😰「笑顔で周囲の空気を明るくして…」「日本が世界の中心…」 [153490809]
- 「まいばすけっと」とかゆう都内に存在する極狭スーパーの利用体験談、ガチで想像を超える・・・ [329329848]
