Раджа-йога

Задача

Вы адепт Раджа-йоги, и собираетесь пройти все восемь ступеней. Каждая ступень состоит из двух частей. Получается восемь ступеней по две части. Сначала нужно чётко определить цель ступени, найти подходящие практики или знания. Назовём это определение цели. Далее нужно достичь этой цели, то есть освоить текущую ступень. На экране ПМК Цель отображается как -.

Как и в обычной жизни, вам будут мешать разные обстоятельства. Одна из самых опасных это Лень. На экране ПМК отображаются как E. Она всюду будет следовать за вами, куда бы вы не отправились. Если вы с ней встретитесь на жизненном пути (примете её), то о постижении Раджа-йоги придётся забыть.

Кроме того, жизнь не вечна, и все время нужно учитывать возраст. Об этом будет напоминать Старость, которая обозначается как C. Она проходит на экране ПМК слева направо. Как только она уйдет за правый край – ваша жизнь завершена и ни о каком достижении уже не говорится. Кроме того встреча с ней означает преждевременную болезнь. Этого тоже нужно избежать. В самом начале она не видна, за левым краем.

Экран ПМК отображает вашу жизнь адепта, с семью жизненными этапами (семь ячеек). Каждая ячейка либо пустая, либо содержит символы:

Символ Обозначение
8 Ваше положение
- Цель
C Старость
E Лень
9 Если Старость совпадает с Целью
L Если Лень совпадают с Целью

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

Игровой процесс

Начало

Перед первым запуском внесём константы в регистры. Если используете эмулятор, то уже вбито:

Регистр Значение
R8 56
R9 78
Ra 12
Rc Любое случайное число в диапазоне 0…1. Можно оставить ноль.
Rd 82
Re 10000000, т. е. 107

Начало игры: В/О ШГ→ С/П.

Игра

Экран состояния отображается в виде числа. Первая цифра – номер ступени, которую вы осваиваете. Вначале всегда 1. Кстати, он же находится в регистре Y. А остальные 7 знаков мантиссы отображают состояние жизненного пространства. Знак точки в конце обозначает, для удобства, правую границу.

Направления вашего движения по жизни, а также усилия определяются цифрами −3…3. Фактически на столько вы изменяете своё положение. Отрицательное значения для движения влево. Если в промежутке встречается что-то другое, вы это проскакиваете без последствий. Если границы не позволяют сделать такое движение, то вы остаётесь на месте – то же, что ход с нулём.

Для выполнения хода просто введите выбранную цифру и нажмите С/П. Если число дробное или не из указанного диапазона, то ПМК ещё раз отобразит то же самое состояние, чтобы вы выбрали правильный ход, но внутренний счётчик шагов будет увеличен.

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

Как только вы совмещаетесь с Целью во второй части, то переходите на новую ступень, где снова всё возвращается на круги своя.

Ваше положение между частями или ступенями остаётся неизменным. Если в процессе игры оно совпадает с одной из опасностей, то миссия постижения считается проваленной.

ПМК проверяет совпадение после вашего хода для C и E. Затем делает ход за Е, причём в вашу сторону, но всего на один шаг, и тут же проверяет на совпадение. Затем делает проверку на -. И если его нет, то только тогда сдвигает С вправо, проверяя не только на совпадение, но и на выход его за правую границу. Получается непосредственно перед С можно забрать Цель, но с Е такое не получится, и нужна фора в ячейках.

Окончание

Если вас застигла Старость или Лень, то вы бросаете свое заняти Раджа-йогой и ПМК зацикливается, отображая в мигающем режиме 0.70100000-E.E. В этом случае после остановки через С/П, и нового запуска через С/П начнётся новая игра (другой адепт).

Если же вы освоите все восемь уровней, и достигнете мокши, то ПКМ при остановке покажет вам количество шагов (решений, усилий), которые вам пришлось сделать для достижения этого. Для начала новой игры просто нажмите С/П.

Так как положения генерируются случайно, то далеко не всегда вам удастся достичь вершины Раджа-йоги.

Пример

Для пояснения приведём начало игрового процесса, с начальным значением случайного числа равным 0.3234636. В данном примере будут приведены только правильные ходы. Ошибочные вы можете потом сделать самостоятельно.

Начало после В/О ШГ→ С/П.

Экран ПМК Пояснение и код
1Е - 8. Повезло. Лень далеко. Просто сразу находим Цель: 2 /-/ С/П
-1 8Е-. Обратите внимание на минус в начале. Значит мы уже во второй часть ступени. 1 /-/ С/П
-1С 8Е -. Появилась Старость. Но теперь можно сразу перепрыгнуть для достижения Цели. 3 С/П
2 Е - 8. Уже вторая ступень! Здесь тоже нетрудно найти Цель. 3 /-/ С/П
-2 8L . А вот тут уже всё не просто. Сначала заманиваем Лень правее, чтобы подождать Старость. 3 С/П
-2С -Е8. 3 /-/ С/П
-2 С 8L . Теперь обходим Старость. 3 /-/ С/П
-28 СЕ- . Просто ждём. Иногда и в жизни так бывает. 0 С/П
-28 ЕС- . Снова ждём. 0 С/П
-28Е 9 . А теперь побежали. 3 С/П
-2 Е8-С . А после 1 С/П перейдём на третью ступень.

И так далее. Начальное случайное число не совсем случайно. С ним вы непременно достигнете нирваны!

Кстати, если вначале игры после В/О забыть нажать ШГ→, то вы сразу узнаете что такое неудачное окончание (зависание). Но это не страшно – просто остановите по С/П и запустите так же.

Приятной игры!


Разбор программы

Распределение регистров

R0 Рабочий регистр.
R1 Положение Лени. 0 – крайнее справа, 6 – крайнее слева.
R2 Флаг части уровня. Если = 1, то вторая часть, если много больше единицы – первая.
R3 Положение Старости.
R4 Уровень ступени.
R5 Положение Цели.
R6 Счётчик шагов.
R7 Положение игрока.
R8 Константа 56. Используется при проверке границ, чтобы избежать сохранения нового положения при выходе за границы.
R9 Константа 78. Адрес процедуры для проверки совпадения RX с положением игрока. При совпадении сразу уходит на ошибку.
Ra Константа 12. Адрес начала цикла игры одной части.
Rb Не используется
Rc Случайное число.
Rd Константа 82. Адрес процедуры генерации случайного положения. Гарантируется, что значение не совпадёт с положением игрока.
Re Константа 10000000. Используется для генерации видеоизображения, и как адрес процедуры выхода по ошибке (адрес 00).

Текст программы

 # |  00 01 02 03 04 05 06 07 08 09
 00 |  КППe Cx x→П4 x→П6 x→П7 КП→x4 П→xe x→П2 КППd x→П5
 10 |  КППd x→П1 П→x3 Кx≥0e КПП9 КИНВ x→П0 КП→x0 F10x П→x0
 20 |  × П→xe + К FL0 17 КП→x6 П→x4 FВx
 30 |  FL2 33 /-/ <-> <-> ВП 7 С/П x→П0 К∣x∣
 40 |  4 Кx<0a К{x} Кx=0a 6 П→x7 П→x0 Кx≥08
 50 |  Кx≥08 FВx x→П7 П→x3 КПП9 П→x1 В↑ КПП9 КЗН
 60 |  x→П1 КПП9 КП→x3 П→x7 П→x5 Кx=0a 1 FL2
 70 |  07 8 П→x4 Fx=0 05 П→x6 С/П П→x7
 80 |  Кx≠0e В/О П→x7 П→xc 7 × Fπ + К{x} x→Пc
 90 |  7 x→П3 × К[x] Кx≠0d FВx В/О

Объяснение работы программы

Некоторые фрагменты программы используют особенности косвенной адресации или выполнения команды ВП в программном режиме. Данные особенности описаны в документе Недокументированные возможности в соответствующих разделах.

Все значения положений отсчитываются справа. Т. е. нулю соответствует 8-я позиция мантиссы, а шестерке – вторая. Первая занята под номер ступени. Кроме Старости, все остальные находятся в диапазоне [0..6]. Старость вначале любой части вне игры, и равна 7.

Теперь про флаг в R2. Он равен единице, если идёт вторая часть, и не единице (много больше её), если первая. Это позволяет проводить проверки простым оператором FL2, причём без нарушения стека, и неоднократно.

Теперь пройдёмся последовательно по всему коду, поясняя, что выполняют фрагменты.

И хотя в программе только 98 команд, это программа для МК-61, а не для БЗ-34. Просто так получилось.