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

ゲームボーイで文字表示

開発環境
アセンブリでGameBoyのコードを書く環境を導入

タイルの仕組み
ゲームボーイ画面描画

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-04 22-56-27
main.asm
SECTION "Entry", ROM0[$0100]
    jp start

SECTION "Main", ROM0[$0150]

start:
    di ; 割り込み禁止
    ld sp, $FFFE ; スタック設定
    
    ; 画面描画停止
    xor a
    ldh[$FF40], a
    
    ld hl, tile_H
    ld de, $8000 + 1 * 16 ; 2つめの領域にタイルを作る
    ld bc, 4*16    ; HELOの4文字分
    call memcpy
    
    
    ld hl, $9800
    ld [hl],1    ; Hタイル
    
    ld hl, $9801
    ld [hl],2    ; Eタイル
    
    ld hl, $9802
    ld [hl],3    ; Lタイル
    
    ld hl, $9803
    ld [hl],3    ; Lタイル
    
    ld hl, $9804
    ld [hl],4    ; Oタイル
    
    ; パレット
    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
    or c
    jr nz,memcpy ; BC!=0なら繰り返す
    ret

; 字体をタイル形式で定義(実際は容量が勿体ないので、別関数でタイル形式に変換した方が良い)
; 1タイル = 16バイト(1pixel=2byte)
; ===== 'H' =====
tile_H:
    db %00000000, %00000000
    db %01100110, %01100110
    db %01100110, %01100110
    db %01111110, %01111110
    db %01111110, %01111110
    db %01100110, %01100110
    db %01100110, %01100110
    db %00000000, %00000000
    
; ===== 'E' =====
tile_E:
    db %00000000, %00000000
    db %01111110, %01111110
    db %01111110, %01111110
    db %01100000, %01100000
    db %01111110, %01111110
    db %01100000, %01100000
    db %01111110, %01111110
    db %01111110, %01111110

; ===== 'L' =====
tile_L:
    db %00000000, %00000000
    db %01100000, %01100000
    db %01100000, %01100000
    db %01100000, %01100000
    db %01100000, %01100000
    db %01100000, %01100000
    db %01111110, %01111110
    db %01111110, %01111110

; ===== 'O' =====
tile_O:
    db %00000000, %00000000
    db %00011000, %00011000
    db %01100110, %01100110
    db %01100110, %01100110
    db %01100110, %01100110
    db %01100110, %01100110
    db %01100110, %01100110
    db %00011000, %00011000
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?