チュートリアルを読んでいく
とても丁寧なチュートリアルで、16進数の説明なんかもありました。16進数を知らない人がこのチュートリアルを読むことはあるのだろうか(笑)
Registers
ChatGPT先生に翻訳してもらいながら読みすすめていきます。
ゲームボーイのCPUにはa, b, c, d, e, h, l という7つのレジスタ(変数のようなもの?)があり、それぞれ8ビットの値をいれることができる。a は計算することができるらしい。ということは他のレジスタでは計算できないので、入れたり出したりするのでしょうか。
また、レジスタは a 以外、ペアで使うことができて、16ビットとして扱える。
Assembly basics
INCLUDE "hardware.inc"
SECTION "Header", ROM0[$100]
jp EntryPoint
ds $150 - @, 0 ; Make room for the header
EntryPoint:
; Shut down audio circuitry
ld a, 0
ld [rNR52], a
やっと来ました、アセンブラのソースコードです。INCLUDEのように RGBASM が解釈するものがディレクティブ、マシン語と一対一に対応する命令(instruction) がある。
INCLUDE はよく使う定数が入っているようです。
ld がニーモニックで、a, 0 がオペランド(引数のようなものかな)。
SECTION はメモリの連続した範囲を決めるために使うディレクティブ。 ROM0[\$100] は ROM の先頭のアドレスでしょうか。\$ は 16進数。
ds は命令ではなくてディレクティブで、 @ は現在のアドレスを表し、 \$150 - @ バイトを0で埋める。 \$100 から \$150 まで 0 で埋めるということでしょうか。
ディレクティブなので、実行時に実行される命令ではなく、アセンブル時に処理される。
メモリに命令とデータを一緒に置くので、こんな感じになるんですね。
Memory
ld a, [de] はdeに格納されている内容をレジスタa にコピーする。
EntryPointのようなラベルがメモリアドレスになっている。
ROMやVRAMなどのデータが全部、\$0000 から \$FFFF まで入っていて ROMの部分を切り替えて読み込むらしい。これがバンク切り替えってやつでしょうか。
次回
だんだんわかってきました(笑)次回もチュートリアルを読んでいきます。