я попытался чуть более подробно въехать в логику работы этого байт кода и теперь не знаю смеяться или плакать.
с одной стороны это большая гибкость при работе с данными и оптимальный размер кода,
но другая сторона медали - куча тактов на выполнение.
выше я приводил пример выборки адреса из таблицы
Код:
ADD A,A
LD B,A
RST #0010
DB #3A ,#0F ; №команды и параметр
LD E,A
INC B
RST #0010
DB #3A,#0F ; №команды и параметр
LD D,A
результат работы DE=addr №A из таблицы №#0F
...........
поиск нужного элемента выполняется через CPIR (чем больше№ тем больше тактов),
а самые ходовые картинки в городе (фасад и внутренность здания) ещё и разместили подальше.
на поиск адреса картинки фасада уходит ~5437t. , на нулевую ~3490t.
..........
проверив уровни я понял что адрес таблицы #0F всюду одинаковый и попробовал заменить кусок кода на свой
Код:
ADD A,A
LD C,A
LD B,#00
LD HL,#C288
ADD HL,BC
LD E,(HL)
INC HL ; можно и INC L ; переполнения нет
LD D,(HL)
влезло байт-в-байт, но работает за 48t !!!
..................
дальше ещё веселее.
начал смотреть графику в уровнях - насторожился совпадениям и понял что базовый набор врагов (7шт.)
на всех этапах одинаковый, а это 3661 байт (адрес размещения у всех одинаковый), а уровней у нас 17шт.
частично вынос одинаковых спрайтов сделали в версии для +3,
но почему не в кассетной версии (где время загрузки весьма актуально), для меня - загадка