ZX Guide #01
27 ноября 1998

Ассемблер - Этюды

<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
   Убедились,что вам всю жизнь вешали лап-
шу на уши?



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

Об игрушках - Doom by Digital Reality

Об игрушках - Ikari warriors

Об игрушках - Демо-версия игры Wolfenstein 3D

Ассемблер - Краткий урок ассемблера для ламеров

Ассемблер - Этюды

Ликбез - горе от ума: о выводе экрана за прерывание

Ликбез - Никогда! обзор ассемблеров: EditAs,Zeus,GENS,TASM,PASM,ZX-Asm,MASM, XAS,ALASM,IS-DOS Assembler

TR-DOS - Функции TR-DOS

Железо - расширяем экран спектрума методом "тыка"

Рабочий стол - Описание редактора AC Edit v0.09

Рабочий стол - Теневой многотекстовый ассемблер-отладчик ALASM v4.1 Краткое описание

Интервью - воспоминания Alone Coder

Отдохнем - анекдоты

Отдохнем - БИЛЛ - ГЕРОЙ ГАЛАКТИКИ (1)

Отдохнем - Аркадий Стругацкий, Борис Стругацкий: Чрезвычайное происшествие

Почтовый ящик - обьявления

Управление - Страничка помощи

Авторы - авторы журнала

От редактора - Мы выпустили этот журнал чтобы принести массу информации, которой не дают остальные журналы

Как я это сделал - Как я делал этот журнал


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

Похожие статьи:
Реклама - Пpодам, куплю ,обменяю пpогpаммы для Spectrum.
Новости - NЕМО выпущена модель KAY-1024, CКОРПИОН выпущена первая опытная партия GМX, DIGIТAL RЕALIТY выпущен обзорный фильм по Еnlight'97, LD приступил к созданию новой версии ассемблера SТОRМ 2.0.
Anigdot №41 - Да, да, да народ, НО что же я вам сказать-то хотел. Кто угадает тому приз - дискетка с BUBBLER'ом!
Куда пойти учится? - Cегодня я расскажу вам об одном замечательном учебном заведении - Русском Гуманитарно-Техническом Колледже "Тантал".
Обмен опытом - Особенности видеоконтроллера ZX Spectrum (для программистов).

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