Deja Vu #0A
30 сентября 2000

Программирование - быстрая процедура печати спрайтов через стек от WoodlandStudio.

__________________________________________

(C) Natan/Woodland Studio
__________________________________________

              Здравствуйте!

   Пишет  вам  Natan aka Андрей А.Тимофеев
из WoodlandStudio, что  в  славном  городе
Лесосибирске  на  берегу великой реки Ени-
сей. Хочу  предложить вашему вниманию свою
первую (надеюсь, что не последнюю) неболь-
шую заметку.
   Итак,начнем. Ни для кого не секрет, что
самый быстрый вывод на экран осуществляет-
ся  через стек. Я рассмотрю только быструю
печать спрайтов.

  Вот типичный пример:

в SP - адрес данных спрайта,
в HL - адрес в экране,
       ld sp,SpriteAddress
       ld hl,ScreenAddress

       pop de    ; сняли данные в формате МАСКА, ДАННЫЕ
       ld a,(hl) ; взяли байт с экране
       and d     ; наложили маску
       or e      ; и данные
       ld (hl),a ; поместили на экран

       и так далее.

   Может вы  вспомните  что-то  еще. Обще-
признанным недостатком таких процедур  яв-
ляется  невозможность их работы при разре-
шенных прерываниях. Объясню почему - пото-
му  что кончается на "у". А если серьезно,
то  происходит следующее. В момент прихода
прерываний  процессор помещает на стек ад-
рес  возврата  из  ISR  (Interrup  Service
Routine), а стек в данный момент указывает
на данные спрайта, как результат последние
разрушаются,  спрайту каюк. Обычно в таких
случаях  прерывания  просто  запрещают. Но
что делать если, к примеру, на прерываниях
висит проигрыватель  музыки. В ZX-Format'e
8, в статье "эпопея" приводятся  два реше-
ния данной проблемы:

   1. Держать  в памяти по 2 копии каждого
спрайта  или создавать копию спрайта перед
его  печатью  через стек. Как вы понимаете
этот  способ  не  рационален  ни  в  плане
скорости, ни в плане быстродействия.

   2. Автор  этого  приема  В. Медноногов.
Применил   он  данный  прием  в  крутой  и
рулезной игрухе "Черный  Ворон"  (там  все
спрайты  печатаются  через  стек). Так как
сам   автор   (по  моим  данным)  разрешил
свободное  распространение и использование
игры, то,  как  говорится,  получите. Ниже
приведено   начало   процедуры   обработки
прерываний  из  игры  ЧВ. Для  того, чтобы
использовать  этот код вы должны учитывать
следующие моменты:
  а) процедура обработки прерывания должна
иметь собственный стек - StackIM2;
  б) читать  данные  со стека можно только
регистровой парой DE.

   Ну, вот и  все  на  сегодня,  смотрите,
разбирайтесь. Бог  в  помощь  и Spectrum в
руки...

ISR     ex de,hl          ; начало процедуры обр-ки прерываний
                          ; именно этот адрес помещайте в
                          ; вектор прерываний
        ex (sp),hl        ; восстановим поврежденные данные
        ld (SaveRET+1),hl ; сохраним адрес возврата из ISR
        ex de,hl
        pop de
        ld (SaveSP+1),sp  ; сохраним стек программы
        ld sp,StackIM2    ; переустановим стек
        call mainISR      ; вызов основного обработчика IM2
SaveSP  ld sp,0
        ei                ; разрешим прерывания так,как они были
                          ; автоматически запрещены
SaveRET jp 0

mainISR push все регистры
        ...
        pop все регистры
        ret

       Хочу поделиться с вами одной полез-
ной процедурой. Одно время, занимаясь про-
граммированием   ВГ-93,   я  столкнулся  с
проблемой чтения регистра состояния (#1f).
В результате поиска обнаружил аж три реше-
ния этой задачи (у Ларченко и Родионова, в
ZX-Ревю  -  при помощи прерываний, у Рощи-
на),  но ни одно из них меня не удовлетво-
рило. Тогда я занялся подробным исследова-
нием ПЗУ ТР-ДОС. В результате вот, что по-
лучилось:

; чтение регистра состояния ВГ-93
; входные данные отсутствуют
; выход: a - содержимое регистра состояния
; прерывания на выходе разрешены,
; но можно и запретить
in_1f
      di
      ld a,(Trk)
      ld d,a
      ld a,(#5cc2)
      ld (_5cc2),a
      ld a,(#5ccd)
      ld (_5ccd),a
      ld hl,(#5cc3)
      ld (_5cc3),hl
      ld hl,(#5d02)
      ld (_5d02),hl
      ld hl,(#5d04)
      ld (_5d04),hl
      ld hl,#2740
      jp dos
ret
      pop hl
      pop hl
      pop hl
      pop hl
      pop hl
      pop hl
      ld a,(#5ccd)
      push af
      ld a,(_5cc2)
      ld (#5cc2),a
      ld a,(_5ccd)
      ld (#5ccd),a
      ld hl,(_5cc3)
      ld (#5cc3),hl
      ld hl,(_5d02)
      ld (#5d02),hl
      ld hl,(_5d04)
      ld (#5d04),hl
      pop af
      ei
      ret
dos
      push hl
      jp #3d2f
_5ccd db 0
_5cc2 db 0
_5cc3 dw 0
_5d02 dw 0
_5d04 dw 0

Trk   db 0 ; текущая дорожка

   А теперь, для лучшего понимания вышена-
писанного, приведу фрагмент из ПЗУ ТР-ДОС:

#2740
      in a,(#1f)
      ld (#5ccd),a
      ld e,d
      push de
      ld a,e
      out (#7f),a
      ld a,#18
      call #3d9a
      . . . . . .
#3d9a
      out (#1f),a
      push hl
      rst #20
      dw #1f54
      . . . . . .
#0020
      jp #2f72
      . . . . . .
#2f72
      ld (#5d02),hl
      ld (#5d04),de
      pop hl
      ld e,(hl)
      inc hl
      ld d,(hl)
      inc hl
      push hl
      ld hl,#3d2f
      push hl
      push de
      ld hl,#5cc2
      push hl
      ld hl,(#5d02)
      ld de,(#5d04)
      ret

   Для  предотвращения недоразумений сооб-
щаю, что  у  меня ZS-Scorpion 256 Turbo+ с
ПрофПЗУ версии 3 с чем-то.

Андрей А. Тимофеев aka Natan from Woodland
Studio
mailto: ws_mason@mail.ru
------------------------------------------



Другие статьи номера:

Аперитивчик - управление оболочкой журнала.

Аперитивчик - вступление: много раз ставился вопрос о прекращении выпуска пос ледующих номеров Deja VU...

Тема - Новый ZX Spectrum: рассуждения на тему Спектрума нового поколения.

Тема - Бесплатный сыр: что такое shareware программы и как на них заработать.

Тема - Кибер война: о том как Русские Хакеры похищают военные секpеты США.

Тема - Russian ZX: история создания Российского спектрума.

Тема - Теория журналостроения - часть №2. Как самому сделать журнал.

Капля припоя - Схема #1FFD ON/OFF для SCORPION ZS 256 на основе схемы опубликованной в ZX Format.

Капля припоя - схема 128 цветов на ZX Spectrum'е.

Капля припоя - схема Чтение порта #7FFD на ZS Scorpion.

Капля припоя - схема ZS Scorpion 1024.

Капля припоя - как взламывать Телефонные карточки.

Капля припоя - схема цифрового индиктора треков для Дисковода.

Капля припоя - подключение HD дисковода к ZX Spectrum.

Капля припоя - схема индикации записи и чтения на дисковод.

Капля припоя - О проблеме в прошивке расширенной клавиатуры (в "таганрогской" схеме) в IS-DOS.

Капля припоя - схема Kempston Mouse Interface (v2.1) на БИС KP580BB55A!

Капля припоя - Юстировка головки дисковода FDD 3,5".

Software - обзор новых игра для Спектрума: 8-й отдел, Xor 2000, Цезарь, Пасьянс "Пирамида", Aliens.

Software - обзор новых игра для Спектрума: Tower Pod и текстовая адвентюра Кащеева Цепь.

Software - описания редактора звуков CYBERAX Sound Editor v1.0.

Программирование - процедура печати сообщений в нижних строках экрана.

Программирование - процедура определения наличия диска в дисководе.

Программирование - решение проблемы 2000 года в IS-DOS.

Программирование - Доработка GLOBAL COMMANDER'а.

Программирование - Загрузчик для рабочей дискеты.

Программирование - быстрая процедура печати спрайтов через стек от WoodlandStudio.

Программирование - некоторые вопросы создания файловых оболочек на SPECCY и обзор SPECTRUM'овских DOS'в.

Программирование - BOOT изнутри №2 потенциальные глюки и недостатки...

Программирование - об архивировании - алгоритмы, производящие сжатие без потерь.

Программирование - Качесвенная процедура конверсия ZX картинки в ASCII.

Программирование - "цветные" точки и линии, градиентная заливка, конверсия в 256 цветов.

Another World - новости из мира PC.

Доска почета - Антология компьютерных журналов для ZX Spectrum.

Доска почета - Точка зрения: системная Шина ZX Spectrum.

Доска почета - печальная история жизни Владимирской группы REMEDY, так и не выпустившей Героев на спектруме.

Доска почета - о различных находках и разгаданных секретах нашего любимого и непревзойденного компьютера ZX Spectrum.

Доска почета - Почта №1: открытое письмо Дмитрия Кленова об информационном голоде на ZX Spectrum.

Доска почета - Почта №2: критика от Blade/Triumph.

Семь и 1/2 - посмеемся: Анекдоты пpо ламеpов и юзеpов, а также pеальные звонки в слyжбy тех. поддеpжки.

Семь и 1/2 - посмеемся: Анекдоты пpо ламеpов и юзеpов, а также pеальные звонки в слyжбy тех. поддеpжки №2.

Семь и 1/2 - Винни Пух 2.

Семь и 1/2 - Компьютеры в кино... 25 характерных особенностей компьютеров, показываемых в голливудских кинофильмах.

Пробы пера - Великая летопись кунгов - новелла по игре Черный Ворон.

Пробы пера - рассказ "разбуженная магия".

Пробы пера - Рассказик о SPECCY...

Пробы пера - рассказ "Эликсир Зверя".

Пробы пера - Поэзия.

Реклама - куплю/продам ZX Spectrum/Спектрум.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Перекресток драконов - Dungeons & Dragons (первая глава книги об адвентюрных играх).
Юмор - "Hовые русские" :) - "герои нашего времени". :) Hу, не только они. ;-)
Сделай сам - исправление программы для форматирования дисков FAST FORMAT'а.

В этот день...   20 февраля