Info Guide #12
31 декабря 2017

Код - этюды: вызов процедур по списку адресов.

<b>Код</b> - этюды: вызов процедур по списку адресов.
           Этюды
                    1.
              (от Screw'а)
   Обвязка  для  вызова шитого кода (вызов
процедур  по списку адресов) без использо─
вания стека:
     LD E,(HL)
     INC L
     LD D,(HL)
     INC L
     EX DE,HL
     JP (HL)
   Предполагается, что  каждая  вызываемая
процедура сделаетEX DE,HL ,когда ей удоб─
но.
   Если можно использовать стек, то доста─
точно RET или (если процедуры сами перес─
тавляют стек)LD SP,HL:INC L,L:RET либо LD
SP,HL:INC H:RET  при "вертикальном" распо─
ложении  шитого кода. Если жеHL занят, то
можноLD IX,next:JP patched_addr:next.

                    2.
               (от JtN'а)
   Как проинвертировать на Бейсике1 бит в
8-битной переменной:
     POKE 16384,s
     PLOT OVER 1;q,175
     LET s=PEEK 16384
   А  чтобы взять старший или младший байт
двухбайтного  числа n, достаточно сделать
RANDOMIZE n  и читатьPEEK 23670 (младший) 
и23671 (старший). А через  RANDOMIZE N*8:
... PEEK 23670/8  можно сделать отбрасыва─
ние трёх старших битов - полезно при опро─
се клавиатуры.

                    3.
                (от LVD)
   Если у вас переменные сохраняются в ко─
де, а их начальные значения не важны, то:
     LD BC,#0101
     LD DE,#1111
     LD HL,#2121
пакуются лучше, чем
     LD BC,0
     LD DE,0
     LD HL,0
   Это  можно  распространить и наLD r,n,
SUB n, CP n, и в каком ещё виде бывают ин─
лайновые переменные.

                    4.
              (от Fyrex'а)
   Как сделать цикл с 16-битным счётчиком?
Обычно делают так:
     DEC BC
     LD A,B
     OR C
     JP NZ,loop
(6 байт, 24 такта)
   А вот код из старых игр,выходит по255:
     DEC BC
     INC B
     DJNZ loop
(4 байта, 23 такта)
   Если есть лишняя регистровая пара:
     ADD HL,DE;-1
     JP C,loop
(4 байта, 21 такт)
   Если  не важна неравномерность скорости
(но  начальное  содержимое  счётчика  надо
подготовить):
     DJNZ loop
     DEC C
     JR NZ,loop
(5 байт, в среднем 13 тактов с копейками)
   Если одновременно надо инкрементировать
(или декрементировать)HL:
     CPI(или CPD)
     JP PE,loop
(5 байт, 26 тактов с экономией INC/DEC HL)

                    5.
           (от Alone Coder'а)
  DS .(#E0-$) - в ALASM'е выравнивание на
ближайший вперёд#XXEO. В других ассембле─
рах  вместо  точки можно использовать&255
или встроенные функции ассемблера.
  DS -$&mask - аналогALIGN mask+1 (алас─
мовский вариант дляALIGN 256:DS .(-$) )

                    6.
                (от LVD)
   Сложение двух знаковых 8-битных чисел:
     ADD A,...
     RLCA
     RRCA
     JP PO,$+4;PE=переполнение
     CCF
;CY=9-й бит результата 
   Дальше можно сделатьRRA, чтобы привес─
ти  число  к обычному 8-битовому знаковому
виду делением на2.
   Абсолютную величину знакового 8-битного
числа можно вычислить так:
     XOR A
     SUB H
     RET P
     LD A,H
     RET



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

Помощь - об оболочке: произошли некоторые изменения в кнопках.

Предисловие - от авторов: Прошедшие два года были очень насыщенными.

Комьюнити - ZX Spectrum: Как это было в Рязани (1980-е).

Комьюнити - ZX Spectrum: Как это было в Рязани (1991-1993).

Комьюнити - ZX Spectrum: Как это было в Рязани (1993-1995).

Комьюнити - ZX Spectrum: Как это было в Рязани (1995-1997).

Комьюнити - сценеры шутят.

Код - этюды: вызов процедур по списку адресов.

Код - 3D демы на ZX Spectrum: история развития 3д движков.

Код - 3D движок: оптимизация на прообразе 3D Construction Kit.

Код - 3D движок: фрагменты.

Код - Посекторный движок для 3D-шутера от Destr.

Код - 3D скролл на ZX Spectrum (часть 1).

Код - 3D скролл на ZX Spectrum: реализация (часть 2).

Графика - графические редакторы: Старый софт от Alone Coder'а.

Графика - палитра: Палитровые эффекты в играх.

Музыка - биперные движки: Двоичная модуляция (часть 1).

Музыка - биперные движки: Двоичная модуляция (часть 1).

Системки - история операционной системы CP/M для Спектрума (часть 1).

Системки - история операционной системы CP/M для Спектрума: ограничения (часть 2).

Системки - NedoLang: Начало - самый простой процедурный язык (часть 1).

Системки - NedoLang: Путь к самокомпиляции (часть 2).

Системки - NedoLang: Проклятие языка Си (часть 3).

Системки - NedoLang: Памяти под самокомпиляцию не хватало (часть 4).

Системки - NedoLang: ускорение (часть 5).

Системки - NedoLang: Куда плыть дальше (часть 6).

Металлолом - Знакомьтесь, ATM-turbo 3! ATM-turbo 3 (v8.0) - что это такое и с чем его едят.

Металлолом - Из истории Betadisk'а: Дисковый интерфейс от Technology Research был.

Дикий ум - Компрессия: Первые компрессоры графики на Speccy (часть 1).

Дикий ум - Компрессия: Фичи с эвристикой, Потоковая декомпрессия, Сжатие музыки (часть 2).

Игрушки - От редакции: 2017-й год вышел очень богатым на события.

Игрушки - интервью с автором игры Mickey the Basic game (Sergio).

Игрушки - квест "Неожиданное Путешествие" - взгляд изнутри.

Игрушки - Nomad: интервью с автором скролл-шутера Nomad (Hippiman).

Игрушки - Скроллинг в Evo SDK.

Игрушки - Hints & Tips: Mickey, Nomad.

Мыльница - Errata: ошибки в Info Guide #11, ACNews #65.

Письма - отзывы о журнале от: raver, destr, sirx, survivor, Ellvis, Utz и Николая Амосова.

Об авторах - Авторы журнала.


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

Похожие статьи:
макс барыга - типа реклама.
Письмо №326 - г Ростов-на-Дону
News - Новости, старости: Chaos Construction 2001 состоялся, Pussy стала freeware, новое бумажное издание на спектруме, Raver покинул ряды Phantasy, новая версия эмулятора спектрума Real Speccy, Assembly 2001, новый коммандер Real Commander 2.0, Delirium Tremens уходят со спектрума...
АLKАTRАZ - Нeкoтoрыe крeндeля инoгдa кричaт o тoм, чтo aктивный спeктрумист - этo хoрoшo, a пaссивный - oтстoй.
IS-DOS - пользователям: Краткий путеводитель по системному диску IS-DOS

В этот день...   3 марта