User Tag List

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

Тема: iS-DOS

Древовидный режим

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

    Регистрация
    28.02.2005
    Адрес
    г.Минск
    Сообщений
    645
    Спасибо Благодарностей отдано 
    23
    Спасибо Благодарностей получено 
    19
    Поблагодарили
    15 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В iS-DOS есть рестарт #1E, который позволяет добавлять в цепочку процедур, вызываемых при обработке прерывания IM2, свою процедуру (например для индикации часов и т.п.). В процессе работы я столкнулся с глюком (?). Проявляется он в том, что если в своей процедуре, подключаемой к обработчику IM2, менять стек (например вызывать подпрограммы), то получем гаранированный "вылет". К примеру, следующий код вешает систему:

    ORG 25000

    LD A,#FF ;добавляем свою процедуру IM2 в обработчик прерываний
    DI
    LD HL,IM2
    LD C,#1E
    RST 16
    EI

    LD C,7 ;этот рестарт ждёт нажатия Any Key
    RST 16

    DI ;убираем процедуру IM2 из обработчика прерываний
    XOR A
    LD HL,IM2
    LD C,#1C
    RST 16
    EI
    RET ;выходим в систему

    AAA RET

    ;собственно сама процедура, которую я добавляю в обработчик прерываний
    IM2 CALL AAA ;вызываю любую подпрограмму
    RET ;и завершаю работу



    Вот этот вызов CALL AAA вешает систему. Хотя не должен никаким образом.
    Если убрать из процедуры IM2 команду CALL AAA, то всё работает.
    Почему?

    Я уже все мозги сломал, пытаясь понять
    Последний раз редактировалось Prusak; 24.12.2014 в 22:20.
    Заяц-прусак
    zxbyte.ru- компьютер Байт и прочий хлам

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

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

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

Ваши права

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