This commit is contained in:
sShemet
2025-10-04 11:53:04 +05:00
commit 8e506a6912
53 changed files with 11261 additions and 0 deletions

123
GROUPED_ALGO.txt Normal file
View File

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