Files
Persona2-PSX-asm-sources/GROUPED_ALGO.txt
sShemet 8e506a6912 init
2025-10-04 11:53:04 +05:00

124 lines
5.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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