если количество переходов не больше 255/3
таблица должна быть выровнена на 256 байт
Код:
ld h, high table
ld l,a
rl a
add a,l
ld l, a
jp (hl)
table:
jmp subr1
jmp subr2
...
такты не считал - но вроде тоже можно юзать
- - - Добавлено - - -

Сообщение от
Barmaley_m
Без использования HL задачу можно решить, например, так:
Код:
ADD A,A ;4
LD (JT+1),A ;13
JT: JR JUMP_TBL ;12
JUMP_TBL:
JR ROUTINE1 ;12
JR ROUTINE2 ;12
JR ROUTINE3 ;12
....
Исполняется за 41 такт. Достоинства: не используется HL. Недостатки: нельзя размещать в ПЗУ; дистанция перехода ограничена.
ну или так - если оптимизация по скорости и памятью можно жертвовать:
Код:
add a,a
add a,a
ld (jt+1),a
jt:
jr jump_tbl
jump_tbl:
jmp subr1
nop
jmp subr2
nop
...
jmp кстати выполняется за 10 тактов а не за 12 как jr