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?

ゲームボーイドット絵表示_ソース分割

0
Posted at

目的

タイルが多くなって来たのでドット絵のデータを別ソースに分割しました。

ドット絵をバイナリに変換するマクロは以下の記事で紹介しています。
ゲームボーイのドット絵を表計算ソフトからバイナリに変換

対象のドット絵

今回は左足前進と静止状態のドット絵を表示します。

截图 2026-09-10 21-23-18
tile.asm
; 主人公正面左足前進
hero_down_left_foot:
    db %00000000, %00000000
    db %00000111, %00000111
    db %00001111, %00001000
    db %00011111, %00010000
    db %00011111, %00010000
    db %00111100, %00111000
    db %00111111, %00111111
    db %01010000, %01010000
    
    db %00000000, %00000000
    db %11100000, %11100000
    db %11110000, %00010000
    db %11111000, %00001000
    db %11111000, %00001000
    db %00111100, %00011100
    db %11111100, %11111100
    db %00001010, %00001010

    db %01000010, %01000010
    db %01110010, %01110010
    db %01011001, %01011000
    db %00111111, %00111111
    db %00011111, %00011011
    db %00011111, %00011110
    db %00001111, %00001001
    db %00000111, %00000111

    db %01000010, %01000010
    db %01001100, %01001100
    db %10011100, %00010100
    db %11110100, %11110100
    db %11001100, %11001100
    db %11001100, %01001100
    db %10111000, %10111000
    db %00000000, %00000000
    
    ; 主人公正面静止
hero_down_idle:
    db %00000111, %00000111
    db %00001111, %00001000
    db %00011111, %00010000
    db %00011111, %00010000
    db %00111000, %00111000
    db %00110111, %00110111
    db %01010000, %01010000
    db %01000010, %01000010
    
    db %11100000, %11100000
    db %11110000, %00010000
    db %11111000, %00001000
    db %11111000, %00001000
    db %00111100, %00011100
    db %11101100, %11101100
    db %00001010, %00001010
    db %01000010, %01000010

    db %00110010, %00110010
    db %00111001, %00111000
    db %01001111, %01001111
    db %01001111, %01001111
    db %00111111, %00111001
    db %00011110, %00010110
    db %00011111, %00010001
    db %00001110, %00001110

    db %01001100, %01001100
    db %10011100, %00011100
    db %11110010, %11110010
    db %11110010, %11110010
    db %11111100, %10011100
    db %01111000, %01101000
    db %11111000, %10001000
    db %01110000, %01110000

表示部分の実装

rgbasm -o main.o main.asm && \
rgblink -o main.gb main.o && \
rgbfix -v -p 0xFF main.gb && \
../SameBoy-master/build/bin/SDL/sameboy main.gb
截图 2026-09-10 21-23-55
main.asm
SECTION "Entry", ROM0[$0100]
    jp start

SECTION "Main", ROM0[$0150]

INCLUDE "tile.asm"

start:
    di ; 割り込み禁止
    ld sp, $FFFE ; スタック設定
    
    ; 画面描画停止
    xor a
    ldh[$FF40], a
    
    ; 画面全体を白くする(タイル0を白で初期化して画面全体に適応)
    ld hl, white_tile ; 真っ白(全0)のデータが登録されているタイル
    ld de, $8000      ; タイル0の開始アドレス
    ld bc, 16         ; 1タイルのバイト数    
    call memcpy
        
    ; 画面全体にタイル0(真っ白)を登録する
    ld bc, 32*32
    ld hl, $9800
tile_init:
    ld [hl],0
    inc hl
    dec bc
    ld a, b
    or c
    jr nz, tile_init
        
    ;  主人公正面左足前進
    ld hl, hero_down_left_foot
    ld de, $8000+1*16
    ld bc, 16*4
    call memcpy
    
    ld hl, $9800
    ld a, 1
    call set_tile1616
    
    ; 主人公正面静止
    ld hl, hero_down_idle
    ld de, $8000+5*16
    ld bc, 16*4
    call memcpy
    
    ld hl, $9802
    ld a, 5
    call set_tile1616
        
    ; パレット
    ld a, %11100100 ; 4色(11 10 01 00)を設定
    ld [$FF47], a
    
    ; 画面描画再開: BG有効
    ld a, %10010001
    ldh [$FF40], a

hang:
    jr hang
    
; メモリ複製関数
; HL=元, DE=先, BC=長さ
memcpy:
    ld a, [hl]
    ld [de], a
    inc hl
    inc de
    dec bc
    ld a, b      ; B==CならBC==0 (B==$FF,C==$FFの時は失敗する)
    or c
    jr nz,memcpy ; BC!=0なら繰り返す
    ret

; 16*16のタイル(4つ分)を表示する
; HL VRAM
; A 開始タイル番号(連続して配置する前提)
set_tile1616:
    ; 左上
    ld [hl], a
    
    ; 右上
    inc hl
    inc a
    ld [hl], a
    
    ; 左下
    ld bc, 31
    inc a
    add hl, bc
    ld [hl], a
    
    ; 右下
    inc hl
    inc a
    ld [hl], a
    ret

; 画面クリア用
white_tile:
    db %00000000, %00000000
    db %00000000, %00000000
    db %00000000, %00000000
    db %00000000, %00000000
    db %00000000, %00000000
    db %00000000, %00000000
    db %00000000, %00000000
    db %00000000, %00000000
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?