Вы адепт Раджа-йоги,
и собираетесь пройти все восемь ступеней.
Каждая ступень состоит из двух частей. Получается восемь ступеней по две части.
Сначала нужно чётко определить цель ступени,
найти подходящие практики или знания. Назовём это определение цели.
Далее нужно достичь этой цели, то есть освоить текущую ступень.
На экране ПМК Цель
отображается как -.
Как и в обычной жизни, вам будут мешать разные обстоятельства. Одна из самых
опасных это Лень
. На экране ПМК отображаются как 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, причём без нарушения стека, и неоднократно.
Теперь пройдёмся последовательно по всему коду, поясняя, что выполняют фрагменты.
отказаили зацикливания. В связи с тем, что проверки на совпадения проходят внутри подпрограммы, то, чтобы не возвращаться в вызывающий код и очистить стек возвратов, используется такая команда.
Целии
Лени. Начальное положение
Старостисохраняется в самой процедуре генерации случайного числа – сокращения программы при совмещении. Оно равно 7.
Старостьне вышла за границу. Затем, через вызов подпрограммы, что не совпадает с положением игрока. В начале ступени это всегда так, т. к. 7 ⩾ 0, и ни с кем не совпадает.
пустое, а целая часть (8) используется как счётчик цикла. Тут используется тот факт, что процедура генерации возвращает число состоящее только из одной цифры.
пробегаетпо регистрам R7, R5, R3, R1. Причем сами значения 7, 5, 3, 1 используются для инверсии бит, что и приводит к нужному изображению.
Сбрасываниетекущего видеоизображения в регистр X1, чтобы
пропуститьвперёд неважное значение, извлекаемое при увеличении счётчика шагов, и номер ступени. А затем восстановление его же. Последняя команда также сохранит значение в недокументированном регистре X2 (ссылку про это смотри выше), которое и будет позднее восстановлено в RX через команду ВП, только с другой первой цифрой.
минуспересохраняет новое значение в X2.
Подгоняетномер уровня в регистр X, чтобы команда ВП взяла от него первую цифру при восстановлении X2. Степень устанавливается в семь, чтобы разделительная точка была в крайнем правом положении.
Старости.
Лени, но и автоматическое
приближениееё к игроку. И повторная проверка, уже с новым положением
Лени.
Старостии вычисление разницы в положении игрока и
Цели.
подготавливается2-я часть и проверяется, что закончилась первая. Если так, то уходит на адрес 07.
И хотя в программе только 98 команд, это программа для МК-61, а не для БЗ-34. Просто так получилось.