Deja Vu #05: Техники использования стека с прерываниями на ZX Spectrum

Авторы статьи

Упомянутые люди

Упомянутые группы/команды

CRG
SoundTrack: SECTOR/SERIOUS S.G.'97 (CMG98)
__________________________________________

(C) RLA/CRG
__________________________________________

ИСПОЛЬЗОВАНИЕ СТЕКА
ПРИ РАЗРЕШЕННЫХ ПРЕРЫВАНИЯХ

Не секрет, что для быстрых манипуляций с графикой в играх и, особенно, в демонстрациях, широко используются команды работы со стеком. Именно с их помощью можно достичь наибольшей скорости работы с графикой. Но, чем круче эффект, тем больше времени он занимает. Возможны случаи, когда эффект не успевает отработать 69888 тактов и происходит прерывание. Адрес возврата выкидывается на стек и безвозвратно портит содержащуюся под ним информацию. Но не все потеряно. Рассмотрим несколько случаев, как можно сохранить эти данные и работать со стеком с включенными прерываниями второго рода.

1. Если происходит очистка или заполнение экрана какими-либо данными, то это не так страшно, ибо при возврате из прерывания продолжится цикл PUSH HL и адрес возврата будет затерт нужными данными.

1.1 Возможно, что стек будет равен 4000h и адрес возврата будет потерян, но этот случай можно проконтролировать, если знать адреса тех точек, в которых это может случиться, и перейти туда не по RET'у, а JP ADDRESS.

Пример:
LD SP,#4020 ;чистим самую
LD HL,#0000 ;верхнюю линию
PUSH HL ;в экране
PUSH HL
PUSH HL
... *16 раз
PUSH HL
PUSH HL
ADR1 LD SP,(SAVESP)
RET

Последний случай возможен, если прерывание вклинится между командами PUSH HL и LD SP,(SAVESP). Обработчик 2 (!) прерываний в таком случае будет выглядеть так :

ORG #BFBF
INT2 DI
LD (TOSP+1),SP
LD SP,INT2-1
PUSH HL
PUSH DE
PUSH BC
PUSH AF
PUSH IX
EXX
EX AF,AF
PUSH HL
PUSH DE
PUSH BC
PUSH AF
PUSH IY

LD HL,(TOSP+1)
LD DE,-#4000
ADD HL,DE
LD A,#C9 ; RET
JR C,OK
LD A,#C3 ; JP
LD (TO_RET),A

... обработка прерывания
POP IY
POP AF
POP BC
POP DE
POP HL
EXX
EX AF,AF
POP IX
POP AF
POP BC
POP DE
POP HL
EI
TOSP LD SP,0
TO_RET DB 0
DW ADR1

2. Есть еще один коварный случай, когда данные при помощи стека не записываются, а считываются. Чаще всего это употребляют, когда на экране двигается большая его часть (TRASH DEMO, ART'98, всевозможные интро к играм). В памяти заранее создается большой спрайт и выводится на экран примерно такой цепочкой байтов :

POP HL
LD (#4000),HL
POP HL
LD (#4002),HL
...
POP HL
LD (#57FE),HL
LD SP,(SAVESP)
RET

В приведенных программах часть экрана успевает переброситься за одно прерывание, и данная проблема не возникает, но бывали случаи, когда работает один эффект, а потом нужно сверху перекинуть окно с пожеланиями или GTX'ами. Если произойдет прерывание, то на стек опять же выкинется адрес возврата и спрайт будет "безвозвратно" испорчен. Именно с таким случаем ко мне обратился один мой знакомый кодер. Спустя некоторое время проблема была решена. Его эффекты работали при разрешенных прерываниях, а графика не портилась.

Обработчик:

ORG #BFBF
INT2 DI
LD (TOSP+1),SP
LD SP,INT2-1
PUSH HL
PUSH DE
PUSH BC
PUSH AF
PUSH IX
EXX
EX AF,AF
PUSH HL
PUSH DE
PUSH BC
PUSH AF
PUSH IY
LD HL,(TOSP+1)
LD E,(HL)
INC HL
LD D,(HL)
LD (_JP+1),DE
... обработка прерывания
POP IY
POP AF
POP BC
POP DE
POP HL
EXX
EX AF,AF
POP IX
POP AF
POP BC
POP DE
POP HL
TOSP LD SP,0
PUSH HL ;Запись
POP HL ;Корректировка стека
EI
_JP JP 0

Рассмотрим возможные случаи, когда может произойти прерывание :

а) между командами POP HL и LD (NN),HL считываемые байты находятся в регистрах HL и перед возвратом будут записаны командой PUSH HL.

б) между командами LD (NN),HL и POP HL данные опять же находятся в HL и восстановятся точно таким же способом. Стоит заметить, что возврат из этого обработчика всегда будет совершаться прямым переходом. Замечу, что в демонстрациях такие обходные трюки со стеком я еще не встречал. Я надеюсь, что эта статья уменьшит работу некоторых ваших эффектов на лишние 10-20 тысяч тактов, которые так мешали сделать ваш эффект на инт быстрее.

Оглавление издания: Deja Vu #05

  • Аперативчик - Max
    Подробные инструкции по управлению интерфейсом DEJA VU, выделены разные методы ввода и команды навигации. Объяснение новых и старых интерфейсов для улучшенного пользовательского опыта. Обсуждение дополнительных функций, таких как фреймовый скроллинг и управление музыкой.
  • Аперативчик - Max
    Обсуждение поддержки машин с памятью более 128к, что привело к наличию отдельных оболочек для систем 128к и 256к. Тестирование проводилось в основном на Scorpion и Profi, предполагается работа на других моделях. Статья содержит инструкции по распаковке исходников и информацию об использовании улучшенных алгоритмов.
  • Тема - M.M.A
    Статья исследует теорию оцифровки звука на ZX Spectrum, акцентируя внимание на процессах дискретизации и квантования. Она предлагает практические советы по конвертации звуковых файлов с использованием определенного оборудования и программного обеспечения. Также даются методы улучшения качества звука с учетом аппаратных ограничений.
  • Тема
    Статья обсуждает инициативу Save Our Scene, направленную на объединение пользователей и разработчиков Spectrum для продвижения дистрибуции ПО и улучшения развития сцены.
  • Устав Ассоциации Amazing Soft Making
    Обсуждение устава ассоциации Amazing Soft Making, в котором изложены ее цели, критерии членства и принципы функционирования.
  • Теория Журналостроения
    Статья содержит подробное руководство для начинающих создателей журналов, сосредотачиваясь на технических аспектах, таких как дизайн интерфейса, управление памятью, форматирование текста и интеграция музыки для публикаций на ZX Spectrum.
  • Капля припоя
    Статья представляет личный опыт покупки и использования устройства General Sound для ZX Spectrum, описывая установку и качество звука. Обсуждаются первоначальные проблемы и восхищение улучшенным звуковым сопровождением в совместимых играх. Автор призывает к дальнейшей адаптации программного обеспечения для устройства и размышляет о мультимедийных возможностях с одновременным использованием оборудования.
  • Капля припоя
    Статья описывает возможности Sound Forge 4.0c для профессиональной обработки звука на ПК, подчеркивая его обширные функции, такие как редактирование звука, эффекты и инструменты восстановления.
  • SOFTWARE
    Статья рассматривает последние разработки программного обеспечения для ZX Spectrum из Самары, включая обновления MAXSOFT SCREEN PACKER, File Commander и новые приложения, такие как S-Terminal.
  • SOFTWARE - Card!nal
    Обзор и прохождение логической графической приключенческой игры 'Операция Р.Р.' с подробными инструкциями по уровням. Обсуждение элементов игры, таких как выбор музыки и графический дизайн. Упоминается участие нового кодера MAX/CYBERAX/BINARY DIMENSION.
  • SOFTWARE
    Обсуждение текущего состояния и эволюции демосцены, подчеркивающее рост 4K интро и предстоящие конкурсы, такие как FUNTOP'98.
  • CODING
    Статья обсуждает техники кодирования на ассемблере для оптимизации прокрутки экрана на ZX Spectrum, включает примеры кода и анализ производительности.
  • CODING - RLA
    Статья рассматривает методы манипуляции со стеком при прерываниях второго рода для графических эффектов на ZX Spectrum. Обсуждаются решения для сохранения целостности данных, когда прерывания нарушают графические операции. Приведены практические примеры для эффективного решения проблем со стеком.
  • КОДИРОВАНИЕ
    Статья описывает паковщик MS-PACK и его DEPACKER, детализируя сценарии использования и предоставляя примеры кода на BASIC и ассемблере для работы с упакованными файлами. Подчеркивается оптимизация производительности, позволяющая распаковку с включенными прерываниями и отделение DEPACKER от упакованных файлов. Дополнительно включены идеи о техниках программирования для загрузки и выполнения BASIC-файлов на ZX Spectrum.
  • КОДИРОВАНИЕ
    Статья обсуждает различные техники кодирования для ZX Spectrum, сосредоточиваясь на выводе спрайтов, алгоритмах поворота и методах оптимизации для повышения производительности.
  • ДРУГОЙ МИР
    Обсуждение эволюции мультимедийных технологий и их влияния на различные области, включая образование и развлечения. Охватываются достижения в аппаратном и программном обеспечении, которые способствовали интеграции аудио, видео и текста. Статья отражает прошлые достижения и предполагает будущее мультимедийных систем.
  • АНО ДРУГОЙ МИР
    Сравнение систем PC и Amiga, подчеркивающее производительность, стоимость программного обеспечения и пользовательский опыт с мультимедийными возможностями.
  • Доска почета
    Интервью с PROGRESS обсуждает их творческий путь на ZX Spectrum и AMIGA, касаясь проблем в демомейкинге и текущего состояния сцены.
  • Доска почета
    Статья описывает деятельность и будущие проекты команды Eternity Industry из Коврова, включая успешные релизы и сотрудничество с другими группами.
  • Доска почета
    Обсуждение фестиваля Artcomp'98, сосредоточенное на его формате участия по почте и правилах для различных конкурсов, включая демо, графику и музыку.
  • Доска почета
    Статья представляет собой глоссарий терминов, используемых в демосцене, объясняя роли, такие как музыкант, программист и художник, а также различные типы демо и эффектов. Она служит полезным ресурсом для понимания терминологии и динамики сообщества. Это описание, направленное на просвещение читателей о жаргоне демосцены.
  • Доска почета
    Статья обсуждает проблемы с поддержкой мыши в различных изданиях ZX Spectrum и разочарование пользователей при столкновении с несовместимостями. Критика разработчиков за несоблюдение стандартов приводит к плохому пользовательскому опыту. Автор подчеркивает важность постоянного улучшения программного обеспечения для сообщества ZX Spectrum.
  • Доска почета
    Статья обсуждает процесс создания триколорных изображений для ZX Spectrum с использованием Photoshop и упрощенного подхода. Описывается, как разделить изображение на RGB-каналы и конвертировать их для использования на Spectrum. Также даны советы по управлению файлами для достижения оптимальных результатов.
  • Доска почета
    Статья обсуждает сравнение и перспективы различных компьютерных систем, акцентируя внимание на сильных сторонах AMIGA по сравнению с PC и призывая ценить все машины.
  • Семь и 1/2
    Статья обсуждает юмористические абсурдности и особенности военного обучения и академической жизни, сочетая сатиру с реальными анекдотами и остроумными наблюдениями.
  • Семь и 1/2
    Статья представляет собой сатирический мануал по методологиям программирования, высмеивая жесткость формальных практик программирования и выступая за более креативный подход к коду.
  • Семь и 1/2
    Инструкция по технике безопасного секса, включая рекомендации по допуску, подготовке, действиям во время и после сеанса, а также действиям в аварийных ситуациях.
  • Семь и 1/2
    Статья обсуждает призыв к талантливому художнику в Краснодаре для группы ZX Spectrum, поднимает вопросы об unethical практике Scorpion по правам на софт и критикует видеообзор E'97.
  • Семь и 1/2
    Статья 'Семь и 1/2' описывает забавное приключение пикника команды редакторов Deja Vu, подчеркивая их товарищество и неудачи при приготовлении шашлыка.
  • Проба пера
    Статья представляет собой юмористическое описание вымышленных приключений Винни-Пуха в взаимодействии с компьютерами и друзьями, обсуждая абсурдность технологий и повседневной жизни.
  • Проба пера
    Статья посвящена новому разделу журнала Deja Vu, посвященному литературе фэнтези и фантастики, включая обзоры книг и участие читателей в создании контента.
  • Реклама
    Статья является рекламной секцией журнала Deja Vu #05, предлагая сотрудничество с дизайнерами и музыкантами для будущих выпусков, а также предлагая различные программное обеспечение и оборудование для ZX Spectrum.
  • Новости
    Статья объявляет о запуске нового журнала AMIGA RULES, посвященного компьютеру AMIGA, на фоне нехватки качественных русскоязычных изданий. Он направлен на предоставление информации о программировании, аппаратном обеспечении, программном обеспечении и играх, а также на формирование сообщества среди поклонников AMIGA. Журнал будет включать материалы от читателей и регулярные обновления о сцене AMIGA.