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 и Николая Амосова.

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


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

Похожие статьи:
На досуге - Рассказ "Хреновый диск".
Письма - Размышления о недостатках клавиатуры Спектрума.
Новости - MORTAL KOMBAT 128K BY AWS/MAFIA уже закончен!
Опрос - результаты анкетирования 45 Спектрумистов.
Авторы - помощь: описание оболочки.

В этот день...   21 ноября