Сколько смотрю на этот алгоритм, не могу понять, как можно восстановить испорченные стеком данные.
С моей точки зрения, сделать это на 100% - это не возможно.
Пример.
Есть на экране картинка. Я с помощью стека вношу в неё изменения.
Только-что полностью закончил вывод спрайта, и собираюсь восстановить указатель стека, который в данный момент указывает на фоновую картинку под выведенным спрайтом... И тут пришло оно... прерывание... Адрес возврата из прерывания пишется в стек, т.е. прямо на мою фоновую картинку, о содержимом затёртого стеком ни кто, ни как знать вообще не может...
Подпрограмма "восстановления" в прерывании загоняет за место двух затёртых байт фоновой картинки содержимое пары ВС (если я правильно понял), и вот на фоновой картинке под спрайтом появляется артефакт...
А если я только занёс в ВС данные для спрайта, но не выполнил PUSH BC... и произошло прерывание, то оно сделает это за меня, испортив два предыдущих байта в спрайте?
Выход только один, в своих подпрограммах вывода спрайта, постоянно запрещать и разрешать прерывания... а будет ли при этом выигрыш от использования стека, вот в чём вопрос ?





Ответить с цитированием