- Проверка на "мой формат" текста. Проверка 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 1f8001e0 - 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 IS regs: a2 - FF000000 a3 - 80080000 s3 - scratch read address s6 - text read pointer s7 - 80000000 address mask t0 - 00FFFFFF 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)