maxSprite - максимальное количество массива указателей Sprite *sprites[..]; ?
Да, там заранее выделяется оперативная память и если вызвать лишний раз SPR_addSprite(Ex), то он не сработает и вернёт NULL.
vramSize - методом тыка подгонять, чтоб не перекрыло тайлы фона ненароком?
Посмотрел код, там такая история:
Тайлы лежат в памяти с 0-го адреса, до maps_addr (из vdp.c). После установки адресов VRAM (VDP_setBPlanAddress() и т. п.) этот адрес обновляется. По умолчанию (когда размер слоёв только 64x32, 32x64, 32x32) там памяти до начала слоя B. Максимальное количество тайлов, которые можно использовать - TILE_MAXNUM (в vdp.h есть другие полезные константы). При это немного взято вначале и в конце на системный шрифт. Спрайтовый движок (sprite_eng) выделяет тайлы заранее как раз перед шрифтом. Поэтому возможно использование низкоуровневых операций со спрайтами (функции из vdp_spr и vdp_tile), в этом случае обычно используют тайлы с начала TILE_USERINDEX.
Следовательно, если под тайлами фона имеются в виду тайлы, которые расположены вначале, то придётся расчитывать как-то самому (движок проверяет границы и сам лишнего не запишет в пределах vramSize). Либо больше места для спрайтов выделять заранее, либо для всего остального. При правильной установки адресов VRAM, на сами слои (т. е. фон, plan) ничего не залезет. В случае размеров слоёв 64х64, 128х32, 32х128 будет просто меньше места на 128 тайлов.
unpackBufferSize - это выделенная в ОЗУ память, которая используется только в SPR_update(), когда необходимо подгрузить тайлы (если только включена автоподгрузка SPR_FLAG_AUTO_TILE_UPLOAD), такое случается при смене фрейма SPR_setFrame() или анимации SPR_setAnim(), а значит можно примерно представить сколько одновременно спрайтов можно сменить одновременно за один кадр. Например, у Соника размер 25 тайлов, если одновременно 11 соников сменят анимацию, то памяти не хватит (по умолчанию 256).
Ещё важное: при SPR_FLAG_AUTO_TILE_UPLOAD (по умолчанию), каждый Sprite будет использовать тайлы VRAM, это значит, что вызов 5 раз SPR_addSprite() с одним и тем же спрайтом (даже если фрейм один, т. е. нет анимации) будет занимать при отображении памяти как 5 спрайтов, а не один. В примерах есть летающие пончики sgdk\sample\astrofra\starfield_donut, там не используется автоматическая загрузка, поэтому удаётся отобразить 32 пончика одновременно. Пример нужно брать из репозитория, а не архива 1.34 (sgdk134.7z), была исправлена ошибка, но всё равно остался косяк: MAX_DONUT должен быть 32, а не 65, иначе рисуются лишние спрайты и происходит отброс спрайтов, если включён лимит в эмуляторе.
В GensKMod или других эмуляторах есть возможность отладки, например вот VRAM из примера с Cоником.