2013/09/04 (Wed) Comment [0] Trackback [0]
こんにちは、ナイスピです。
なんと!去年のSOPHIAさんのコメントからこの一年間このブログなんのコメントも受け取ってないらしい!
なんてどうでもいいことはおいておいてですねー。
さて、今回もやるよ!ロックマン3改造大作戦。
大作戦つってもねぇ…。とかそういうこといわない。
今回は状態番号。
状態番号って何?って思った方もいると思う(ちなみに私はわかんなかった)のでいっておくと
例えばタップマンの場合
1.コマ投げる
2.くるくる回る
3.突進する
などといったように動きを3パターンに細分化しています。
この時の今どの状態?っていうのを判別する便利な道具が状態番号って呼ばれる奴です。
ロックマン2ではメモリの$B1が確かこの状態番号の役割をになっていた。(せいぜい使う数なんてメカドラゴンで9個(確か)のハズなのにゼロページ使うなんて今思えば贅沢すぎる。)
その反省からかロックマン3では$300の下桁がこの状態番号になっています。
なのでロックマン3はボスの命令の頭には殆ど
BD 00 03 29 0F A8
みたいな命令がついています。
まぁ、まず前回ゼロページでやっていたものをアブソリュートでやることでボスじゃなくてもこの状態番号の概念が使用できるといった利点があるのだがそこは割愛。
ところでこの命令、詳しくみていくと
BD 00 03 (敵の$300の値をみる)
29 0F (下ケタだけを抽出、下ケタの値は以後Yと呼ぶ。)
A8 (大事な命令)
B9 PP QQ 85 00 (QQPP+Yの値を00にいれる、このときいれた値をTT)
B9 RR SS 85 01 (SSRR+Yの値を01にいれる、このときいれた値をUU)
6C 00 00 (UUTTの値に飛ぶ。)
(中略)
Y=0[… 60 ]
Y=1[… 60 ]
Y=2[… 60 ]
Y=3[… 60 ]
とまぁ、こんなルーチンとおってます。(うわっ!よみにく!)
でもまぁ、これだと冗長だと思ったのが私。
まずジャンプって実は結構サイクル数食います。命令もこれだと結構長いです。(ただこれ部外者がソースを覗いたときに非常に見やすいルーチンだけど。)
というわけでナイスピさんだったらこうかきます。
BD 00 03 29 0F
ここまでは一緒です。
D0 XX
Y=0[… 60 ]
C9 01 D0 YY
Y=1[… 60 ]
C9 02 D0 ZZ
Y=2[… 60 ]
Y=3[… 60 ]
つまるところ今の状態番号は?っていわれたときに
前者はこれだよっていってその状態番号のアドレスまで親切に案内しますがアドレスを調べている時間がかかる。
後者は00からしらみつぶしにこれじゃないこれじゃないってやっていきます。
現実の社会とかだと前者がデキる人間が好まれそうなきがしますが、
状態の数が少量だった場合はむしろ後者の方が早いケースが多いいです。
ちなみに前者はパターンがいくつであってもサイクル数は一緒だし状態が1個増えてもたかだか2バイトしかふえません。
後者は状態の数によってサイクル数は大きくなっていくし状態1個増えると4バイト急増します。
状態の数によっては前者がいつか逆転するのですが…
まぁ、ロックマン3のボスにそんなのいないので。
ちなみにロックマン2ではむしろ全部のボスが状態番号見ているのでこれが応用できる…かも?
と、いうわけでナイスピさんの講義終了。
それにしても今回は地味だったなーと思った人にひとこと。
改造してると…いつか地味な作業にブチあたるよ?
でもあのわっかりにくい上の内容がhmhmって読めるのは技術がある人なわけで。
技術ある人はもうそういうのにぶちあたっているわけで。
つまりまた無駄なことかいたんじゃね?とかなるわけ。
もうやだ、寝よ。
では。
なんと!去年のSOPHIAさんのコメントからこの一年間このブログなんのコメントも受け取ってないらしい!
なんてどうでもいいことはおいておいてですねー。
さて、今回もやるよ!ロックマン3改造大作戦。
大作戦つってもねぇ…。とかそういうこといわない。
今回は状態番号。
状態番号って何?って思った方もいると思う(ちなみに私はわかんなかった)のでいっておくと
例えばタップマンの場合
1.コマ投げる
2.くるくる回る
3.突進する
などといったように動きを3パターンに細分化しています。
この時の今どの状態?っていうのを判別する便利な道具が状態番号って呼ばれる奴です。
ロックマン2ではメモリの$B1が確かこの状態番号の役割をになっていた。(せいぜい使う数なんてメカドラゴンで9個(確か)のハズなのにゼロページ使うなんて今思えば贅沢すぎる。)
その反省からかロックマン3では$300の下桁がこの状態番号になっています。
なのでロックマン3はボスの命令の頭には殆ど
BD 00 03 29 0F A8
みたいな命令がついています。
まぁ、まず前回ゼロページでやっていたものをアブソリュートでやることでボスじゃなくてもこの状態番号の概念が使用できるといった利点があるのだがそこは割愛。
ところでこの命令、詳しくみていくと
BD 00 03 (敵の$300の値をみる)
29 0F (下ケタだけを抽出、下ケタの値は以後Yと呼ぶ。)
A8 (大事な命令)
B9 PP QQ 85 00 (QQPP+Yの値を00にいれる、このときいれた値をTT)
B9 RR SS 85 01 (SSRR+Yの値を01にいれる、このときいれた値をUU)
6C 00 00 (UUTTの値に飛ぶ。)
(中略)
Y=0[… 60 ]
Y=1[… 60 ]
Y=2[… 60 ]
Y=3[… 60 ]
とまぁ、こんなルーチンとおってます。(うわっ!よみにく!)
でもまぁ、これだと冗長だと思ったのが私。
まずジャンプって実は結構サイクル数食います。命令もこれだと結構長いです。(ただこれ部外者がソースを覗いたときに非常に見やすいルーチンだけど。)
というわけでナイスピさんだったらこうかきます。
BD 00 03 29 0F
ここまでは一緒です。
D0 XX
Y=0[… 60 ]
C9 01 D0 YY
Y=1[… 60 ]
C9 02 D0 ZZ
Y=2[… 60 ]
Y=3[… 60 ]
つまるところ今の状態番号は?っていわれたときに
前者はこれだよっていってその状態番号のアドレスまで親切に案内しますがアドレスを調べている時間がかかる。
後者は00からしらみつぶしにこれじゃないこれじゃないってやっていきます。
現実の社会とかだと前者がデキる人間が好まれそうなきがしますが、
状態の数が少量だった場合はむしろ後者の方が早いケースが多いいです。
ちなみに前者はパターンがいくつであってもサイクル数は一緒だし状態が1個増えてもたかだか2バイトしかふえません。
後者は状態の数によってサイクル数は大きくなっていくし状態1個増えると4バイト急増します。
状態の数によっては前者がいつか逆転するのですが…
まぁ、ロックマン3のボスにそんなのいないので。
ちなみにロックマン2ではむしろ全部のボスが状態番号見ているのでこれが応用できる…かも?
と、いうわけでナイスピさんの講義終了。
それにしても今回は地味だったなーと思った人にひとこと。
改造してると…いつか地味な作業にブチあたるよ?
でもあのわっかりにくい上の内容がhmhmって読めるのは技術がある人なわけで。
技術ある人はもうそういうのにぶちあたっているわけで。
つまりまた無駄なことかいたんじゃね?とかなるわけ。
もうやだ、寝よ。
では。
スポンサーサイト