ゲームボーイで文字表示
開発環境
アセンブリで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
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