Ответ можно разбить на две части: собственно программные трюки под конкретный проц - раз; учет аппаратных особенностей компа - два.
8080, конечно, не совсем Z80, но кое-какие мысли изложу, а что подойдет для Вектора - кодерам под 8080 виднее.
Именно для компактности кода, а не скорости исполнения, забываем про развернутые циклы и подобные "бусты" на скорость.
Начинаем с выравнивания кода и данных по "ровным" HEX-адресам, а также циклов (с некоторыми допущениями).
Для циклов это избавит в части случаев от задания количества повторов цикла в регистре, либо сверки его с конкретным числом.
Например, заполняем некую область данными, при этом на старте HL=#XX00, нам нужно забить 100/128/200 байт. Ниже коды Z80, но общий смысл, думаю, будет понятен.
Можно организовать цикл на 100 (или сколько там) повторений, а можно просто увеличивать регистр L, пока он не обнулится. То бишь конструкцией вида INC L: JR NZ,repeat.
Аналогично, проверяя аккумулятор через ротацию и зная, какое число в нем было изначально (для Z80 можно и любой регистр), можно сделать нужный счетчик.
Например, нам нужен цикл с повторением 4 (либо с реакцией на каждый 4-й проход), при этом сам счетчик даже необязательно перезагружать.
Для этого в аккумулятор грузим #88 (%10001000 бинарно), а в программе циклически сдвигаем (RRCA или как там у 8080 пишется) и делаем переход/нужное по флагу переноса.
Флаг этот будет устанавливаться каждый четвертый проход, при этом "счетчик" будет самовосстанавливаться. Таким же путем делаются счетчики на 2 и 8, числами #AA и #80.
Учитывая аппаратные особенности конкретного компа (строение экрана, например), можно тоже сокращать код. Особенно часто это делается на Спектруме с его хитрым экраном.
Выше уже писали насчет палитр Вектора, вот как раз на эту тему.





Ответить с цитированием