init
This commit is contained in:
123
GROUPED_ALGO.txt
Normal file
123
GROUPED_ALGO.txt
Normal 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)
|
||||
Reference in New Issue
Block a user