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?

z80専用アセンブラでゲームボーイ用ROMを生成

0
Last updated at Posted at 2026-09-20

目的

これまでゲームボーイのゲームを書く時にはゲームボーイ専用アセンブラrgbasmを使用して来ました
筆者の目的はゲームを作ることではなく、z80のCPUに慣れることであるため、z80asmのアセンブラを使うことにします。

但し、ROMのヘッダや任天堂の商標をバイナリで書く部分だけはrgbfixを使用します。
この部分もバイナリで書きたかったのですが任天堂商標をそのまま載せたく無いので苦肉の策です。

直接機械語を書き込む

ゲームボーイのCPUはz80を改造したような使用で、多くの機械語は共通していますが、一部が異なります。
以下の記事で調査しています。
z80とrgbasmのアセンブリで生成される機械語を比較

例えば今回使用しているld(0xXXXX), aの命令はz80にもゲームボーイのCPUにも存在しますが、機械語が異なります。
仕方が無いのでこの部分はニーモニックを使わずDEFB 0xEA の様に直接機械語を書き込みます。

z80.asm
org 0x0000

    ld(0xFF40), a
gameboy.asm
SECTION "test", ROM0[$0000]

    ld[$FF40], a
test@test-fujitsu:~/kaihatsu$ xxd z80.gb
00000000: 3240 ff                                  2@.
test@test-fujitsu:~/kaihatsu$ xxd -l 50 gameboy.gb
00000000: ea40 ff00 0000 0000 0000 0000 0000 0000  .@..............

実装

以下をz80asmでアセンブル出来るように書き直した。
ゲームボーイ画面描画

結果はrgbasmで生成したものと一致しています。
截图 2026-09-20 19-37-52

z80asm main.asm -o main.gb
rgbfix -v -p 0xFF main.gb
../SameBoy-master/build/bin/SDL/sameboy main.gb
main.asm
org 0x0000
    ds 0x0050 - $, 0x00 ; rgbfixで埋めるヘッダ分の領域を確保

org 0x0050
    ds 0x0100 - $, 0x00

org 0x0100 ; start
    jp start
    ds 0x0150 - $, 0x00

org 0x0150
    
start:
    di
    ld sp, 0xFFFE
    
    ; 画面描画停止
    xor a, 0
    DEFB 0xEA ; ld (0xFF40), a
    DEFW 0xFF40
    
    ; 真っ黒のタイルを1つ作る
    ld hl, 0x8000 + 1 * 16 ; 2つめの領域にタイルを作る
    ld b, 16 ; (8*8 1pixel=2bit)
fill:
    ld (hl),0xAA
    inc hl
    dec b
    jr nz, fill
    
    ld hl, 0x9800 ; タイルを置くVRAM
    ld (hl),1    ; タイル1
    
    ; パレット
    ld a, %11100100 ; 4色(11 10 01 00)を設定
    DEFB 0xEA ; ld (0xFF47), a
    DEFW 0xFF47
    
    ; 画面描画再開: BG有効
    ld a, %10010011
    DEFB 0xEA ; ld (0xFF40), a
    DEFW 0xFF40

hang:
    halt
    jr hang
    
org 0x7FFF        ; 32KB ROM の末尾アドレス
    ds 0x8000 - $, 0x00
0
0
0

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?