124 lines
5.2 KiB
Plaintext
124 lines
5.2 KiB
Plaintext
- Проверка на "мой формат" текста. Проверка 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)
|