Техника - молодёжи 1990-04, страница 49

Техника - молодёжи 1990-04, страница 49

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

Z1 (в рабочем варианте 0,13) — начальный адрес пары ячеек, в которых хранится адрес начала копируемого фрагмента;

Z2 (2, 13) —то же для копии;

Z3 (4, 13) — адрес ячейки, куда вписывается текущее значение а — число еще не скопированных байтов в отрезке строки и соответственно число оставшихся внутренних циклов;

1

1

Г'

»1

Сверим решения третьего тура прошедшего конкурса («ТМ» № 11 за 1989 год). Задания: № 7 (С. Деми-дюк) — 1. Фд41 Кс4 2. cpf3+ Кр d4 3. Ксбх, 1. ...Kd3 2. Фе6+ Kpd4 3. КЬ5х; № 8 (Л. Макаронец) — 1. Ла2! а4 2. ЛаЗ аЬ 3. КрЬ7 d2 4. Ла8х, 1. ...аЬ 2. h6 gh 3. Ла7 Ь5 4. ЛЬ7х; № 9 (Л. Искра) — 1. Лс5 dIK 2. Kpd6 Kb2 3. Лс8 Кд5 4. С:д5 и 5. Ле8х, 1.... И К 2. Kp:f6 d6 3. Лс4+ Kpd5 4. КаЗ и 5. Ке7х, Решение последнего задания зачтено участникам конкурса, указавшим оба этих варианта с превращением черных пешек в коней.

Задачи из № 3 за 1990 год решаются так: Н. Зиновьев — 1. КЬ41, А. Былев-ский—• 1. d7! Л:с8+ 2. dcK-j-, Г. Хуци-швили —1. 0—0—0! 0—0 2. Об Kp:h7 3. ЛЬ1 Крд8 4. ЛЬ8х.

Z4 (5, 13) — адрес ячейки, хранящей первоначальное значение а (для восстановления числа циклов при переходе на новую строку);

Z5 (6, 13) — начальный адрес пары ячеек, в которые в двухбайтовой форме занесено число 1 — а, 0;

Z6 (8, 13) — адрес ячейки с числом b копируемых строк;

Z0 (С9, 12)—адрес начала подпрограммы, на который осуществляется условный переход после завершения очередного цикла.

Подпрограмма обратного копирования — пересылки блока из буфера в

видеопамять — отличается от приведенной весьма незначительно: лишь младшими байтами адресов Z1 и Z2. Меняя местами эти числа при установке начальных условий посредством РОКЕ и вызывая описанную подпрограмму, мы тем самым будем выполнять то прямую, то обратную пересылку.

Задавать начальные условия удобно с помощью стандартных функций, определяющих остаток от деления нацело и целую часть числа (в нашем случае — младший и старший байты числа при делителе 256), например: РОКЕ 4864, MOD (V,256): РОКЕ 4865, INT(V/256), где V — начальный адрес копируемого фрагмента экрана (Z1 в рассмотренных подпрограммах). Этот адрес предлагаем вычислять также программно — посредством нестандартной функции DEF(V) по формуле V=V0+ +X+1XY. Здесь: V0 — адрес начала видеопамяти (экрана), X и Y — координаты начала фрагмента в сетке IX п, где I, как мы помним, число байтов в строке растра, п — количество строк экрана в графическом режиме. Как правило, в режиме среднего разрешения, а он более удобен на практике, 1—40, п=200 (или 180). Варьируя начальные условия, можно достигать самых различных эффектов, используя одну универсальную подпрограмму, каковой и является описанная нами.

В заключение несколько слов о ее быстродействии. Легко подсчитать, что при копировании всего экрана количество выполненных команд превышает 100 тысяч. При тактовой частоте 1,5—2 МГц и длительности элементарных операций 2—3 такта время копирования экрана не превысит 0,2 сек. Если же пересылается небольшой блок памяти, скажем десятая часть площади экрана, счет идет на сотые секунды.

Подпрограмма для Z80 копирует экран в буквальном смысле слова мгновенно.

Анатолий ВЕРШИНСКИЙ

ннета

• f g h

В. АКСЕНОВ

(г. Донецк) Мат в 2 хода

В. СОРОЧАН

(г. Южно-Сахалинск) Мат в 2 хода

В. ИЛЛАРИОНОВ

(Ленинград) Мат в 4 хода

46