Pull to refresh

Программирование на калькуляторах МК: как я делал графические игры

Reading time4 min
Views26K
После прочтения статьи о программируемом микрокалькуляторе на iOS на меня накатил такой приступ ностальгии, что я полез копаться в книжный шкаф, и, после продолжительного поиска, нашёл старую тетрадь с конспектами по программированию и самостоятельно разработанными играми.

На первой странице фломастером гордо накарябан урл сайта на народе, который мы делали чуть ли всем двором. Я периодически буду на него ссылаться.

Начало записей — основы программирования (код был написан для МК-61, но будет работать и на подобных устройствах).
Для перехода в соответствующий режим нужно нажать — Fпрг, для выхода — Fавт.

Базовый приём, которым я пользовался при написании программ — работа с регистрами.
Для записи в регистр используется кнопка П → Х, для вывода X → П. Например, последовательность нажатий 72 П → X 1 записывает число 72 в регистр RG1, а Х → П 1 выводит значение из регистра RG1 в регистр X.

Содержимое регистра X всегда отображается на экране — это один из стековых регистров (X, Y, Z, T). Для работы со стековыми регистрами используются команды:
— В↑ (копирует содержимое регистра X в Y, Y в Z, и т.д).
— (меняет содержимое регистров X и Y местами)
— СХ (стирает содержимое регистра Х)

Также я активно использовал функцию if — за это отвечают клавиши Fx=0, Fx=/0, Fx<0 и Fx>0. Синтаксис:
Fx#0 (шаг для перехода, если условие не выполняется) (последующая команда при выполнении условия).

Подробнее о синтаксисе можно почитать в этой статье.

Перейдём к самому интересному. В те годы и при тех обстоятельствах ни у кого из моей компании не было устройств, на которых можно было бы программировать — мы проводили у калькулятора целые часы, и нам это действительно нравилось. Как любые дети, мы хотели играть, и заметили, что функция «инв» (логическое инвертирование) может преобразовать числа, например, в символ «Г». «Е» или «C», а если вывести на экран «8-E-C» и перевернуть калькулятор по часовой — то мы увидим что-то, похожее на человечка.

image

Игра, код которой был разрисован в тетради краше всего, называлась «Lamer Andrew meets America».

Инструкция гласит: «Вы можете посмотреть мультфильм (нажав ВО СП), выстрелить в монстра (БП 53), сломать машину врага (БП 74). Если вы умрёте, то увидите символы '8 *****', если выиграете — 'ECC'. В этой игре можете использовать сразу несколько видов — спереди и сверху». Незамысловато.

В значения регистров командой П (например, 80013 инв П 0) заносилась «анимация»:

Регистр Значение для «нормального вида» Значение для «продвинутого вида»
0 80013 инв 80013 инв
1 8 инв 8 инв
2 81 инв 81 инв
3 801 инв 8573 инв
4 800077 инв 857 инв
5 80109 инв 81308333 инв
6 80108 инв 81300876 инв
7 8077099 инв 8570757 инв
8 8015 инв 8135 инв
9 80105 инв 81305 инв
a, b 5 инв 5 инв
c 807799 инв 857757 инв
d 80779 инв 8577333 инвa


Сам код (для сокращения записи операции «П→x», «x→П» и «С/П» обозначены как «ИП», «П» и «СП») простой и длинный:

000 ИП1
001 ИП2
002 СП
003 ИПА
004 В^
005 5
006 -
007 F x>o
008 17
009 5
010 5
011 5
012 5
013 7
014 К ИНВ
015 ИП2
016 СП
017 ИП2
018 ИП2
019 ИП2
020 ИП5
021 СП
022 ИПА
023 В^
024 1
025 +
026 ПА
027 ИП5
028 СП
029 П5
030 ИП5
031 ИП2
032 ИП2
033 СП
034 ИП2
035 ИП2
036 ИП2
037 ИП2
038 ИП6
039 СП
040 ИПА
041 В^
042 1
043 +
044 ПА
045 ИП6
046 СП
047 ИП6
048 ИП6
049 ИП2
050 СП
051 БП
052 56
053 ИП8
054 ИП9
055 СП
056 ИП2
057 ИП2
058 ИП2
059 ИП4
060 ИП4
061 ИП4
062 ИП4
063 ИП7
064 ИП7
065 ИП7
066 ИП7
067 ИП7
068 СП
069 ИП7
070 ИП7
071 ИП4
072 СП
073 БП
074 87
075 ИП7
076 ИПС
077 ИП7
078 ИПС
079 ИП7
080 ИПС
081 СП
082 ИПА
083 В^
084 2
085 +
086 ПА
087 СП
088 ИПD
089 СП
090 ИПD
091 ИПD
092 ИП4
093 СП
094 ИП6
095 СП
096 5
097 5
098 5
099 ИНВ
100 СП
101 ИП0
102 СП


Итак, наша программа в основном состоит из операторов вывода на экран «анимации» (последовательности значений регистров), операторов остановки и безусловного перехода. Например, «стреляет» наш человечек вот так:



Реальный калькулятор перед новым выводом на экран гасил его на доли секунды — это придавало больше реалистичности «стрельбе».

Просто, но результат нам очень нравился, а родители даже нарисовали нам грамоту :)

Не наигрались? Второй (и последний) код из той самой тетради — тамагочи (да, тоже с графикой):

[ип1] [ип1] [ип1] [ип1] [ип1] [с\п] [ипВ] [В^] [2] [0] [-] [Fx>/=0] [19] [8] [0] [0] [1] [3] [Kинв] [С\П] [ипВ] [в^] [1] [+] [пВ] [С\П] [Сх] [ипС] [В^] [1] [0] [-] [Fx>/=0] [35] [ип3] [с\п] [ипD] [В^] [1] [5] [-] [Fx>/=0] [44] [ип3] [с\п] [ип8] [В^] [1] [0] [-] [Fx>/=0] [] [53] [ип3] [сп] [ВО] [ипD] [B^] [2] [-] [ПD] [C/П] [ип6] [ип7] [8] [ВО] [ипС] [B^] [2] [-] [пс] [о] [сп] [ип9] [ипА] [ВО] [ип8] [В^] [3] [-] [п8] [с\п] [ип4] [с\п] [BО] [ипВ] [B^] [10] [-] [Fx>/=0] [93] [ип2] [п1] [ВО]


Инструкция, переведённая с того языка, который я принимал в детстве за английский:

Нажмите С\П — вы увидите Андрея. Нажмите С\П ещё раз, и он начнёт программировать. Вы увидите какие-то цифры — это вывод с его программ. Нажмите С\П. После пяти программ Андрей вырастет на пять лет. Ваша цель — дорастить его до 20ти, помогая Андрею:

1. Кормите его. Нажмите БП 65 и С\П. Он поест, и коэффициент голода понизится. Если значение коэффициента достигнет 10 — он умрёт, а вы увидите отличное видео.

2. Гуляйте с ним. Нажмите БП 84 и С\П. Он погуляет и сходит в туалет. Если значение «антипрогулочного» коэффициента достигнет 10 — он умрёт. С видео!

3. Сон. Когда Андрей устал, нажмите БП 75 С\П. Чтобы разбудить — нажмите С\П. С видео.

4. Посещение врача. Когда Андрею исполнится 10, ему нужно будет сходить к врачу. Нажмите БП 55 С\П.

Если вы выиграете — вы увидите " 8 ЕС ", если проиграете — " 8-----8 ". Андрей меняется по мере роста!

Наслаждайтесь.

Большое количество игр от разных авторов можно найти, например, тут: http://lordbss.narod.ru/pmk.html

UPD: На mk61.narod.ru присутствуют битые ссылки (на c:\mysite — я был молод и глуп), поправить их сейчас, к сожалению, нельзя, т.к. за 11 лет почта сменилась неоднократно, а пароли были утеряны.
Tags:
Hubs:
+50
Comments17

Articles