UTF-8/게임보이/RGBDS

< UTF-8/게임보이
十八子(십팔자) (토론 | 기여)님의 2024년 3월 25일 (월) 00:57 판 (새 문서: 게임보이用 開發키트, RGBDS를 爲한 UTF-8 디코딩 函數. 出力은 RAM wConvertedUnicode에 UTF-32로 디코딩되어 나온다. 메모리 空間이 不足하거나 使用할수 없을境遇 레지스터만으로 出力하도록 맨끝部分을 改造할수있다. 매크로內에서 呼出되는 <code>ReadNextByte</code>는 다음 臺詞 바이트를 가져오는 役割을 하며, 게임마다 따로 具顯하여야 한다. <pre> macro read_nex...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

게임보이() 開發(개발)키트, 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