文字コード対応表も参考に。
任意コード実行で数値を扱う際、入力不能文字に悩まされることがある。
実際のコードでどのように解決しているかを見てみると面白い。
表の赤字は(初代での)入力不能文字を表すが、第二世代のメールでのみ入力可能なものは赤強調で表す。
[8Ah]
1000 1010
←
0001 0101
[15h]
[E3h]
1110 0011
→
1111 0001
[F1h]
rlcは左方向へのローテート。2バイト命令だが、aレジスタに対しては1バイトで行えるようになっている。
偶数を作りたい場合はその数値の半分を用意すればいいが、奇数を作りたい場合は1引いた値の半分に80hを足すようにする。(あまりやらないが)
80h以上の数値に使用するとキャリーフラグが立つ。「だ」(jrnc,xx)などの相対ジャンプに影響が出る点に注意。
基本的に使うのはrlcaぐらいだが、rlc lを使って入力不能文字があるアドレスを指定することもあるだろう。
キャリーフラグにのみ溢れた桁を格納するrl命令もあるが、現在のキャリーフラグをしっかり管理しないといけないため少々使いづらいか。(rlaは入力不能)
応用として「ひ空」(bit 7,a)の代わりに使用することでプログラムのコード長を短縮したり、「ョダ」のようにxor
aと組み合わせることでccfの代わりにし、「だ」(jr nc,xx)を確実に成功させるというテクニックもある。
もっとも、キャリーフラグを折るだけなら「そ」(cp a)でも十分なため、「ョ」を飛ばして「ダ」に飛んでくるようなコードでないと無駄になってしまうが。
rrcは右方向へのローテート。こちらもaレジスタに対しては1バイトで行える。
こちらは数値を半減させる感覚で使えるが、奇数に対して使うと80hが足されて面倒なことになる。
rlcでは微妙に作りづらい40h台の数値を使ったりする際に便利。
こちらも基本的に使うのはrrcaぐらいだが、rrc lも覚えておくと便利。
rr命令も当然あるが、キャリーフラグの管理がやはり難しい。(rraも入力不能)
「ひぺ」(bit 0,a)の代わりにしてコード短縮を図るという応用法も。
レジスタ | b | c | d | e | h | l | (hl) | a |
---|---|---|---|---|---|---|---|---|
rlc | ひ[00h] | ひ[01h] | ひ[02h] | ひ[03h] | ひ[04h] | ひガ | ひギ | グ |
rrc | ひゲ | ひゴ | ひザ | ひジ | ひズ | ひゼ | ひゾ | ダ |
[8Ah]
1000 1010
←
0001 0100
[14h]
[E3h]
1110 0011
→
0110 0001
[71h]
[E3h]
1110 0011
→
1011 0001
[B1h]
slaは左方向へのシフト。
rlcと違い、bit0は必ず0になる。(80h以上の数値に使うとキャリーフラグが立つのは同じ)
純粋に数値を倍にしたい場合はこちらを使うのが無難。(特に元の数値に何が入るかわからない場合)
入力不能文字が多すぎるが、aレジスタには使えるのが救い。(大抵はrlcaで十分だが)
srlは右方向へのシフト。
rrcと違い、bit7は必ず0になる。(奇数に使うとキャリーフラグが立つのは同じ)
純粋に数値を半分にしたい場合はこちらを使うのが無難。(端数は切り捨てになるが)
一番の問題は(入力不能文字のため)aレジスタに使えないことだろうか。
bit7を変化させないsraというのもある。(80h以上ある場合は80hを引いてから半分にし、そこに80hを足すと計算しやすい)
入力不能文字の間接的な代入という用途では全く使えない(大抵rrcで十分なため)が、こちらはすべて入力可能なため、直前の値次第では使える場合も。
レジスタ | b | c | d | e | h | l | (hl) | a |
---|---|---|---|---|---|---|---|---|
sla | ひ[20h] | ひ[21h] | ひ[22h] | ひ[23h] | ひ[24h] | ひ[25h] | ひが | ひぎ |
srl | ひ[38h] | ひ[39h] | ひば | ひび | ひぶ | ひべ | ひぼ | ひ[3Fh] |
sra | ひぐ | ひげ | ひご | ひざ | ひじ | ひず | ひぜ | ひぞ |
[81h]
1000 0001
↔
0001 1000
[18h]
swap命令を使うと、上桁と下桁の数値を反転させることができる。
ただ、aレジスタやlレジスタに使えないのが痛いため、deレジスタによるアドレス指定の補助に使われていることがあるぐらいか。
b | c | d | e | h | l | (hl) | a |
---|---|---|---|---|---|---|---|
ひだ | ひぢ | ひづ | ひで | ひど | ひ[35h] | ひ[36h] | ひ[37h] |
入力不能文字が絡む分をインクリメント(+1)やデクリメント(-1)で補うケースは少なくない。
(例:「ぜどじじ」[ld l,34→inc l→inc l]でlレジスタに36hを入れる等)
aレジスタの場合は他のレジスタとの加減算が可能なため、xor aで00hにしてから他レジスタの数値を足す(例:「ョア」[xor a→add
b])ことで代入の代わりにしたり、
即値を足せる「に」(add a,xx)や「よ」(sub a,xx)を駆使して前回の値から数値を作るといった工程がたびたび見られる。
キャリーフラグの値を足すadc命令や引くsbc命令もあるが、純粋な計算で使う機会はほぼ無い。
変わったものでは「ぞ」(cpl)でaレジスタのビットをすべて反転させる(FFhから引くと計算しやすい)というのもある。
「ゴ」(add hl,bc)あたりは(bレジスタの操作がしやすいこともあって)アイテムを追加したいときなどに役立つ。
(例:「ョどぷぽぺズゴべづ」[xor a→inc (hl)→ld b,(hl)→ld c,b→ld b,a→inc c→add hl,bc→dec
a→ldd(hl),a]で下にFFhを追加しながら末尾を指す)
レジスタ | bc | b | c | de | d | e | hl | h | l | (hl) | a |
---|---|---|---|---|---|---|---|---|---|---|---|
inc | [03h] | [04h] | ズ | ド | [14h] | ボ | [23h] | [24h] | じ | ど | ぶ |
dec | ジ | ガ | ゼ | ブ | [15h] | [1Dh] | ざ | [25h] | ず | [15h] | べ |
add | ア | イ | ウ | エ | オ | カ | キ | ク | |||
sub | チ | ツ | テ | ト | ナ | ニ | ヌ | ネ |
set命令やres命令を使用することで、特定のビットを操作して数値を確保する。
set x,yでyレジスタのbit xを立て(0→1)、res x,yでyレジスタのbit xを折る(1→0)。
指定したビットがすでに立っていたり折れていたりすると効果が無いため単純な加減算としては使えないが、swap命令が使えないlレジスタにおいては大きな効果を発揮する。
ビットの順番は上から 7、6、5、4、3、2、1、0となっている点に注意。
ビット | (80h) 7 |
(40h) 6 |
(20h) 5 |
(10h) 4 |
(08h) 3 |
(04h) 2 |
(02h) 1 |
(01h) 0 |
|
---|---|---|---|---|---|---|---|---|---|
b | set | ひ2 | ひ[F0h] | ひ[E8h] | ひゃ | ひリ | ひみ | ひね | ひた |
res | ひく | ひィ | ひロ | ひメ | ひノ | ひチ | ひケ | ひア | |
c | set | ひ3 | ひ[F1h] | ひァ | ひゅ | ひる | ひむ | ひの | ひち |
res | ひけ | ひあ | ひワ | ひモ | ひハ | ひツ | ひコ | ひイ | |
d | set | ひ4 | ひ[F2h] | ひゥ | ひょ | ひれ | ひめ | ひは | ひつ |
res | ひこ | ひい | ひヲ | ひヤ | ひヒ | ひテ | ひサ | ひウ | |
e | set | ひ5 | ひ/ | ひェ | ひー | ひろ | ひも | ひひ | ひて |
res | ひさ | ひう | ひン | ひユ | ひフ | ひト | ひシ | ひエ | |
h | set | ひ6 | ひォ | ひ[ECh] | ひ[E4h] | ひわ | ひや | ひふ | ひと |
res | ひし | ひえ | ひッ | ひヨ | ひホ | ひナ | ひス | ひオ | |
l | set | ひ7 | ひ[F5h] | ひ[EDh] | ひ[E5h] | ひを | ひゆ | ひへ | ひな |
res | ひす | ひお | ひャ | ひラ | ひマ | ひニ | ひセ | ひカ | |
(hl) | set | ひ8 | ひ0 | ひ[EEh] | ひ? | ひん | ひよ | ひほ | ひに |
res | ひせ | ひか | ひュ | ひル | ひミ | ひヌ | ひソ | ひキ | |
a | set | ひ9 | ひ1 | ひ[EFh] | ひ! | ひっ | ひら | ひま | ひぬ |
res | ひそ | ひき | ひョ | ひレ | ひム | ひネ | ひタ | ひク |
aレジスタへの入力不能文字が絡む数値の入れ方。(ld a xxの使用をベースに)
キャリーフラグが立つ場合はcを付ける。
あくまで単体で入れる場合のため、前回の値次第では加減算で行った方が文字数を減らせる場合もある。
数値 (10進) |
数値 (16進) |
文字 | 代入例 | rlca元 | rrca元 | cpl元 | 備考 |
---|---|---|---|---|---|---|---|
0 | 00 | (無効) | ョ | (無し) | (無し) | 9 | xor aで00にできる。(aとaが異なるビットが1になるが、同じものの比較なのでなるわけがない) ここから「ぺ」(ld b,a)でbレジスタを00に、「ぽ」(ld c,b)でcレジスタを00にもできる。 |
1 | 01 | イ゛ | ョぶ | アc | [02h] | 8 | 00からinc aで01に。 |
2 | 02 | ウ゛ | ョぶぶ | [01h] | [04h] | 7 | 01からさらにinc a。 |
3 | 03 | エ゛ | ぼギダ | イc | ギ | 6 | |
4 | 04 | オ゛ | ぼガべ | [02h] | ゲ | 5 | 05からdec aで04に。 「ョひら」で00からset 2,aで作る手も。 |
20 | 14 | ナ゛ | ぼドぶ | ザ | ぐ | ェ | 13からinc aで14に。 道具所持数を20にしたいときにも。 |
21 | 15 | ニ゛ | ぼごダ | サc | ご | ゥ | |
22 | 16 | ヌ゛ | ぼじダ | ジ | じ | ァ | |
23 | 17 | ネ゛ | ぼぜダ | シc | ぜ | [E8h] | |
24 | 18 | ノ゛ | ぼバべ | ズ | だ | ! | 19からdec aで18に。 |
29 | 1D | マ゛ | ぼボぶ | ソc | ば | ょ | 1Cからinc aで1Dに。 |
30 | 1E | ミ゛ | ぼぶダ | ダ | ぶ | ゅ | ボックス預け数やサファリボールの個数を30にしたいときにも。 |
31 | 1F | ム゛ | ぼぼダ | タc | ぼ | ゃ | |
32 | 20 | ィ゛ | ぼヂグ | ヂ | パ | っ | |
33 | 21 | あ゛ | ぼプダ | チc | プ | ん | 42からrrcaで21に。 |
34 | 22 | い゛ | ぼヅグ | ヅ | ぱ | を | |
35 | 23 | (無効) | ぼぷダ | ツc | ぷ | わ | 「う゛」っぽいのになぜか無効。 |
36 | 24 | え゛ | ぼデグ | デ | ぽ | ろ | |
37 | 25 | お゛ | ぼがべ | テc | [4Ah] | れ | 26からdec aで25に。 |
53 | 35 | な゛ | ぼどぶ | ヒc | [6Ah] | は | 34からinc aで35に。 「ぜどじ」(ld l 34→inc l)とかの方が使うかもしれない… |
54 | 36 | に゛ | ぼブグ | ブ | [6Ch] | の | 1Bからrlcaで36に。 |
55 | 37 | ぬ゛ | ぼねぞ | フc | [6Eh] | ね | |
56 | 38 | ね゛ | ぼボグ | ボ | [70h] | ぬ | 1Cからrlcaで38に。 |
57 | 39 | の゛ | ぼばべ | ホc | [72h] | に | 3Aからdec aで39に。 |
63 | 3F | ま゛ | ぼぼぶ | ムc | [7Eh] | た | 3Eからinc aで3Fに。 「ぼパべ」で40からdec aで作ってもいい。 |
73 | 49 | ま゜ | ぼぽぶ | ヨc | テ | か | 48からinc aで49に。 |
74 | 4A | み゜ | ぼナダ | [25h] | ナ | お | |
75 | 4B | (文字送り) | ぼヌダ | ラc | ヌ | え | |
76 | 4C | (自動送り) | ぼノダ | が | ノ | う | |
77 | 4D | も゜ | ぼヒダ | ルc | ヒ | い | |
78 | 4E | (1行改行) | ぼホダ | ぎ | ホ | あ | メールで使われる改行はこれ。 |
79 | 4F | (改行) | ぼミダ | レc | ミ | ィ | 終端文字を利用して、50からdec aで作る手も。 |
80 | 50 | (終端) | ぼメダ | ぐ | メ | ョ | ニックネームの5文字目等、末尾に「ぼ」を入れられると無駄がない。 |
81 | 51 | (文字送り) | ぼヤダ | ロc | ヤ | ュ | A2からrrcaで51に。 |
82 | 52 | (主人公) | ぼヨダ | げ | ヨ | ャ | A4からrrcaで52に。 |
83 | 53 | (ライバル) | ぼルダ | ワc | ル | ッ | |
84 | 54 | ポケモン | ぼロダ | ご | ロ | ン | |
85 | 55 | (文字送り) | ョよンc | ヲc | ヲ | ヲ | 00からsub a,ABで55に。キャリーフラグが立つ点に注意。 初代だと「ヲ」が入力できないため、rrca、rlca、cplいずれでも作れない。 |
86 | 56 | …… | ぼッダ | ざ | ッ | ワ | ACからrrcaで56に。 |
87 | 57 | (無効) | ぼュダ | ンc | ュ | ロ | AEからrrcaで57に。 |
88 | 58 | (改ページ) | ぼじグ | じ | ィ | レ | B0からrrcaは…初代だと「ィ」が入力できない。 |
89 | 59 | (ポケモン名) | ぼいダ | ッc | い | ル | |
90 | 5A | てきの (ポケモン名) | ぼえダ | ず | え | ラ | |
91 | 5B | パソコン | ぼかダ | ャc | か | ヨ | |
92 | 5C | わざマシン | ぼくダ | ぜ | く | ユ | |
93 | 5D | トレーナー | ぼこダ | ュc | こ | ヤ | 初代の交換NPCも実はこの1文字 |
94 | 5E | ロケットだん | ぼしダ | ぞ | し | モ | |
95 | 5F | 、、゜ | ぼせダ | ョc | せ | メ | 表現が難しい謎の文字 |
96 | 60 | A | ぼたダ | だ | た | ム | |
97 | 61 | B | ぼつダ | ィc | つ | ミ | この辺りはHPゲージ周りだったり |
98 | 62 | C | ぼとダ | ぢ | と | マ | 「HP:|」のPの途中からが一文字になっている。 |
99 | 63 | D | ぼにダ | あc | に | ホ | |
100 | 64 | E | ぼねダ | づ | ね | フ | 「てEん」とかでよく見るやつ |
101 | 65 | F | ぼはダ | いc | は | ヒ | |
102 | 66 | G | ぼふダ | で | ふ | ハ | |
103 | 67 | H | ぼほダ | うc | ほ | ノ | |
104 | 68 | I | ぼみダ | ど | み | ネ | |
105 | 69 | V | ぼめダ | えc | め | ヌ | ポケスタでは「J」 |
106 | 6A | S | ぼやダ | [35h] | や | ニ | ポケスタでは「K」。つまりGBのVSは64のJK。 |
107 | 6B | L | ぼよダ | おc | よ | ナ | |
108 | 6C | M | ぼリダ | [36h] | リ | ト | |
109 | 6D | : | ぼれダ | かc | れ | テ | ポケスタでは「N」 |
110 | 6E | ぃ | ぼわダ | [37h] | わ | ツ | 実はひらがなの「ぁぃぅぇぉ」は第二世代でも入力不能。 ステータス画面や戦闘ではレベルの「:L」 |
111 | 6F | ぅ | ぼんダ | きc | ん | チ | 戦闘では味方のポケモンを指す左とんがりに。 |
112 | 70 | 「 | ぼゃダ | [38h] | ゃ | タ | E0をrrcaで70に。 どくややけどの「ど」を見る機会が多すぎて鍵括弧がまともに使われている試しがない。 ポケスタでは「Q」 |
113 | 71 | 」 | ぼょダ | くc | ょ | ソ | E2をrrcaで71に。 「HP:|」のPの縦線(?)までが一文字になっている。 ポケスタでは「R」 |
114 | 72 | 『 | ぼセぞ | [39h] | [E4h] | セ | 8Dをcplで72に。 「ョよソ」(xor a→sub a,8E)でもいい。 ポケスタでは「S」 |
115 | 73 | 』 | ぼスぞ | けc | ? | ス | 8Cをcplで73に。初代でキャリーフラグを立てないようにするにはこんな感じか。 「ョよセ」(xor a→sub a,8D)でもいい。 「ID」で表示される機会が多くて閉じかっこはあまり見ない。 ポケスタでは「T」 |
116 | 74 | ・ | ぼばグ | ば | [E8h] | シ | 3Aをrlcaで74に。 「No」で表示される機会が多い。 ポケスタでは「U」 |
117 | 75 | … | ぼサぞ | こc | ゥ | サ | 8Aをcplで75に。 ポケスタでは「V」 |
118 | 76 | ぁ | ぼびグ | び | [ECh] | コ | 3Bをrlcaで76に。 ステータス画面や戦闘では矢印につく棒?みたいな感じ。 |
119 | 77 | ぇ | ぼケぞ | さc | [EEh] | ケ | 88をcplで77に。 ステータス画面や戦闘では「 ̄」(上につく太線?) |
120 | 78 | ぉ | ぼぶグ | ぶ | [F0h] | ク | 3Cをrlcaで78に。 戦闘では敵ポケモンを指す右とんがりに。 |
121 | 79 | ┏ | ぼキぞ | しc | [F2h] | キ | ウインドウ左上角 第二世代ではせっていで変えた枠が適用される。 |
122 | 7A | = | ぼべグ | べ | ォ | カ | 3Dをrrcaで7Aに。 ウインドウ横線 |
123 | 7B | ┓ | ぼオぞ | すc | 0 | オ | ウインドウ右上角 |
124 | 7C | || | ぼぼグ | ぼ | 2 | エ | 3Eをrrcaで7Cに。 ウインドウ縦線 |
125 | 7D | ┗ | ぼウぞ | せc | 4 | ウ | ウインドウ左下角 |
126 | 7E | ┛ | ぼ空べ | [3Fh] | 6 | イ | 7Fからdec aで7Eに。 ウインドウ右下角 |
170 | AA | ヲ | ぼワぶ | [55h] | [55h]c | [55h] | A9からinc aでAAに。 第二世代では普通に入力可能。 |
176 | B0 | ィ | ぼあべ | [58h] | [61h]c | [4Fh] | B1からdec aでB0に。 第二世代では普通に入力可能。 |
221 | DD | を | ぼわぶ | [EEh]c | さc | [22h] | DCからinc aでDDに。 第二世代では普通に入力可能。 |
228 | E4 | ゜ | ぼーぶ | [72h] | のc | ブ | E3からinc aでE4に。 後ろに置いた文字にくっつく特殊な文字 初代、第二世代、歴代ポケスタで文字が違う面倒なやつ |
229 | E5 | ゛ | ぼビぞ | [F2h]c | ひc | ビ | 1AからcplでE5に。 後ろに置いた文字にくっつく特殊な文字 GBAで金銀のバグポケを見た時によく見るやつ |
230 | E6 | ? | ぼバぞ | [73h] | へc | バ | 19からcplでE6に。 第二世代ではメールで入力可能。 |
231 | E7 | ! | ぼまダ | /c | まc | [18h] | CFからrrcaでE7に。キャリーフラグが立つ点に注意。 第二世代ではメールで入力可能。 |
232 | E8 | 。 | ぼむダ | [74h] | むc | [17h] | D1からrrcaでE8に。キャリーフラグが立つ点に注意。 初代、第二世代、歴代ポケスタで文字が違う面倒なやつ |
233 | E9 | ァ | ぼもダ | ォc | もc | [16h] | D3からrrcaでE9に。キャリーフラグが立つ点に注意。 第二世代では普通に入力可能。 |
234 | EA | ゥ | ぼゆダ | [75h] | ゆc | [15h] | D5からrrcaでEAに。キャリーフラグが立つ点に注意。 第二世代では普通に入力可能。 |
235 | EB | ェ | ぼらダ | [F5h] | らc | [14h] | D7からrrcaでEBに。キャリーフラグが立つ点に注意。 第二世代では普通に入力可能。 |
236 | EC | 白カーソル | ぼドぞ | [76h] | るc | ド | 選択時に反転しているやつ |
237 | ED | 黒カーソル | ぼデぞ | 0c | ろc | デ | |
238 | EE | ▼ | ぼヅぞ | [77h] | をc | ヅ | ページ送りを求めるときに出てきているやつ |
239 | EF | ♂ | ぼヂぞ | 1c | っc | ヂ | |
240 | F0 | 円 | ぼダぞ | [78h] | ゅc | ダ | バイナリエディタでおなじみ |
241 | F1 | × | ぼゾぞ | 2c | ーc | ゾ | ポケスタ金銀では入力できたような |
242 | F2 | . | ぼゼぞ | [79h] | [E5h]c | ゼ | ポケスタ金銀でニックネームに使っているやつがいる。 なのに初代ポケスタでは空白に変換される。 |
243 | F3 | / | ぼズぞ | 3c | !c | ズ | 第二世代ではメールで入力可能。 |
244 | F4 | ォ | ぼジぞ | [7Ah] | ァc | ジ | 第二世代では普通に入力可能。 |
245 | F5 | ♀ | ぼザそ | 4c | ェc | ザ | |
246 | F6 | 0 | ぼゴぞ | [7Bh] | [EDh]c | ゴ | ここから数字(第二世代ではメールで入力可能) |
247 | F7 | 1 | ぼゲぞ | 5 | [EFh]c | ゲ | |
248 | F8 | 2 | ぼグぞ | [7Ch] | [F1h]c | グ | |
249 | F9 | 3 | ぼギぞ | 6c | /c | ギ | |
250 | FA | 4 | ぼガぞ | [7Dh] | [F5h]c | ガ | |
251 | FB | 5 | ョよガc | 7c | 1c | [04h] | 00からsub a,05でFBに。キャリーフラグが立つ点に注意。 でもセレビィを作りたいときは「5」を直接入力しそう… |
252 | FC | 6 | ぼ空べグ | [7Eh] | 3c | [03h] | 7EからrlcaでFCに。多分3文字じゃ無理。 |
253 | FD | 7 | ョべべべ | 8c | 5c | [02h] | 00からdec a ×3でFDに。多分3文字じゃ無理。 「ョぞひタ」(xor a→cpl→res 1,a)なんてのも。 |
254 | FE | 8 | ョべべ | 空白 | 7c | [01h] | rrcaはもはやinc aでいいような気がする。 |
255 | FF | 9 | ョべ | 9c | 9c | [00h] | 00からdec aでFFに。「ョぞ」(xor a→cpl)でもできる。 第二世代でも「ぼ9」(ld a,FF)よりもっぱらこっちのイメージ。 |