bit命令について

１．bit命令について

### 27.ども～（＾＾

投稿者: | M.K.S - 2004年05月02日 8時51分33秒
ブラウザ: | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
投稿アドレス: | 218.120.102.17

ご報告いただいた情報は、追加させていただきました。ありがとうございました（＾＾。えと、そこでちょっと疑問というか不思議に思ったことがあるのですが、例えば
0000996A: 2C A9 07 bit $07A9 ; $996Cが縦位置７の？ブロックの列の縦位置指定？
のところの$996cは、このままのソースだとRAMのアドレスを指定しているようにみえるのですが、ソースが間違っていますか？同じようなことが、
0000997B: 2C A9 07 bit $07A9 ; $997Dが縦位置８の吊り橋縦位置指定？
0000997E: 2C A9 09 bit $09A9 ; $9980が縦位置１０の吊り橋縦位置指定？
でも言えるのですが、NESの仕様から言って$09A9を操作することは、あり得ないので、やはり、ソースが間違っているのでしょうか？

### 28.bitかぁ・・・・。

投稿者: | ゆーだいデュン - 2004年05月02日 13時03分01秒
ブラウザ: | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)
投稿アドレス: | 210.138.229.222
メールアドレス: | yudaidhun@hotmail.com
ホームページ: | http://www25.tok2.com/home2/hackmariostation/

私bitと言う命令はよくわかりません。
見たことがあるのは、
bit $2002
など、スプライト関連のものしか見たことがありません。
SMB1にあるほかのbit命令を探してみたのですが、
0000BDD2のスーパーキノコと1UPキノコの区別（？）
するようなところがありました。
ここは
0000BDD4: 2C A9 02 bit $02A9
0000BDD7: 2C A9 03 bit $03A9
のようになっていました。
やはりよくわかりません。
0000996A: 2C A9 07 bit $07A9 ; $996Cが縦位置７の？ブロックの列の縦位置指定？
というものがありましたが、
A9 07が
どうも
lda #$07
にみえます。
ソースに書いてあるbit命令のすべてに
A9 **
となっているのでただいま怪しんでいるところです。
そうすると2Cは・・・？
となってしまうのですが。
とりあえずいろいろと試してみます。
2C消しちゃうとか・・・・。

### 29.bit調べ

投稿者: | ゆーだいデュン - 2004年05月02日 14時27分38秒
ブラウザ: | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)
投稿アドレス: | 210.138.229.222
メールアドレス: | yudaidhun@hotmail.com
ホームページ: | http://www25.tok2.com/home2/hackmariostation/

bit命令調べ中・・・
0000BDD4: 2C A9 02 bit $02A9
0000BDD7: 2C A9 03 bit $03A9
①BDD4の2CをEAにする。
パワーキノコ→スター
②BDD7の2CをEAにする。
パワーキノコ→1UP
③両方EAにする。
全部1UP。
2Cにはちゃんと意味がある模様。
つり橋でも試してみます。

### 30.ちょbitまた調べましたが・・・。

投稿者: | ゆーだいデュン - 2004年05月02日 14時42分54秒
ブラウザ: | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)
投稿アドレス: | 210.138.229.222
メールアドレス: | yudaidhun@hotmail.com
ホームページ: | http://www25.tok2.com/home2/hackmariostation/

0000997B: 2C A9 07 bit $07A9
0000997E: 2C A9 09 bit $09A9
2Cをそれぞれ変えてみると全部縦位置10に。
dasmじゃなくてG-NESでも逆アセンブルしましたが、
bitという文字は変わらなかった。
確かに$09A9はRAMのミラーなので使えないはず。
やっぱりソースミスかなぁ。

### 31.う～ん

投稿者: | M.K.S - 2004年05月03日 18時29分58秒
ブラウザ: | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
投稿アドレス: | 218.120.102.17
謎ですね～。2Cで1バイトの命令かとも疑ってみたのですが、どうもそれも違うようで・・・bit命令についてもっと詳しく調べる必要がありそうですね・・・。もし詳しい方いらっしゃったら、是非ご教授お願いしますヽ(´Д｀;)ノ

### 32.bit命令について

投稿者: | ATA - 2004年05月04日 1時35分49秒
ブラウザ: | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)
投稿アドレス: | 211.7.68.120

bitはcmp cpx cpyと同じ比較命令です。これらは演算結果によるフラグを立てるのみで、アキュムレータ
等には直接的な影響は及ぼさず、ある程度素通りが許される（？）もののようです。
一例を挙げますと[ lda #$01　bit $09A9　sta $07FF ]の場合、Aレジスタは途中のbitによる影響を受け
ないため、そのまま$07FFに<01>がストアされるということになります。
さらに、ここからが本領です！ このソースをバイナリに置き換えると[ A9 01 2C A9 09 8D FF 07 ]とな
るのですが、４バイト目から読み込むことで、今度は<09>を$07FFにストアできることにお気づきでしょ
う。もし分岐によって<01> <09>のどちらかをストアさせたい場合、[ A9 01 4C XX XX A9 09 8D FF 07 ]
とするのが妥当です。ところが、bitを用いたソースでは後者に比べて２バイトもの容量を節約すること
ができるのです！！
ちなみに、これはbitだけでなく、比較命令全般に適用します。2Cはbitの絶対アドレスなので、同じよう
にcmp絶対アドレスのCDを用いても、問題なく動作します。