Указатели и индексные регистры (IX)

Допустим, нам нужно передвинуть хвост нашей Змейки, который занимает 10 ячеек памяти. С обычными командами (прямой адресацией) нам пришлось бы писать отдельную строчку кода для каждой ячейки: прочитай ячейку 1, запиши в 2, прочитай 2, запиши в 3... Это жутко неудобно, а если змейка вырастет до 100 ячеек, код просто не влезет в память!

Чтобы работать с массивами данных, инженеры придумали косвенную адресацию и Индексный регистр (IX). В отличие от обычных команд, которые жестко привязаны к конкретному адресу, команды для IX используют его как указатель.

Мы записываем в регистр IX стартовый адрес (например, 50). Затем говорим процессору: «сохрани данные по тому адресу, который сейчас лежит в IX». Процессор сохраняет данные в 50-ю ячейку. Затем мы даем команду INX (увеличить IX на единицу). Внутри IX теперь лежит 51. Повторяем ту же команду сохранения — и данные ложатся уже в 51-ю ячейку! Всего пара строк кода, зацикленных по кругу, позволяют перебрать и изменить огромный массив памяти.

Практический пример. Чтобы очистить 100 байт памяти, не нужны 100 команд STA. Достаточно трёх: загрузить в IX адрес начала (LDX 0), записать ноль по указателю (STA 0,X), увеличить IX (INX) — и повторить эти две команды 100 раз через цикл с JZ. Индексный регистр сам пробежит по всем адресам, как бегунок на линейке. Это называется косвенной адресацией, и без неё работа с массивами, строками и графическими буферами была бы неподъёмно громоздкой.