Техника - молодёжи 1990-04, страница 48начальный адрес копируемого отрезка следующей строки. Приращение текущего адреса, равное I — а, загружается в ВС и складывается (по команде с кодом 9) с содержимым IIL. Последующие три команды организуют счетчик заданного числа b циклов. По команде 20 осуществляется переход подпрограммы на начало нового цикла до тех пор, пока в регистре-аккумуляторе А не окажется 0, что означает: все строки числом b благополучно скопированы в резервный участок па- Копировамие видеопамяти широко используется и в игровой программе «МОПСТЕРЛАИД» («СТРАН \ МОНСТРОВ»). Вот некоторые примеры. Чтобы закрасить экран выбранным цветом (например, черным или белым), можно окрасить в данный цвет верхний левый байт экрана и скопировать видеопамять со сдвигом ни единицу. Копирование видеопамяти со сдвигом на число байтов в строке позволяет практически мгновенно нарисовать рамку необходимой толщины. мяти. Отметим, что увеличивается на 1 — а лишь содержимое HL, в DE адрес изменяется по-прежнему на 1. Иными сповами, в буферный участок памяти отрезки строк «укладываются» друг за дружкой без каких-либо пробелов (рис. внизу, с. 44). Это позволяет существенно сэкономить оперативную память компьютера. Обратная операция вызов копии на экран — от рассмотренной отличается, помимо адресов Z1 и Z2, командой с кодом ЕВ, дважды за каждый цикл осуществляющей обмен между DE и HL. Это необходимо, чтобы сложить содержимое DE и ВС, так как специальной команды для этой операции нет. В системе команд отечественного 8:разрядного микропроцессора серии КР 580 отсутствуют многие команды, реализуемые Z80, в частности команда ED ВО, и описанный способ копирования неприменим. Чтобы осуществить пересылку блока, организуем цикл команд, переписывающих содержимое одной последовательности ячеек памяти в другую, призвав в качестве «переписчика» регистр-аккумулятор А. Так мы сможем скопировать строку или ее отрезок. Дальнейший путь нам известен. Приведем возможный вариант подпрограммы — а командах Ассемблера с условно обозначенными адресами и в машинных кодах с адресами для работы на Энтерпрайзе (все команды отечественного микропроцессора входят в систему команд Z80). LHLD (ZI); MOV А,М; INX Н; SHLD (Z1); LHLD (Z2); MOV М,А; INX Н; SHLD (Z2); LDA (Z3); DCR A; STA (Z3); JNZ Z0; LDA (Z4); STA (Z3); LHLD (Z1); XCHG; LHLD (Z5); DAD D; SHLD (Zl); LDA (Z6); DCR A; STA (Z6); JNZ Z0; RET CODE S= HEX $(«2A, 0, 13, 7E, 23, 22, 0, 13, 2A, 2, 13, 77, 23, 22, 2, 3, ЗА, 4, 13, 3D, 32, 4, 13, C2, C9, 12, ЗА, 5, 13, 32, 4, 13, 2A, 0, 13, ЕВ, 2A, 6, 13, 19, 22, 0. 13, ЗА, 8, 13, 3D, 32, 8, 13, C2, C9, 12, С9») Достаточно записать в память два изображения пасти монстра (открытой и закрытой) и поочередно выводить их на экран чтобы создать эффект мультипликации. Чтобы дерево Анчар росло у вас на глазах (и вверх, и вширь, когда оно побеждает человека), также можно воспользоваться приемом копирования. Он позволяет срубить дерево (при этом остается пень) или сделать из Анчара лодку (см. след. стр.). 45 |