Код:
;hl адрес спрайта
Код:

;вот это вешаем на прерывание
ISR_sub
           di
           ex (sp),hl  ;обмениваем вершину стека и содержимое HL
           ld (imm_jp),hl
           pop hl       ;заменяем испорченное слово спрайта 
           push bc     ;на текущее слово находящееся в BC
           ld (imm_sp),sp
          
           ld sp,ISR_sp
;здесь идет обработка прерывания
;          ...
;----------------------------------
           ld sp,$          
imm_sp equ $-2
           ei
           jp $
imm_jp equ $-2
Подскажите, здесь приведён пример с прерыванием и выводом графики. Вроде бы разобрался, даже будет работать, если в этот момент не спрайты рисуются. Но возникает вопрос. Если стек SP был на одном адресе, то при переходе на прерывание он уменьшается. Здесь где выделено, он уже уменьшенный и imm_sp он присваивается, уменьшенный, а не каким он был изначально. Ведь выход не RET, а JP. Значит он не увеличится сам. Как это понять? Не должен ли быть он между PUSH и POP?

И ещё,

Код:
           ld (imm_jp),hl
           jp $
imm_jp equ $-2
это то же, что и
Код:
           ld (imm_jp+1),hl
imm_jp     jp $
?