ZX Review #7-8-9-10
08 ноября 1997

Ретро - 40 лучших процедур: Составление списка переменных.

<b>Ретро</b> - 40 лучших процедур: Составление списка переменных.

    8.5. Составление списка
          переменных

  Длина: 94
  Количество переменных: 0
  Контрольная сумма: 10295
  Назначение:  эта  подпрограмма
составляет список имен всех  пе-
ременных, имеющихся в  настоящий
момент в памяти.
  Вызов программы:
     RANDOMIZE USR адрес
  Контроль ошибок: если перемен-
ных в памяти нет, программа воз-
вращается в BASIC.
  Комментарий: это  большая  по-
мощь при отладке  программ, осо-
бенно длинных и сложных.

   ЛИСТИНГ МАШИННЫХ КОДОВ
МЕТКА  АССЕМБЛЕР      ЧИСЛА ДЛЯ ВВОДА147.

       RES 0,(IY+2)  253 203 2 134
       LD HL,(23627)  42  75  92
N_VAR  LD A,13        62  13
       RST 16        215
       LD A,32        62  32
       RST 16        215
       LD A,(HL)     126
       CP 128        254 128
       RET Z         200
       BIT 7,A       203 127
       JR Z,BIT 5     40  62
       BIT 6,A       203 119
       JR Z,N_BIT     40  31
       BIT 5,A       203 111
       JR Z,STR_AR    40   9
       SUB 128       214 128
       LD DE,19       17  19   0
PRINT  RST 16        215
       ADD HL,DE      25
       JR N_VAR       24 225
STR_AR SUB 96        214  96
       RST 16        215
       LD A,36        62  36
BRACK  RST 16        215
       LD A,40        62  40
       RST 16        215
       LD A,41        62  41
POINT  INC HL         35
       LD E,(HL)      94
       INC HL         35
       LD D,(HL)      86
       INC HL         35
       JR PRINT       24 234
N_BIT  BIT 5,A       203 111
       JR Z,ARRAY     40  19
       SUB 64        214  64
       RST 16        215
NEXT_C INC HL         35
       LD A,(HL)     126
       BIT 7,A       203 127
       JR NZ,LAST_C   32   3
       RST 16        215
       JR NEXT_C      24 247
LAST_C SUB 128       214 128
JUMP   LD DE,6        17   6   0
       JR PRINT       24 211
ARRAY  SUB 32        214  32
       JR BRACK       24 216
BIT 5  BIT 5,A       203 111
       JR NZ,JUMP     32 243
       ADD A,32      198  32
       RST 16        215
       LD A,36        62  36
       JR POINT       24 211
2
  Как она работает:
  Бит 0 байта  по  адресу  23612
сбрасывается, чтобы символы, вы-
водимые на  печать, появились  в
верхней части экрана. В HL  заг-
ружается адрес области  перемен-
ных. В  аккумулятор  загружается
признак ENTER и вызывается  под-
программа ПЗУ по  адресу  16.  В
аккумулятор  затем   загружается
код пробела и  вновь  вызывается
та же самая подпрограмма ПЗУ.
  В аккумулятор загружается байт
по адресу в  HL.  Если  значение
этого байта равно  128, програм-
ма  возвращается  в  BASIC, т.к.
достигнут конец области перемен-
ных.
  Если бит 7 аккумулятора  уста-
новлен в 0, программа  переходит
к BIT 5, т.к. встретились  стро-
ковая переменная или  число, имя
которых состоит только из  одной
буквы. Проверяется 6 бит аккуму-
лятора. Если он равен 0, делает-
ся переход к N_BIT, т.к. опреде-
лены массив или число, имя кото-
рых более, чем одна буква.  Если
бит  5  аккумулятора  равен   0,
программа переходит к STR_AR.
  Программа достигает этой  точ-
ки,  если  найденная  переменная
является управляющей  переменной
цикла FOR/NEXT. В этом случае из
аккумулятора  вычитается  128  -
результатом является код  симво-
ла для вывода на печать. В  пару
DE загружается число  19, указы-
вая на следующую переменную  при
прибавлении к HL. Символ в акку-
муляторе выводится на печать, DE
прибавляется к  HL, а  программа
возвращается к поиску  следующей
переменной N_VAR.
  Если программа находит строко-
вый массив  (достигает  STR_AR),
то  из  аккумулятора  вычитается
число  96, что  дает  код  имени
найденного массива.  Это  значе-
ние  выводится  на  печать,  ис-
пользуя подпрограмму  ПЗУ.  Знак
доллара и левая скобка  выводят-
ся на  печать, а  в  аккумулятор
загружается код  правой  скобки.
HL  увеличивается,  указывая  на
байты, содержащие длину массива.
Это значение загружается  в  DE,
так что прибавление  к  HL  дает
адрес следующей переменной.  Де-
лается переход к PRINT, где пра-
вая скобка выводится на печать и
DE прибавляется к HL.
  В процедуре N_BIT  проверяется
бит 5 аккумулятора. Если он  ус-
тановлен в 0, т.е. это  числовой
массив, то происходит переход  к
ARRAY. Если он установлен  в  1,
то это числовая  переменная, имя
которой длиннее, чем одна  лите-
ра. Из  аккумулятора  вычитается
64, а  полученный  в  результате
символ выводится на печать.  За-
тем  программа  выполняет  цикл,
выводя на печать  каждый  встре-
тившийся символ до тех пор,  по-
ка находится хоть один символ  с
битом 7, установленным в  1.  Из
кода  этого  последнего  символа
вычитается 128, в DE  загружает-
ся смещение для следующей  пере-
менной, а программа переходит  к
PRINT.
  Если массив найден,  32  вычи-
тается  из  аккумулятора,  чтобы
получить правильный  код  и  де-
лается переход на поиск скобок -
BRACK.
  В процедуре BIT 5, если найде-
но  число,  имя  которого  имеет
только  одну  букву,   программб
возвращается к JUMP.
  Окончание  подпрограммы  рабо-
тает, когда встречающиеся  пере-
менные - строковые.  Прибавление
32 к аккумулятору дает  код  для
вывода на печать. Наконец, в ак-
кумулятор загружается код  знака
доллара  и  делается  переход  к
POINT.



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

TR-DOS для начинающих - Окончание.

Компьютерная новелла - Prince of Persia.

Компьютерная новелла - Лазерная бригада (по игре Laser Squad).

Перекресток драконов - Игра Rapscallion.

Перекресток драконов - Игра The Runes of Zendos.

Перекресток драконов - Игра The Saga.

Перекресток драконов - Игра Witch's Cauldron.

Перекресток драконов - Создаём Адвентюру. Обзор редакторов.

Перекресток драконов - Создаём словарь к Адвентюрной игре.

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

Программы, которые мы выбираем - О замеченных шероховатостях в работе некоторых программ и пожелания к следующим версиям.

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

Программы, которые мы выбираем - Несколько предложений по усовершенствованию ассемблера.

Программы, которые мы выбираем - Предложения по доработке ZX Word v2.5.

Программы, которые мы выбираем - Программа "Эмулятор Спектрума" v1.2.

Программы, которые мы выбираем - Что хотелось бы иметь в идеальном ассемблере.

Ретро - 40 лучших процедур: Копирование данных в памяти.

Ретро - 40 лучших процедур: Обмен токена.

Ретро - 40 лучших процедур: Определение адреса БЕЙСИК-строки.

Ретро - 40 лучших процедур: Определение длины БЕЙСИК-программы.

Ретро - 40 лучших процедур: Определение размера свободной памяти.

Ретро - 40 лучших процедур: Поиск и замещение строки.

Ретро - 40 лучших процедур: Поиск подстроки.

Ретро - 40 лучших процедур: Поиск строки.

Ретро - 40 лучших процедур: Составление списка переменных.

Ретро - 40 лучших процедур: увеличение и копирование экрана.

Ретро - 40 лучших процедур: Удаление REM-строк.

Ретро - 40 лучших процедур: Удаление блока программы.

Советы экспертов - Игра Fredloader.

Советы экспертов - Игра Robin of Sherwood: The Touchstones of Rhianon.

Советы экспертов - Игра Scorpions: Die Machines.

Советы экспертов - Игра Terropods.

Страничка iS-DOS - Описание рестартов системы IS DOS.

Форум - Алгоритм распознавания символов.

Форум - Время выполнения недокументированных команд процессора Z80.

Форум - Концепция экрана высокого цветового разрешения.

Форум - Несколько Pokes к играм. Программа Hacman96.

Форум - По поводу новых DOS и BIOS для Спектрума.

Форум - Программа Multicolor на любой модели компьютера. Использование 2-го экрана для Multicolor'а. Демонстрация текста. Электронные журналы.

Форум - Проект ZX Config.

Форум - Усовершенствование Art Studio. Идеи относительно компрессии файлов.

Форум - Эмулятор ZX Spectrum на IBM. По поводу шестнадцатеричной системы счисления. Программа ZX-Stars. Странности в Elita

Форум - Эффекты на бордюре и Multicolor.

Читатель-читателю - ZX Spectrum 128 - новые возможности, новые проблемы.

Читатель-читателю - Группа 'Light'. Спектрум и экспертная система.

Читатель-читателю - Драйвер принтера для Scorpion'а.

Читатель-читателю - Печать чисел в различных системах счисления.

Читатель-читателю - Программирование аркадной игры со скроллингом экрана.

Читатель-читателю - Процедура печати меток ассемблера XAS для монитора-отладчика STS 4.3.

Этюды - Атрибутная бегущая строка. "Гасилка" экрана. Упрощенный вариант процедуры "Занавес". Процедура гащения картинки. Процедура проявления картинки по точкам.

Этюды - Графический эффект "цветные полосы".

Этюды - Драйвер экрана для печати по 64 символа в строке.

Этюды - Комплект защит загрузчиков.

Этюды - Обращение к диску в режиме IM 2. Работа с диском нестандартного формата.

Этюды - Печать символа, увеличенного в 8 раз. Программа "наливания" экрана. Процедура гашения экрана по точкам. Очистка экрана как в Terminator'е. Поиск последовательности символов в памяти. Система перекодировки символьного набора.

Этюды - Программа - каталогизатор дисков.

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

Этюды - Программа вывода картинки.

Этюды - Программа зажигания спрайта.

Этюды - Программа очистки заданного окна экрана.

Этюды - Программа сортировки массива по возрастанию. Процедура заполнения экрана заданным атрибутом. Процедура проявления картинки. Эффект летящих навстречу звезд. "Душ", идущий из верхнего левого угла экрана. Процедура "осыпания" картинки по пиксельным линиям. Программа "вытягивания" картинки под углом в 45 градусов. Три процедуры "Scroll".

Этюды - Процедура печати чисел.

Этюды - Процедура прорисовки символа с помощью атрибутов.

Этюды - Процедура проявления картинки. Fade-OUT эффект (картинка уходит за края экрана). Графический эффект "Фонтан". Fade-OUT эффект, имитирующий выключение телевизора. Процедура "зажигания" картинки. Программа плавной прорисовки картинки.

Этюды - Процедура рисования линии.

Этюды - Процедура составления оптимальной таблицы символов.

Этюды - Скроллинг строк текста в заданном окне. Атрибутный скроллер. Диагональный скроллинг.

Этюды - Спрайтовый скроллер. Процедуры проявления экрана.

Этюды - Укороченная процедура индикации амплитуды каналов муз. сопроцессора. Способ вычитания константы из регистровой пары HL.

Этюды - Формула для вычисления дня недели.


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

Похожие статьи:
Компот - Рассказ "С Новым годом!"
От авторов - Итак, добро пожаловать в первый номер нашей, так сказать, газеты!
Оглавление - содержание.
Editorial - создатели журнала.
Железо - FLASH-color на одной м/с.

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