Д.Ю. Усенков

Электронное зеркало

Один из интересных эффектов, который можно применить в программах на Бейсике, - превращение картинки на экране в её зеркальное отображение. Этого можно легко добиться, перебирая все точки построчно по их координатам в цикле и изменяя соответственно их цвета с помощью операторов PSET и POINT. Но для работы такой программы требуется довольно много времени - сказывается низкое быстродействие Бейсика (и это на специально созданного для БК-0010.01 Быстрого Бейсика, построенного по типу компилятора; сколько же времени потребовалось бы для работы интерпретирующего языка!). Безуспешно попытавшись ускорить процесс путём оптимизации Бейсик-программы, я составил подпрограмму в машинных кодах. Кроме того, в ней я вообще отказался от алгоритма перебора по координатам и замены цвета (это истребовало бы составления программы-аналога POINT). Вместо этого я использовал алгоритм работы с ячейками экранного ОЗУ: производится последовательный построчный перебор пар ячеек, расположенных симметрично относительно середины экрана; выбранные значения помещаются в регистры и преобразуются в свои зеркальные отражения при помощи несложного алгоритма:

    MOV #10,R0   в R0 записано число битов в байте
1$: RORB R4
    ROLВ R1 в R1 после выполнения этой последовательности
                 команд находится зеркальная копия R4
    SOB R0,1$

После этого преобразованные значения меняем местами и возвращаем в выбранные ячейки памяти. При работе этой подпрограммы зеркально отражается верхняя, информационная строка и меняется цвет точек синий на зелёный и обратно. Вот текст в восьмеричных кодах.

010046

010146

010246

010346

010446

012704

077700

012703

000037

010346

010446

061603

010346

111303

012700

000010

106003

106102

077003

012603

062704

000077

166604

000002

010446

111404

012700

000010

106004

106101

077003

012604

110113

110214

012604

012603

005303

002343

162704

000100

020427

040000

002334

012604

012603

012602

012601

012600

000207

000000

000000

000000

 

 

 

 

 

Длина: 1508. Начальный адрес может быть любым, например 370008. Контрольная сумма: 1331148.

Эта подпрограмма без всяких изменений может быть использована и в кодах и даже в Фокале, если найдётся способ её вызвать. Ввести её можно либо с помощью операторов РОКЕ в цикле, либо в режиме ТС (после этого её надо записать на магнитофон с именем, допустимым в Бейсике, например, "ЗЕРКАЛО.BIN").

Хочу дополнить информацию, помещённую в "Вычислительной технике" № 5 за 1990 г., стр.34. В статье Синягина C.Ю. он рекомендует работать с системами МИРАЖ и МИКРО. Ничего не имея против них, особенно против системы МИРАЖ, работающей в ОЗУ экрана и оставляющей программисту всю оперативную память, я хочу порекомендовать вашему вниманию весьма распространённую среди давно программирующих БК пользователей (у одного из них мне и удалось её списать рижскую программу ОТЛАДЧИК. Фактически это микроассемблер (дизассемблер с возможностью отладки и пошагового прохождения программ.

Программа ОТЛАДЧИК занимает 10 кБ памяти, что всё же позволяет создавать довольно большие программы.

Заключение рецензента

Подпрограмма работоспособна и может быть опубликована. Читатели могут попробовать написать аналогичные программы для зеркального переворота изображения относительно обеих диагоналей экрана и по вертикали. Подобные программы могут быть полезны для создания экранных эффектов в игровых программах.

Жариков Л.Н.

Performed by © gid, 2012-2022.