- Проверка на "мой формат" текста. Проверка 13ого бита команды. Если нет - вызов оригинальной японской процедуры
- Инициализация регистров (сдвиг стека, сохранение регистров)
- Инициализация "текстовой строки"
    - получение адреса свободной цепочки/декремент счётчика
    - вызов оригинальной процедуры инициализации параметров initCopyCharChain
- получение/чистка координат, сохранение в стек
- сохранение множителя цвета/признака тени
- подготовка scratchpad
    - готовим команду rect, копируя туда координаты, команду 64808080 и первые экранные координаты
    - готовим "шаблон-заголовок" команды CpuToVram с последней командой 0x01 в scratchpad

- tPos = 0
- textEnd = false
ЦИКЛ ЧТЕНИЯ ГРУППЫ СИМВОЛОВ
    - Считаем количество символов (lineLen) до конца строки от текущей позиции (tPos), одновременно копируя коды в буфер
    - Если lineLen >= 10
        - lineLen = 10
        - tPos += 10
        - textEnd = false
    - Else
        - lineLen = lineLen
        - tPos += lineLen
        - textEnd = true
    - Вызываем процедуру формирования данных строки длиной (lineLen)
        - Здесь формируем всю строку в scratchpad, в готовом 4битном формате,
                возвращая реальную width
                - в первой версии не будем применять тень (разберёмся потом)
    - Вычисляем spriteCmdCount = количество нужных команд CpuToVram, вычисляя ceil(width/8)
    ЗАПИСЬ КОМАНД!
    Запись команд происходит снизу вверх! То есть, сначала пишем rect, потом все CpuToVram,
        связывая их и записывая текущую цепочку в textParams.
    ЦИКЛ СТРАНИЦ (1,2)
        - получение адреса свободной цепочки/декремент счётчика
        - КОПИРОВАНИЕ КОМАНДЫ rect из scratchpad
        - установка width и координаты в rect
        - установка x = tPos * 6 + initX в rect
        ЦИКЛ ФОРМИРОВАНИЯ СПРАЙТОВ 8x12 (< spriteCmdCount)
            - получение адреса свободной цепочки/декремент счётчика
            - Запись шаблона CpuToVram из scratchpad в новую цепочку
            - Запись данных символа 8x12 из scratchpad в новую цепочку
            - Связь предыдущего блока с текущим/обновление text_params
        КОНЕЦ ЦИКЛА СПРАЙТОВ
    КОНЕЦ ЦИКЛА СТРАНИЦ
    Если textEnd == 0 переход на начало цикла
КОНЕЦ ЦИКЛА ГРУППЫ СИМВОЛОВ
ЦИКЛ ДОБАВЛЕНИЯ setTpage для 2 страниц
    - получение адреса свободной цепочки/декремент счётчика
    - вызов/запись команды setTpage
    - связь последней команды + обновление text_params
КОНЕЦ ЦИКЛА
Возврат значения text_params(ссылка на всю текстовую структуру)


Формула чтения данных символа из scratchpad:
y = charLen * 4
for x = 0 to width * 4 - 1
    chardataBytes.Add(y * (len * 4) + x)
next x


IS inner data

1f8001c0 -
1f800348 - 4bit chardata

1f800348 - CpuToVram cmd template
1f800358    cmdLengt (0x10)
            0000000a
            3001f001 - 0130 + (spriteIndex * 2) : 01f0.
            02000c00
            ........


            00000001 - flushcache in result chain

1f800390 - 
1f8003ac - 1bpp to 4bpp convert table 

1f8003d0 - Rect
            cmdLengt (04)
            80808064
            5c00d400 - dest coords
            c0f0d37f - src coords & clut
            08000c00 - width & heigth


1f8003f0 - SpriteCmdLengthTable



IS regs:
    a2 - FF000000
    a3 - 80080000

    s3 - scratch read address
    s6 - text read pointer
    s7 - 80000000   address mask

    t0 - 00FFFFFF
    t2 - FF000000
    
    t1 - print_params for PAGE
    
    t1 + 4 - short - charcount
    t1 + 18 - chain last addr
    t1 + 1C - chain last addr

    t4 - overall print params

    8007b6d0 - next Free Chain addr
    8007b6d4 - left Chain Counter

    0xa0(gp) - char vram UV
    0xa4(gp) - char texture page for setTpage
    0xa8(gp) - half - CLUT
    0xac(gp) - color

    0xb0(gp) - character width multiplier


Custom regs:
    t5 - current chunk cpu2vram blocks count
    t6 - current overall X
    t7 - 
    t8 -
                
    s2 - char count for current sprite

    s8 - chunk block index (cpu2vram)


IS 1.2
+ новая система вывода текста (отказ от посимвольного вывода)
- splash screen переводчика
+ имя в боёвке
- описания статов персон/демонов (блок!)
- жнец!
- группа пернатых феникс р
- розовый аргус
- майя-прайм
- Рейх и прочие арканы
- Измеритель звёзд и прочие заклинания
- группы крови
- оракул где-то рядом
- всегда за тобой
- "регистрируем Персоны"
- ортр суммон + название
- аэшма суммон + название
- перебрать все локации в данжах
- распаковать файлы общения с демонами
- Стратегия -> Тактика
- Протестировать все тексты + общение

- ПЕРЕСОБРАТЬ ОБРАЗ xml2iso!




EP regs

    a2 - FF000000
    a3 - 80080000

    0x98(gp) - char vram UV
    0x9c(gp) - char texture page for setTpage
    0xa0(gp) - half - CLUT
    b 0xa4(gp) - color
    b 0xa5(gp) - shadow

    ;0xb0(gp) - character width multiplier