0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ゲームボーイ RGBDS 開発メモ 第2回 チュートリアルを読んでいく

Last updated at Posted at 2024-12-29

チュートリアルを読んでいく

とても丁寧なチュートリアルで、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の部分を切り替えて読み込むらしい。これがバンク切り替えってやつでしょうか。

次回

だんだんわかってきました(笑)次回もチュートリアルを読んでいきます。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?