基礎編、命令編の知識を用いて早速プログラムを作ってみるのも良いのですが…まずは実際に使用できるプログラムに触れ、実践的な知識を身につけましょう。
さて、ここにやってきたあなたは「てヨめのの」「てウんのの」といった文字列からなるプログラムを知っているはず。手始めにこれを解体します。
ボックス6匹目: | ゾカひぢ[スペース] |
ボックス7匹目: | ギめなゅ[スペース] |
ボックス8匹目: | ぼづクづの |
DE82: | 0E 85 CB 31 7F 50 |
DE88: | 06 D2 C5 E1 7F 50 |
DE8E: | 3E 32 87 32 C9 50 |
DE82: | 0E 85 | ld c,85 |
DE84: | CB 31 | swap c |
DE86: | 7F | ld a,a |
DE87: | 50 | ld d,b |
DE88: | 06 D2 | ld b,D2 |
DE8A: | C5 | push bc |
DE8B: | E1 | pop hl |
DE8C: | 7F | ld a,a |
DE8D: | 50 | ld d,b |
DE8E: | 3E 32 | ld a,32 |
DE90: | 87 | add a |
DE91: | 32 | ldd (hl),a |
DE92: | C9 | ret |
DE93: | 50 | ld d,b |
cレジスタに85を入れます。
c=85
cレジスタの上位4bitと下位4bitを入れ換えます。
c=58
bレジスタにD2を入れます。
b=D2 c=58
bcレジスタをspに格納します。
sp=D258
spをhlレジスタに格納します。
h=D2 l=58
aレジスタに32を入れます。
a=32 h=D2 l=58
a+aの計算結果をaレジスタに格納します。
a=64 h=D2 l=58
hl座標、すなわち座標D258にaレジスタの値を入れます。その後、hlレジスタの値を-1します。
(D258)=64
spを参照してサブルーチンから戻ります。すなわち、一連のプログラムの終点です。
要点をまとめると、このプログラムは「レジスタを駆使して"D258"という文字列をつくり、これが指定する座標に"64"を入れる」という作業を行っていると言えます。わりと単純でしょ?
このように、最初のうちは他の人が作ったプログラムについて、どの値の変更を求めているのか、より最適化できないか、といったことを考えつつ中身を見てみると良いでしょう。
なお、アイテム欄を使ったプログラムについても同様に逆アセンブルできます。その際にはこちらを参照してください。
ちなみに、なぜこのような回りくどいやり方をしているのかというと、先ほどご覧いただいた「文字コードリスト」や「どうぐリスト」において対応している命令が限られているからです。
ここまで記事をご覧いただいて、このように思いませんでしたか?
( ˘ω˘)。o〇 (任意座標の値を変更するって言っても、どこがどれに対応してるのかわからないし…まさか、事前にいちいち解析して調べなきゃいけないの?)
結論から言うと、そんなことはありません。有志の方々がすでにメモリの構造体を解析しています。以下はその一例です。
れんだ様 thfan様
また、こちらは海外版に向けたものですが、ある程度の目安にもなります。
いかがでしたか?「意外とかんたんだな〜」と思った方も、「やっぱりプログラミングって難しい!」という方もいらっしゃるかと思いますが、共通して言えるのは「プログラムに触れることが重要」だということです。
他の方が作ったプログラムを改良したり、はたまた自分で作ってみたりとやり方は様々です。
いろいろなプログラムに触れ、わからない命令文が出てきたらここを参考にして、テクニックをどんどん盗んでしまいましょう!
…あと、ポケモンとは関係ないのですが、ネットサーフィンしていて見つけたこのページがなかなか面白かったので、ご紹介させていただきます。ぜひ参考になさってください。
ちなみに、リンク先のレポート課題の解答例は、CP a,80です。