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

目的

ゲームボーイでタイルをする仕組みが分かったので、ドット絵を表示してみます。
VRAM$9800は本来背景を表示するための場所で、主人公はスプライトという領域に配置しないといけないらしいのですが、まだ仕組みを勉強していないので背景として描画します。

ドット絵の設計

表計算ソフトでドット絵を書き色番号を割り当てます。
8×8毎にタイルを分けて、地道に0と1を打ち込みます。
途中で嫌になりました。
截图 2026-09-08 20-17-48

実験

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-08 20-17-42
main.asm
SECTION "Entry", ROM0[$0100]
    jp start

SECTION "Main", ROM0[$0150]

start:
    di ; 割り込み禁止
    ld sp, $FFFE ; スタック設定
    
    ; 画面描画停止
    xor a
    ldh[$FF40], a
    
    ; 画面全体を白くする(タイル1を白で初期化して画面全体に適応)
    ld hl, white_tile ; 真っ白(全0)のデータが登録されているタイル
    ld de, $8000      ; タイル0の開始アドレス
    ld bc, 16         ; 1タイルのバイト数    
    call memcpy
        
    ; 画面全体にタイル1(真っ白)を登録する
    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, tile1
    ld de, $8000+1*16
    ld bc, 16*4
    call memcpy
    
    ld hl, $9800
    ld [hl],1    ; 主人公左上
    inc hl
    ld [hl],2    ; 主人公右上
    
    ld hl, $9800+32
    ld [hl],3    ; 主人公左下
    inc hl
    ld [hl],4    ; 主人公右下
    
    
    ; パレット
    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
    
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

; 主人公左上
tile1:
    db %00000111, %00000111
    db %00001111, %00001000
    db %00011111, %00010000
    db %00011111, %00010000
    db %00111000, %00111000
    db %00110111, %00110111
    db %01010000, %01010000
    db %01000010, %01000010
    
; 主人公右上
tile2:
    db %11100000, %11100000
    db %11110000, %00010000
    db %11111000, %00001000
    db %11111000, %00001000
    db %00111100, %00011100
    db %11101100, %11101100
    db %00001010, %00001010
    db %01000010, %01000010

; 主人公左下
tile3:
    db %00110010, %00110010
    db %00111001, %00111000
    db %01001111, %01001111
    db %01001111, %01001111
    db %00111111, %00111001
    db %00011110, %00010110
    db %00011111, %00010001
    db %00001110, %00001110

; 主人公右下
tile4:
    db %01001100, %01001100
    db %10011100, %00011100
    db %11110010, %11110010
    db %11110010, %11110010
    db %11111100, %10011100
    db %01111000, %01101000
    db %11111000, %10001000
    db %01110000, %01110000
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?