Техника - молодёжи 1987-09, страница 56

Техника - молодёжи 1987-09, страница 56

справа — номер поля) употребляется при ходе ладьи с шахом. Наконец, появление буквы Г означает требование повернуть доску на 90° по часовой стрелке и ввести новые координаты фигур (программа С. Белоноса ставит мат на 8-й горизонтали, поэтому настаивает на такой начальной позиции, в которой белый король располагается «ниже» черного и их разделяет минимум одна горизонталь) .

При нашем начальном расположении (первая диаграмма) на индикаторе после В/О С/П, естественно, загорается буква Г. Поворачиваем доску (вторая диаграмма) и вводим новые координаты: 5 П1 П2 8 ПЗ П4 П5 1 П6 В/О С/П. Вновь загорается Г: белый король все еще «выше» черного. Опять разворачиваем доску (третья диаграмма): 5 П1 4 П2 8 ПЗ 1 П4 П5 П6 В/О С/П. Секунд через 20 на индикаторе загорается 13 — ладья пошла на поле аЗ, ограничивая подвижность нашего короля. При таком ходе, кстати, содержимое регистра 2 портится — уменьшается на единичку, но это нисколько не мешает игре.

Ход черных задается так: (горизонтальная координата) ПП (вертикальная координата) С/П. Допустим, мы решили пойти на d4:4 ПП 4 С/П. В ответ ПМК выдает число 8,2 — белый король, спеша к месту событий, сходил на h2. Теперь снова наша очередь. Если отступим на 5-ю горизонталь, ПМК ответит Ла4, остальные ходы приведут к Kpg2.

Прежде чем перейти к детальной «экскурсии» по программе, рассмотрим ее основные «достопримечательности», сделавшие возможным переложение для БЗ-34. Операторы цикла на участках 26—27, 48—49, 84—85 выполняют функции команд условного перехода: если содержимое регистра О не равно единице, управление передается на нужный адрес, а если равно — то на следующий. Экономия три команды. С адреса 97 управление переходит на короткую побочную ветвь, адреса которой (98-В1) соответствуют начальным (00-13 для БЗ-34) адресам главной ветви. Команды переходов по адресам 06-07 и 09 возвращают управление на главную ветвь. На МК-61 эта побочная ветвь короче, ее окончание (В1) приходится на адрес 06, именно поэтому обладателям этой модели приходится замыкать программу какой-либо командой возвращения на начало. Экономия — еще одна ячейка. Наконец, в «Ладейном эндшпиле» использованы четыре кодово-адресные связки: на участках 17-18, 35-36, 42-43 и 56-57. В первом случае, если входное число равно нулю, управление передается на адрес ДО длинной побочной ветви, на котором продублирована команда

18.КИПО (так воспринимает ПМК код Г0), затем исполняются команды

19.ИП0 и 20.В/0, после чего управление возвращается на главную ветвь. Если же входное число отлично от нуля, исполняются 19.ИП0 и 20.В/0. Таким образом, в первом варианте из содержимого регистра 0 вычитается единичка, а во втором оно остается неизменным.

Остальные кодово-адресные связки организованы единообразно. Фрагменты 35-36 и 56-57 обеспечивают безусловный переход на 63.КППД, если же управление (с участков 48-49 и 84-85) подается на вторую половину этих команд, она воспринимается как код команды ИПЗ (вызов горизонтальной координаты белого короля). Фрагмент 42-43 дает переход на «тайный» адрес ОЕ (ему соответствует «явный» 14), а если управление с участка 68-69 попадает на 43.0Е, это число воспринимается как код команды «стрелка вверх». В общей сложности на кодово-адресных связках экономится четыре шага. Еще две команды сберегаются на использовании содержимого регистра А (10) одновременно как счетного коэффициента и адреса перехода. Но этот прием наличествовал и в первоначальном варианте С. Белоноса. Как и кодово-адресные связки, он требует довольно утомительной работы по распределению отдельных блоков в программной памяти.

Алгоритм С. Белоноса предусматривает девять вариантов реакции белых на возникшую ситуацию:

Г — требование поворота доски;

Л1 — ход ладьи вперед с шахом;

MJI

Л2 — увод ладьи по горизонтали на вторую (или восьмую) вертикаль, подальше от черного короля;

ЛЗ — перевод ладьи по горизонтали со второй на первую или с восьмой на седьмую, словом, на соседнюю удаленную вертикаль;

Л4 — увод ладьи по вертикали на вторую (или восьмую) горизонталь, подальше от черного короля;

Л5 — перевод ладьи по вертикали на соседнюю удаленную горизонталь;

Л6 — ход ладьи на горизонталь, примыкающую «снизу» к позиции черного короля;

Кр1 — ход короля вперед;

Кр2 — ход короля по горизонтали с приближением к королю противника.

Блок 00-09 вычисляет расстояние по вертикали от белого короля до черного, вычитает из него двойку и сравнивает с нулем. Если результат (а он записывается в регистр 7 для возможного использования в проверке 86-88) отрицателен, на индикатор вызывается буква Г. В принципе можно использовать вместо 09.КБП9 и 09.С/П, но первый вариант дает возможность повторить ввод, если буква Г появилась из-за некорректного хода игрока.