Как написать игру для ZX Spectrum на ассемблере


         

ПОДГОТОВКА ЭКРАНА К РАБОТЕ ИЗ АССЕМБЛЕРА



ПОДГОТОВКА ЭКРАНА К РАБОТЕ ИЗ АССЕМБЛЕРА

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

Прежде всего необходимо задать постоянные атрибуты. Сделать это можно по-разному, но проще всего рассчитать байт атрибутов и поместить его в системную переменную ATTR_P по адресу 23693. Напомним, что в байте атрибутов биты 0..2 определяют цвет «чернил» INK, биты 3..5 отвечают за цвет «бумаги» PAPER, а 6-й и 7-й биты устанавливают или сбрасывают соответственно атрибуты яркости BRIGHT и мерцания FLASH. Поэтому требуемое значение цвета можно подсчитать по формуле

INK+PAPERґ8+BRIGHTґ64+FLASHґ128

Так для

INK 6: PAPER 0: BRIGHT 1: FLASH 0

искомый байт будет равен

6+0ґ8+1ґ64+0ґ128=70

А если вам лень считать, можете поступить проще: очистите экран и введите с клавиатуры последовательно две строки

PRINT INK 6; PAPER 0; BRIGHT 1; FLASH 0; " " PRINT ATTR (0,0)

В верхнем левом углу экрана появится черный квадратик, а под ним - искомое число 70.

Теперь остается полученное число поместить в ячейку с адресом 23693, то есть выполнить инструкцию, аналогичную оператору Бейсика POKE 23693,70. Но вот беда - микропроцессор Z80 не располагает командами пересылки в память или из памяти непосредственных значений. Поэтому такую простую операцию приходится выполнять в два захода: сначала число нужно поместить в аккумулятор (и только в аккумулятор - никакой другой регистр для этого не подходит!), а затем значение из него переписать в ячейку. Команда записи в память очень напоминает загрузку регистров, только адрес или метка в этом случае заключается в круглые скобки. То есть предложение «загрузить ячейку с адресом 23693 значением из аккумулятора» записывается как LD (23693),A. Обратите внимание, что данный тип команд может выполняться только с регистром A!



Содержание  Назад  Вперед