Z80ってどんなもの?

初代ポケモンにおけるプログラムで行うのは、主に「座標」と「レジスタ」の値の変更だけです。
「座標」は4桁の16進数(16bit)で表され、各々が2桁の16進数(8bit)からなる値を格納しています。プログラムを実行する際には原則この番号が若いものから一つずつ順番に見られます。 「レジスタ」とは2桁ないし4桁の16進数(8or16bit)からなる任意の値を一時的に格納している場所です。DOSを触ったことがある方は、変数のようなものだと思っていただいて結構です。
『え、なに?いきなり難しいんだけど!ワケワカメ(゚∀。)』と思っている方、安心してください。私もかつてはそうでした(^^;)
それでは、これらについて詳しく見てみましょう。


基本要素解説

まずはこちらをご覧ください。頭の良い方ならリンク先の解説のみで分かってしまうかと思いますが、少なくとも私はそうではなかったので(汗)少し噛み砕いた説明をお送りします。

座標

4桁の16進数で示され、それぞれの座標が2桁の16進数を保存しています。
ここでは4桁の方を「座標」、2桁の方を「座標の中身」と定義します。また、4桁の16進数を()で囲むと、座標の中身として表現できます。

b,c,d,eレジスタ

レジスタには2桁の16進数(=8bit)を一時的に保存できます。例えば、"ld b,1E"はbレジスタに1Eを入れる命令です。
また、bcレジスタとdeレジスタはそれぞれ組み合わせて4桁の16進数として使うことができ、例えばd=CD,e=38のとき、de=CD38として扱うことができます。

h,lレジスタ

基本的な扱いはb,c,d,eと相違ありません。hlのように組み合わせて使うこともできます。
なぜこのように分けて説明しているかというと、(hl)のように書くことで、hlレジスタが指定する座標の中身を変更できるからです。
例えば、hl=D000のとき"ld (hl),00"と書くと、D000座標の中身を80に変更できます。

aレジスタ(アキュームレータ)

基本的な扱いは他のレジスタと同じですが、唯一計算結果を保存する機能を併せ持ちます。

fレジスタ(フラグレジスタ)

これもレジスタですが、変数のように使われることはほとんどなく、専ら計算処理によって自動的に変化する値を参照するために使われます。
4つのフラグを保持しており、よく使われるのは以下の2つです。これらはif文を擬似的に構成するために必要な要素なので、確実に覚えましょう。

pc(プログラムカウンタ)

次に実行する座標を示しており、基本的には「今参照している座標+1」の値となっています。例えば、現在D000を参照しているならば、pc=D001です。
これを書き換えることにより、ループや分岐処理を擬似的に行うことができます。


以下については、現時点で覚える必要はありません。後述の「命令編」で実際の使われ方を見て覚えましょう。

sp(スタックポインタ)

後述のret命令を使った際に、次に参照される座標を示しています。



基礎は分かりましたか?それでは、命令編へ移りましょう。


戻る 次へ TOP