게임보이() 開發(개발)키트, RGBDS()UTF-8 디코딩 函數(함수). 出力(출력)RAM wConvertedUnicode에 UTF-32로 디코딩되어 나온다. 메모리 空間(공간)不足(부족)하거나 使用(사용)할수 없을境遇(경우) 레지스터만으로 出力(출력)하도록 맨끝部分(부분)改造(개조)할수있다.

매크로()에서 呼出(호출)되는 ReadNextByte는 다음 臺詞(대사) 바이트를 가져오는 役割(역할)을 하며, 게임마다 따로 具顯(구현)하여야 한다.

macro read_next_byte
    inc de
    call ReadNextByte
endm

; @return wConvertedUnicode: utf-32 codepoint
UTF8_to_UTF32::
.dialog
    ld l, $00
    jr .begin
.dialog_name
    ld l, $01
    jr .begin
.tile
    ld l, $02
.begin
    ld h, $00

    bit 7, a
    jr z, .singleByte
    bit 6, a
    jp z, .end
    bit 5, a
    jr z, .doubleByte
    bit 4, a
    jr z, .tripleByte
    bit 3, a
    jr z, .quadByte
    jr .end

.quadByte
    and a, $07
    rla
    rla
    ld h, a
    read_next_byte
    push af
    and a, $30
    rra
    rra
    rra
    rra
    or h
    ld h, a
    pop af
    and a, $0f
    rla
    rla
    rla
    rla
    ld b, a
    read_next_byte
    push af
    and a, $3c
    rra
    rra
    or b
    ld b, a
    jr .lastByte
.tripleByte
    and a, $0f
    rla
    rla
    rla
    rla
    ld b, a
    read_next_byte
    push af
    and a, $3c
    rra
    rra
    or b
    ld b, a
    jr .lastByte
.doubleByte
    push af
    and a, $1c
    rra
    rra
    ld b, a

.lastByte
    pop af
    and a, $03
    rra
    rra
    rra
    ld c, a
    read_next_byte
    and a, $3f
    or c
    ld c, a
    jr .end
.singleByte
    and a, $7f
    ld b, $00
    ld c, a
.end
    push af
    xor a
    ld [wConvertedUnicode + 0], a
    ld a, h
    ld [wConvertedUnicode + 1], a
    ld a, b
    ld [wConvertedUnicode + 2], a
    ld a, c
    ld [wConvertedUnicode + 3], a
    pop af
    ret