Цитата Сообщение от reddie Посмотреть сообщение
Если имелось в виду and #fe - достаточно одной команды res 0,l вместо трех.

Код:
    ld a,high(sqrbase)
    add a,h
    ld h,a
    ld a,l
    and $fe  ;sets C=0
    ld l,a
    ld a,(hl)
Здесь аналогично. Флаг переноса и так будет сброшен после команды add a, h - ведь там, полагаю, переполнения не происходит никогда, раз устанавливается смещение к таблице, а значение регистра h перед этим сбрасывается, если превысило 8. Если правильно понял этот момент - можно упростить ещё одну проверку:

Код:
    push hl   ;r0 += r3
    ld a,h
    cp 8
    jr nc,loc2
Если значение h не должно превышать восемь - достаточно команды bit 3,h ну и переход по jr nz вместо jr nc.
Это не вникая в тонкости алгоритма, просто по конкретным кускам кода.
Благодарю вас. Оптимизации 1 экономит 8 тактов - очень ценная подсказка. К сожалению, оптимизация 2 даст только 4 такта, так как придется специально сбрасывать перенос - индексы могут быть отрицательными. Оптимизация 3 не сработает, так как в h может быть, например, возможно 16.