Поиграем на микрокалькуляторе
Ещё будучи в школе, на переменах и после уроков, я часто ходил в школьную библиотеку. Библиотекарь разрешала мне ходить среди полок и самому выбирать книги. Я не любил книжные полки, где стояли "популярные читаемые" издания. Напротив, я лазил по самым дальним и пыльным полкам, там, к примеру, откопал дореволюционное издание толкового словаря Даля, тома которого я брал домой на прочтение. Вот, однажды, набрел на книги о программируемых калькуляторах (ПМК). В мои школьные годы уже все знали о приставке Dendy, а позже узнали персональных компьютерах и играх под Windows98, но мне было интересно, что это за программируемый калькулятор. В книгах речь шла о программах и играх (играх?)... На то время у меня появился инженерный калькулятор Casio, но он совсем не подходил под описание в книгах. Тем более, ПМК уже никто не пользовался. Так ПМК остался для меня тайной, тайной до сегодняшнего дня...
Не смотря на технический прогресс и прочего рода "бла бла бла", меня привлекает прошлое. Зная будущие, прошлое становится интересным, ты видишь динамику развития, движение... Да совок, да дикость, но в этом кайф.
Первый ПМК "Электроника Б3-21" (пока нет в коллекции :) появился на свет в 1977 году. Несмотря на свою высокую стоимость (350 руб.),
машинка стала популярной и положила начало тому настоящему массовому
использованию этого вида электронной техники, которое возникло с
появлением в 1980 году следующей модели Б3-34. Ведь не зря буква "Б" в
названии означала "бытовая техника". Не в последнюю очередь этому
способствовала и цена: 85 рублей для "34-ки" и всего 65 рублей для МК-54
- полностью совместимой с ней по системе команд модели с несколько
улучшенным дизайном корпуса. Более совершенными и "навороченными" моделями были МК-61 и МК-52.
Естественно, что использовать ПМК только для инженерных расчётов было несколько скучновато. Тут и там появлялись люди, придумывающие и воплощающие посредством кода игровые задачи. Некоторые из них стали отправлять свои наработки в редакции технических журналов, и некоторым журналам сие понравилось и игровые программы стали публиковаться. Это и сыграло главную роль в популяризации и пропаганде использования калькуляторов. Наибольший интерес у читателей вызывали постоянные разделы, появившиеся в середине 80-ых годов в "Технике молодежи" (ТМ) и "Науке и Жизни" (НиЖ). "НиЖ" предлагала читателям, преимущественно, интересные и оригинальные прикладные программы, которые использовались самими читателями на работе и в повседневной жизни, массу учебных материалов, а также создала обратную связь с производителями самих ПМК. В отличие от неё, "ТМ", также после публикации серии учебных материалов, пошла по пути создания сообщества любителей электронных игр.
Архив публикаций на тему ПМК из журналов "Техника-молодежи". Клуб
Электронных Игр (КЭИ), цикл М. Пухова "Путь к Земле" и другие материалы.
Архив публикаций рубрик "Человек и компьютер", "Человек с
микрокалькулятором" и других публикаций на тему программируемых
калькуляторов из журнала "Наука и жизнь".
Сразу оговорюсь, забудьте о современном понимании программирования, таковое на ПМК ограничивалось всего 105 шагами и 15 регистрами (ячеек) памяти, при том, что наброски программ состояли из 200 - 300 шагов! Поэтому, авторы программ всячески ухищрялись, применяли свою смекалку и творческий подход, а так же, множество недокументированных возможностей калькулятора, которых было столько, что образовалась отдельный раздел изучения ПМК - ЕГГОГология (от "ЕГГОГ" - сообщение калькулятора об ошибки).
Но главное другое - богатое воображение! Сейчас, думаю, с воображением туговато, т.к его заменяет уже готовая картинка, но тогда... Представьте, вы управляете Лунолетом, имеете определенный запас топлива и Ваша задача, посадить этот Лунолет на поверхность Луны со скоростью не более 5 м/с, иначе - перегруз и Ваш экипаж мертв. При этом, Ваш корабль имеет определенный вес и на действует сила гравитация Луны со всеми вытекающими (!). Калькулятор лишь средство, всё происходит в Вашем воображении. Привел пример самой популярной игры на то время - "Лунолет-1", которая все время совершенствовалась и усложнялась, к примеру, добавлялись боковые реактивные двигателя. Фактически - это пошаговые игры, т.е вводишь данные, нажимаешь "С/П" (Пуск) и около минуты (!) ждешь результаты вычислений, потом снова шаг. Но существовали и динамические игры, к примеру, динамическая редакция игры "Лунолет-1" - "Лунолет-Д", в которой "полет" происходил в реальном времени и меняя данные нужно было управлять космическим аппаратом - на ПМК меняя положение переключателя "Г-Р-Д" можно было лететь с выключенным двигателем, включить среднюю или полную тягу. Упустишь момент - перегруз.
Для любителей привожу код игры "Лунолет-Д" и инструкцию.
Для начала, Вам нужен собственно сам ПМК :) Я обладаю несколькими "популярными": МК-54 (копия Б3-34), МК-61 и МК-52.
Включаем калькулятор. Переводим его в режим программирования клавишами F ПРГ и вводим код программы:
00.ИПА 01.↑ 02.↑ 03.↑ 04.↑ 05.ИПВ 06.↑ 07.↑ 08.↑
09.↑ 10.ИПД 11.Fx≠0 12.35 13.ИПС 14.Fcos 15.Fx≠0
16.21 17.↑ 18.Fx2 19.F√ 20.÷ 21.1 22.+ 23.Fx2
24.ИП0 25.× 26.- 27.FВх 28.XY 29.Fx<0 30.33 31.+
32.0 33.ПД 34.Fo 35.ИП0 36.- 37.+ 38.ПВ 39.+ 40.2
41.÷ 42.ИПА 43.+ 44.ПА 45.Kx<0C 46.2 47.× 48.XY
49.ИПВ 50.- 51.× 52.ИПВ 53.Fx2 54.+ 55.F√ 56.П1
57.0 58.ПА 59.+ 60./-/ 61.ПВ 62.1 63.3 64.+ 65.Fx<0
66.69 67.FВх 68.П1 69.ИП1 70.5 71.× 72.F10x 73.Fx2
74.Fx2 75.Fx2 76.↑ 77.ИПД 78.ИПВ 79.С/П
Далее, нажимаем F АВТ и вводим данные: 2 П0 50 ПД 500 ПА 0 ПВ 100 ПС
Команда "П" это кнопка "Х-П", т.е число заносим в Память, а "ИП" - "П-Х", т.е число выводим Из Памяти.
Играть в эту игру чрезвычайно просто. В регистр 0 вводится ускорение силы тяжести на планете в м/с (лучше задавать его целым числом), в регистр Д начальный запас топлива в кг, в регистр А начальная высота в м, в регистр В начальная вертикальная скорость в м/с (знак «минус» соответствует снижению). В регистр С закладываем число 100 «Рычагом управления» служит переключатель Р-Г. Позиция Г соответствует выключению двигателя, промежуточное положение (ГРД) — малой тяге, Р
— полной. Малая тяга в точности уравновешивает силу гравитации, а
полная в четыре раза больше. Расход топлива численно равен реактивному
ускорению.
Игра начинается командой В/О С/П. При скорости, не
превышающей 2,5 м/с (посадка на «отлично»), она просто выводится на
индикатор и вычисления останавливаются. Если скорость посадки лежит в
диапазоне 2,5–5 м/с («хорошо»), на индикаторе появляется ЕГГОГ. Нажимаем С/П, на индикаторе скорость. При дальнейшем увеличении посадочной скорости ПМК выдает ЗГГОГа: его надо сбросить (Сх), а скорость и топливо смотреть в соответствующих регистрах (ИПВ и ИПД).
Затем наступает очередь серьезных аварийных ситуаций. При прилунении со
скоростью 7,5–10 м/с на индикаторе появляется испорченный фрагмент
программы; «ремонт» корабля в этом случае можно произвести так: FПРГ ШГ влево Сх С/П FАВТ FПРГ ШГ влево ШГ влево, после чего вписать две команды вместо Сх С/П, перейти в режим АВТ
и делать следующую попытку. Очень «коварно» ведет себя ПМК, если
скорость лежит в диапазоне 10–12,5 м/с. На индикаторе как ни в чем не
бывало зажигается ее величина, в регистре Y находится остаток топлива. Однако попытка продолжить полеты не удается: в регистр С заслан «хвост» ОС-оборотня, поэтому переключатель Р-Г не работает — у лунолета вышел из строя двигатель. Чтобы его исправить, придется снова заслать 100 в регистр С. А при скорости свыше 12,5 м/с вас ждет худшее — Тьма...
Другая популярная игра - "Охота на лис" - логическая игра на доске размером 10*10 клеток.
Описание этой игры было опубликовано в журнале "Наука и жизнь" в декабре 1985 года. Там же приведена программа для микрокалькулятора "Электроника МК-54". По-видимому, это первая публикация игры, поэтому можно считать, что ее автор, А. Несчетный из Ленинграда, изобрел эту игру. Со временем игра стала очень популярной. Было составлено много усовершенствованных вариантов программы, их можно найти в литературе. Приводится оидн из усовершенствованных вариантов программы для МК-61. Каждая клетка игрового поля имеет уникальные координаты - пару чисел от 0 до 9. Способ введения координат клетки понятен из рисунка, приведенного вверху. На доске расположены 9 "лис", каждая занимает одну клетку. В отличие от других программ, в данном варианте никакие 2 "лисы" не могут находиться в одной и той же клетке. Перед началом игры игрок не имеет информации о расположении "лис". Цель игры - определить координаты всех "лис". Чтобы получить информацию о расположении "лис", поместите "охотника" в какую-нибудь клетку, и Вы узнаете, сколько "лис" видны из нее. Делая такие ходы и изучая полученные данные, нужно определить координаты всех "лис". Как обычно, чем меньше сделано ходов, тем лучше.
Микрокалькулятор "умеет" 1) в начале игры расставлять "лис" на доске 2) по введенным в него координатам "охотника" подсчитывать количество "лис", которых он видит. Перед началом игры введите в МК-61 программу игры.
Микрокалькулятор "умеет" 1) в начале игры расставлять "лис" на доске 2) по введенным в него координатам "охотника" подсчитывать количество "лис", которых он видит. Перед началом игры введите в МК-61 программу игры.
Далее, нужно ввести константы в регистры памяти. Для этого нужно нажать следующие клавиши.
Теперь можно начинать игру. Введите случайное число от 0 до 1 (пример: 0.123456) и нажмите БП 54 С/П. Сообщение ''7.'' означает, что все "лисы" успешно расставлены на доске. Чтобы сделать ход введите координаты клетки (например: 51) и нажмите С/П (или В/0 С/П). Обычный ответ микрокалькулятора будет иметь вид ''--51-- 3.'', где ''51'' - введенные координаты, ''3'' количество "лис". Если во введенной клетке находится "лиса", то появится сообщение ''-20RRO.-''. Нажмите С/П чтобы узнать количество "лис". Для игры хорошо использовать листок бумаги в клетку, на котором можно отмечать ходы и строить свою стратегию. Ещё, ПМК может быть в роли часов. Каждая программа на выполнение требует определенного времени, эта особенность используется в использовании ПМК в качестве секундомеров и часов. Например, такая программа:
Заносим константы 10 в ПА, 11 - П2, 24 - П4, 60 - П6, 100 - П7. Текущее время вносим в П8 (часы), П9 (минуты). Запускаем программу В/0 С/П. В левом углу индикатора высвечивается трех -четырех значное число (часы минуты). При "перемещении стрелок" мелькают числа и снова отобразятся "часы минуты". Эти часы могут спешить или отставать, настройка происходит подбором ПА.
Ещё, на ПМК можно... можно многое :) С появлением первых компьютеров
(«Электроника БК-0010», ZX Spectrum и др.) интерес к ПМК стал падать,
т.к язык программирования ПМК стал слишком "примитивным". Однако, многие
программисты начинали именно с ПМК, ведь, суть любых программ - это
понимание машинного кода.
Да, Вы правы, в 10 лет я научился им (МК-61) пользоваться, стать программистом было не избежно. Путь лежал через БК-0010 и понеслось, 30 лет с этими кибер вещами пожирающими мое время и жизнь, ладно хоть дают достаточно средств для обеспечения семьи всем необходимым :-)
ОтветитьУдалитьЦель программы
ОтветитьУдалитьЭта программа предназначена для симуляции посадки космического аппарата, учитывая начальные условия, такие как высота, скорость и запас топлива. Программа управляет двигателями аппарата и рассчитывает параметры полета, чтобы обеспечить успешную посадку. Если посадка не удается, программа сообщает об ошибках и позволяет пользователю внести корректировки и попытаться снова.
ChatGPT 4o
00. ИПА // Извлечение начальной высоты из регистра А в регистр X
ОтветитьУдалить01. ↑ // Продвижение числа вверх по стеку
02. ↑ // Продвижение числа вверх по стеку
03. ↑ // Продвижение числа вверх по стеку
04. ↑ // Продвижение числа вверх по стеку
05. ИПВ // Извлечение начальной скорости из регистра В в регистр X
06. ↑ // Продвижение числа вверх по стеку
07. ↑ // Продвижение числа вверх по стеку
08. ↑ // Продвижение числа вверх по стеку
09. ↑ // Продвижение числа вверх по стеку
10. ИПД // Извлечение начального запаса топлива из регистра D в регистр X
11. Fx≠0 // Если значение X не равно 0, переход на адрес 35
12. 35 // Адрес перехода
13. ИПС // Извлечение числа из регистра C в регистр X
14. Fcos // Вычисление косинуса значения X
15. Fx≠0 // Если значение X не равно 0, переход на адрес 21
16. 21 // Адрес перехода
17. ↑ // Продвижение числа вверх по стеку
18. Fx2 // Возведение числа в квадрат
19. F√ // Извлечение квадратного корня
20. ÷ // Деление
21. 1 // Вводим значение 1
22. + // Прибавляем 1 к значению X
23. Fx2 // Возведение числа в квадрат
24. ИП0 // Извлечение числа из регистра 0 в регистр X
25. × // Умножение
26. - // Вычитание
27. FВх // Восстановление числа из стека
28. XY // Возведение числа в степень
29. Fx<0 // Если значение X меньше 0, переход на адрес 33
30. 33 // Адрес перехода
31. + // Прибавляем
32. 0 // Вводим значение 0
33. ПД // Переход на адрес в регистре D
34. Fo // Смена знака числа
35. ИП0 // Извлечение числа из регистра 0 в регистр X
36. - // Вычитание
37. + // Прибавляем
38. ПВ // Переход на адрес в регистре В
39. + // Прибавляем
40. 2 // Вводим значение 2
41. ÷ // Деление
42. ИПА // Извлечение числа из регистра А в регистр X
43. + // Прибавляем
44. ПА // Переход на адрес в регистре А
45. Kx<0C // Если значение X меньше 0, сохраняем в регистр C
46. 2 // Вводим значение 2
47. × // Умножение
48. XY // Возведение числа в степень
49. ИПВ // Извлечение числа из регистра В в регистр X
50. - // Вычитание
51. × // Умножение
52. ИПВ // Извлечение числа из регистра В в регистр X
53. Fx2 // Возведение числа в квадрат
54. + // Прибавляем
55. F√ // Извлечение квадратного корня
56. П1 // Переход на адрес в регистре 1
57. 0 // Вводим значение 0
58. ПА // Переход на адрес в регистре А
59. + // Прибавляем
60. /-/ // Деление с восстановлением знака
61. ПВ // Переход на адрес в регистре В
62. 1 // Вводим значение 1
63. 3 // Вводим значение 3
64. + // Прибавляем
65. Fx<0 // Если значение X меньше 0, переход на адрес 69
66. 69 // Адрес перехода
67. FВх // Восстановление числа из стека
68. П1 // Переход на адрес в регистре 1
69. ИП1 // Извлечение числа из регистра 1 в регистр X
70. 5 // Вводим значение 5
71. × // Умножение
72. F10x // Возведение 10 в степень X
73. Fx2 // Возведение числа в квадрат
74. Fx2 // Возведение числа в квадрат
75. Fx2 // Возведение числа в квадрат
76. ↑ // Продвижение числа вверх по стеку
77. ИПД // Извлечение числа из регистра D в регистр X
78. ИПВ // Извлечение числа из регистра В в регистр X
79. С/П // Сохранение программы
Для закрепления навыков я написало программу вычисления факториала для МК-52, пожалуйста проверьте ее люди :
ОтветитьУдалить00. 1 // Вводим 1
01. П0 // Заносим 1 в регистр 0 (начальный счетчик)
02. 0 // Вводим 0
03. ПA // Заносим 0 в регистр A (начальная сумма)
04. 100 // Вводим 100
05. ПB // Заносим 100 в регистр B (количество циклов)
06. ИП0 // Извлекаем значение из регистра 0 в X (начальный счетчик)
07. ИПA // Извлекаем значение из регистра A в Y (текущая сумма)
08. + // Складываем X и Y (счетчик и текущую сумму)
09. ПA // Заносим результат в регистр A (новая сумма)
10. ИП0 // Извлекаем значение из регистра 0 в X (счетчик)
11. 1 // Вводим 1
12. + // Увеличиваем счетчик на 1
13. П0 // Заносим новое значение счетчика в регистр 0
14. FLB // Устанавливаем цикл на 100 итераций
15. 06 // Адрес начала цикла
16. С/П // Остановка программы и показ результата на экране
ChatGPT 4o
Ну не только Лунолетами все ограничивалось. В 89 я служил в артиллерии в ГСВГ, и мой нач. Штаба дивизиона дублировал рассчеты штатной ЭВМ, для контроля. А соответствующие программы публиковали в окружной газете, как письма от читателей-артиллеристов
ОтветитьУдалить