#

Программирование - Несколько коротких и быстрых процедур.

<b>Программирование</b> - Несколько коротких и быстрых процедур.
                 Этюды
 Alone Coder

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

   Изменение  в казалось бы уже классичес-
кой процедуре DOWN HL,которя,как известно,
рассчитывает адрес байта на экране,лежаще-
го на пиксель ниже указанного в HL:
      Было:             Стало:
     INC H             INC H
     LD A,H            LD A,H
     AND 7             AND 7
     JR NZ,EXIT        JR NZ,EXIT;CY=0
     LD A,L            LD A,L
     ADD A,32          ADD A,32
     LD L,A            LD L,A
     JR C,EXIT         JR C,EXIT;CY=1
     LD A,H            LD A,H
     SUB 8             ADD A,-8
     LD H,A            LD H,A;CY=1
EXIT ...          EXIT ...
   В этом варианте всё осталось по-прежне-
му, за исключением того,что флаг CY теперь
указывает  на пересечение границы текущего
знакоместа. В процедуре UP HL можно произ-
вести аналогичное изменение:вместо ADD A,8
поставить SUB -8.

   <Точка Старых>: по координатам,заданным
в регистрах L=y, E=x, в произвольном месте
экрана(и даже за экран)за 58(!)тактов ста-
вится точка.Регистр C равен старшему байту
адреса таблиц('TABLE), регистр D=C+2.
     LD H,C
     LD A,(DE);x/8┐
     INC D        ├даёт младший байт
     OR (HL);L(y) ┘
     INC H
     LD H,(HL);H(y)
     LD L,A
     LD A,(DE);byte(x)
    (X)OR (HL);метод постановки точки
     LD (HL),A
   Если вместо последних 2 команд вставить
AND (HL),то это будет функция POINT. Чтобы
процедура работала многократно, в конце её
поставьте DEC D. Таблицы генерируются сле-
дующей программой:
     LD HL,TABLE+256
     LD DE,#4000
GEN0 LD (HL),D  ┐
     DEC H      │
     LD (HL),E  │
     INC H      │
     DOWN DE    │1-я
     LD A,D     ├ и
     SUB 88     │2-я
     JR NZ,$+3  │
     LD D,A     │
     INC L      │
     JR NZ,GEN0 ┘
     INC H
     LD A,128
GEN1 LD (HL),E  ┐
     INC H      │
     LD (HL),A  │
     DEC H      │3-я
     RRCA       ├ и
     JR NC,$+3  │4-я
     INC E      │
     INC L      │
     JR NZ,GEN1 ┘

   Фрагмент программы, позволяющий за одни
и те же 19 тактов выполнить / не выполнить
семитактовую команду (Z - выполнять, NZ -
не выполнять):
     JR NZ,$+4
     JR EXIT
     <команда>
EXIT ...

   Быстрая печать буквы 6x8 (экран в DE):
     PUSH DE
     LD L,A
     LD B,C
     LD A,2
     RRCA
     DJNZ $-1
     LD (PRN+1),A
     LD H,'FONT
     LD B,8
PRGO PUSH HL
     LD L,(HL)
PRN  LD H,1
PR1  ADD HL,HL
     ADD HL,HL
     JR NC,PR1
     LD A,(DE)
     OR H
     LD (DE),A
     INC E
     LD A,L
     LD (DE),A
     DEC E
     INC D
     POP HL
     INC H
     DJNZ PRGO
     POP DE
   Если шрифт упирается в 0, то уберите LD
B,8,а DJNZ PRGO замените на JR NZ,PRGO.
   Регистр C должен содержать 7,5,3 или 1,
причем  7 соответствует нулевой координате
буквы внутри знакоместа(x mod 8=0). Букв в
шрифте 256,и все они прижаты к левому краю
(можно сдвинутые на одну точку вправо).Как
надо изменять C:
     LD A,C
     SUB 6
     JR NC,$+5
     INC E
     AND 7
     LD C,A

   И,наконец,коснусь всем уже задолбавшего
ZXревюшного вычисления адреса буквы в ПЗУ:
      Было:             Стало:
     LD L,A            LD L,A
     LD H,0            ADD HL,HL
     ADD HL,HL         LD H,15
     ADD HL,HL         ADD HL,HL
     ADD HL,HL         ADD HL,HL
     LD BC,15360
     ADD HL,BC
   Убедились,что вам всю жизнь вешали лап-
шу на уши


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

Похожие статьи:
От авторов - Редакция.
Werewolves for All - poшлa целaя неделя с мoментa выхoдa Lprint#05, a oтветoв нa aнкету пpишлo oчень мaлo.
Нострадамус - Гонь от Мишеля Нострадамуса (часть 1).
Мемуары - Magic Soft в цифрах и фактах.
Глас божий - ААА требуются кодеры, музыканты и художники для создания мегадемо.

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