User Tag List

Показано с 1 по 10 из 217

Тема: ROBOTZ! Releases

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,921
    Спасибо Благодарностей отдано 
    363
    Спасибо Благодарностей получено 
    327
    Поблагодарили
    250 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Biland Посмотреть сообщение
    Код:
    ;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 $
    ?

    здесь похоже на ошибку.
    оно должно выглядеть так

    Код:
    ;hl адрес спрайта
    Код:
    
    ;вот это вешаем на прерывание
    ISR_sub
               di
               ex (sp),hl  ;обмениваем вершину стека и содержимое HL
               ld (imm_jp),hl
               pop hl          
               ld (imm_sp),sp
    
                               ;заменяем испорченное слово спрайта 
               push bc     ;на текущее слово находящееся в BC
              
               ld sp,ISR_sp
    ;здесь идет обработка прерывания
    ;          ...
    ;----------------------------------
               ld sp,$          
    imm_sp equ $-2
               ei
               jp $
    imm_jp equ $-2
    С уважением,
    Jerri / Red Triangle.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •