あなたが探している情報は、この日記には記されていない可能性が高いです。(検索で来た人用)
にらどんは一杯500円。尚、出前は承っておりません。ご了承下さい。

金銀VC 任意コード実行

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番目が対象って言ってるんだからこれなにもないわな。
実際に使っていればわかっただろうに。プログラムは一度走らせて挙動を確認するのも大事ですね。