ld h,D5 ld l,F3 ld a,FB cp (hl) ld (hl),a dec hl jp z,CF2F ld (hl),a ret sub a,F6 ld (CFFF),a ldd a,(hl) ld de,D13E inc de ld (de),a xor a jp 2E05
// C言語っぽく翻訳 char hl[2] = {0xD5, 0xF3}; // ボールポケットの二番目の個数のアドレス char a = 0xFB; bool z = compare(a, hl); // 比較して等しければtrue *hl = a; // ボールポケット二番目の個数は0xfb(251=最後の技ふくろだたき)に。 hl--; // ポインタ演算。hlが指すアドレスはボールポケットの一番目に。 if(z == false) // a==hlでないのなら {*hl = a; return;} // ボールポケット一番目の個数も0xfb(251)にして終了。 // 以下、技番号が指定されていた場合。 a -= 0xF6; // a == 5に。 char *var = 0xCFFF; *var = a; // 0xCFFF(内部RAM領域)にa(5)を代入。 // これなに? ※翌日追記 手持ちの6番目を選択ですね a = *hl; // ボールポケット一番目の個数を読み込み。 char *de = 0xD13E + 0x1; *de = a; // 0xD13F(内部RAM領域)にa(指定した技コード)を代入。 a = 0; // aをリセット func2E05(); // 0x2E05(プログラム領域)へ移動 // 多分わざマシンのプログラムへ移行している?
ということで参考ページ内のハイパー技マシンを読んでみました。
読めてない・・・。
あと0x32が何の命令なのか資料によって微妙に違うのが困る。多分これであってる。
コードには苦心の跡が見られて面白いですね。
相対ジャンプが使えないのは非常に痛い。このアドレスって常に使えるものなのかな。覚えておいたほうがいいかも。
文字制限のせいでアドレスの直接指定ができないのをインクリメントで無理やり合わせてるのはわろた。
次の日になればわかる。解説で手持ちの6番目が対象って言ってるんだからこれなにもないわな。
実際に使っていればわかっただろうに。プログラムは一度走らせて挙動を確認するのも大事ですね。