Комментарии 158
И пример программирования такой игры тоже интересен.
lordbss.pp.ru/pmk220.html
В журнале «Наука и жизнь» была рубрика, посвященная программируемым калькуляторам, в ней разбирали такие программы. Я с нетерпением ждал каждого номера.
Да, примерно так и было. У меня есть такой вариант:
9 С/П ПП 28 пи * cos x<0 16 ИП2
ПП 28 1 - БП 51 ИП7 ПП 28 ИП7
ПП 28 КИП2 ИП2 ВП 4 4 С/П 1 -
x=0 33 8 П2 С/П П7 ИП2 4 - x#0
43 x<0 45 8 + П8 ИП7 - x#0 55
ИП8 ВП 6 6 С/П ИП2 В/О
Здесь клетки нумеруются по спирали от левого верхнего угла от 1 до 9:
1, 2, 3
8, 9, 4
7, 6, 5
Поле рисуется на бумажке, на которой отмечаются ходы. Ходит, действительно, первым калькулятор — как легко догадаться, пойдёт в центр, на 9. Итоги игры: 44 — ничья, 66 — калькулятор выиграл. Можете попробовать на эмуляторе.
Здесь использовано 57 шагов программы, т. е. память не до конца забита и программу можно было бы усовершенствовать, введя, например, случайное начало для калькулятора.
Классный вариант, и идея с вращением вокруг центра хорошая. Только пока не разобрался, как тут косинус работает. Можно попытаться добавить первый ход из угла (1), но по-моему полностью уместить не получится.
А косинус тут просто-напросто для определения чётности номера клетки во время хода игрока.
А косинус тут просто-напросто для определения чётности номера клетки
Была ещё классная фича — на передней панели МК-61 есть переключатель угловых мер — "градусы/радианы", при этом у него есть ещё и среднее положение — "грады" — это такие звери, которые почти как градусы, но в прямом угле их не 90, а 100.
В результате если взять sign(cos(100))
, то в зависимости от положения переключателя получается: в градусах — sign(-0.17364817766) = -1
, в градах — 0, а в радианах — sign(0.86231887228) = +1
— то есть можно было программно узнавать, в каком положении этот переключатель находится в данный момент. И этой фичей пользовалась игра "гонки".
Как бывший владелец МК-61 пустил скупую мужскую слезу.
У меня он тоже лежит.
Но если надо — расчехляется и скрипит при каждом нажатии кнопок.
После того, как мне купили компьютер я не мог поверить, неужели там на самом деле памяти на 32000 команд? Точно не 320? Может что-то перепутали.
В целом вещь полезная, если надо научиться писать компактные программы. Но упаси боже кому-то попробовать потом поддерживать такой код.
Интернет-помойках вроде Википедии
за такое в приличном обществе бьют подсвечниками.
Подтверждаю, в приличном обществе Педивикию принято называть "мусоркой", а не "помойкой".
Хороший калькулятор был. Дал много в плане заинтересованности. Спасибо ему. Но это прошлое. Больше ностальгия по молодости :-)
P.S. Крестики-нолики я не осилил написать. Не хватило 3 или 4-х ячеек памяти кажется. Как я расстраивался тогда!
Первый эмулятор МК-61 я писал на BASIC*МИКРОША. Почти дописал документированную часть, а потом обнаружил Fort. И как-то то он так удачно подошёл, что быстро реализовал всю документированную часть, а потом школа кончилась…
Я когда у школьного друга увидел новый МК-61 — это стало божественным откровением, ниспосланным свыше. Это было первое программируемое устройство, попавшее в мои руки. Этот мелькающий зелёный индикатор, эти глюки после перегрева — словами не передать...
Кто знает, это был чисто советский аппарат, или подсмотренный на Западе?
Скорее всего подсмотренной у Hewlett Packard, если посмореть на HP-41C, который обладал схожими принципами и системой комманд, но появился на несколько лет раньше, чем МК-61. Но реализация, возможно, была своей.
На самом деле, эта архитектура унаследована напрямую из калькуляторов с памятью на замкнутой в кольцо акустической линии задержки. В доБИСную эпоху такая линия задержки была основой едва ли не большинства настольных калькуляторов, включая и программируемые.
Интересно, сохранилась ли инженерная документация к МК-61 где-то, с полным и подробным описанием процессоров, прошивок, и т.п. Может в институте, который его разрабатывал. Государство могло бы отдать всё это в свободное пользование, т.к. практической ценности это не имеет. Только культурно-историческую.
А конечный результат — уже давно сняли, так что есть вполне себе точные эмуляторы со всеми ЕГГОГами…
pmk.arbinada.com/ru/comment/5521#comment-5521
«Документация на МК утеряна. Вернее, уничтожена при передаче помещений завода коммерческой структуре. Уничтожена этой коммерческой структурой. Микрокод не сохранился.»
При этом дальнейшее развитие (МК-61) пошло в Киеве, то есть у Киевского завода таки тоже были полные «исходники».
уничтожена при передаче помещений завода
Если же говорить про документацию на микросхемы — то да, очевидно, стоит икать в КНИИМП
Нашелся бы какой-то энтузиаст, который бы топологию отреверсил.
На вид по рентгенофото она вроде довольно читаема, но нужен хорошо разбирающийся специалист, готовый потратить своё время.
Это хорошая новость. А где можно ознакомиться?
pmk.arbinada.com/mk61emuweb.html
Интересный вариант.
Я б и не додумался заглянуть в исходный код страницы, привык что всё сложное поведение сейчас в бэкенд запихивают.
Для МК-52 так и нету, как вы и писали.
Во фрагментах JavaScript не опознал, поскольку не спец в нём — знакомство шапочное довольно.
Ну и на микрокод это совсем не похоже, в микрокоде не бывает никаких if-then, там всё на битовых операциях же.
А всякие там if, case — это эмуляция логической обвязки снаружи микропрограммного автомата?
Поэтому в процессорах используют в дополнение к МПА логические комбинаторные схемы (АЛУ), оставляя микропрограммному автомату только управляющие состояния.
Я пока не стал вдаваться в код эмулятора — не до того пока.
И вот понять — какая там логика в этой безумной деятельности… невероятно сложно.
То есть мы можем получить, рассчитать, вот те же самые электрические сигналы (кроме МК-52, так одна микросхема не отсканирована)… но почему они такие… какая в этом была заложено логика… науке неведомо.
Ну то есть кое-что известно, даже энтузиасты желают железки, которые встраиваются на шину (вот как раз в «технологический разъём» МК-52, который для БРП как раз не используется) и «расширяют» набор команд… но про то, что там таится в исходных команда (и почему, к примеру, не реализовались исходные идеи про создание блока памяти, который доступен и как памяти и как данные) — мы не знаем.
Ну крубо, утрируя: представьте, что мы не имеем даташита на 6502, но умудрились отсканировать и его и весь набор микросхем от C64.
До того, как мы полезем разбираться в бинарники KERNAL'а — надо бы понять как вообще система команд вот этого вот всего устроена…
www.leningrad.su/museum/show_calc.php?n=133
Если первый вопрос «как» решен полностью во всех деталях — это уже хорошо, это хотя бы позволит построить точные эмуляторы, повторить поведение тех микросхем.
И под этим «как» я подразумеваю именно внутреннюю логику микросхемы (что такое микрокод, я в курсе — сам программировал секционные процессоры на 1804ВС1, и умею соорудить микропрограммный автомат на ПЗУ и регистре).
«не микропроцессор, а микроконтроллер»эээ, микроконтроллер — это комбинация микропроцессора с некоторыми периферийными схемами (таймерами, АЦП, ЦАП, пользовательской памятью и т.п.) — то есть целый микропроцессорный комплект на том же кристалле или хотя бы в том же корпусе. Как одно время говорили, «однокристальная микроЭВМ».
Со временем гнездо питания расшаталось, переключатель градусов иногда работает нечетко (доигрался, блин, в динамические игры) и яркость индикатора заметно уменьшилась. Может быть кто-то знает несложный способ её увеличения?
Огромное спасибо за статью. Не знал, что калькулятор многопроцессорный, все как у взрослых. Хороший аппарат, и расчеты ускорял, и на занятиях играть позволял. На батарейки часть стипендии уходила, и купить их было можно не всегда, но без питания он никогда не оставался.
Пока нашел сам калькулятор. Новый, в упаковке. С инструкцией, схемой и гарантией.
У меня до сих пор лежит МК-52 и 2 штуки БРП к нему.
Как сейчас помню, что в некоторых программах были ошибки. Обидно, потому как исправить БРП было невозможно.
А МК сейчас неработоспособен, что-то с экраном, очень слабо светился.
В средних классах школы родители мне подарили книжку "Папа, мама, я и микрокалькулятор", которую я буквально до дыр зачитал. После программирования на калькуляторе, все компьютерные языки программирования уже казались лёгкой игрой.
Мне нужно было сдать успешно только математику, на остальные предметы можно было не тратить время. В общем, я на МК-61 тупо писал микропрограммки для проверки всех вариаций ответов (делал это очень быстро, умел хорошо программить на МК-61) и сдал на 100%.
и даже не русифицированного языка BASICК большому счастью, не русифицированного.
Автор немного лукавит, что "… до персональных ПК было 2 десятилетия" :)
У меня в 1986 был волне себе Синклер с довольно примлемой графикой и производительностью.
Ну и 32 килобайта оперативки это не 16 регистров и 96 адресуемых ячеек.
У этого калькулятора, у меня был МК-54, было три плюса:
Размер, собственный монитор и энергонезависимая память.
"Морской бой" на нем написал специально, чтоб "уесть" преподавателя в "Дворце пионеров", который утверждал, что это не возможно, так как не хватит памяти для описания двух полей 10х10, но не принимал во внимание, что регистры там здоровенные и состояние полей можно хранить в них.
:)))
Но, так то кодил конечно на Синклере.
Самодельные Синклеры, на аналоге Z80 производства ГДР, с 16кБ ПЗУ + 32 кБ ОЗУ, были тогда у всех желающих.
(я, тогда школьник из небогатой семьи, просто попросил маму купить мне Синклер и через пару дней два молодых паренька уже подключали его к советскому телевизору, изрядно при этом помучавшись)
Существовала целая подпольная индустрия по их производству на предприятиях ВПК из ворованных компонентов.
Жлобством и атрибутом "хорошей жизни" были Атари с фирменной периферией :)
Так что дефицитом они не были.
Другое дело, что большинство совершенно не представляло что с ними делать ...
были тогда у всех желающих.В 1986-то году? В начале девяностых уже более-менее. Но про всех желающих вы тоже загнули, конечно. Желающих-то было много, да вот позволить его себе могли немногие.
Да, ОЗУ там было не 32, а 48К.
В начале 90-х в Беларуси (тогда БССР) вовсю начали продаваться IBM PC-совместимые МК-88. Это был мой первый персональный компьютер. После наращивания памяти я на нём лабал курсовые в Turbo Pascal 5.
Вы путаете, начале 90-х уже на i8086 все сидели, если что.
У мажоров были i80286.
А, топовые 386DX-40 я у нефтяников тогда видел. Они стояли 10-15к зеленых.
У меня, кстати, тогда был 386SX-16 с мегабайтом памяти :)
С 1995 года уже Пентиумы пошли ...
Про память на Синклерах и их клонах.
Модель действительно называлась ХХХХХ-48к, но 16кБ там было ПЗУ
То есть 48кБ там адресуемое пространство было.
Я писал тогда на нем довольно суровые проги типа определения наличия корреляции двух трехмерных пластов из данных, полученных при сесьморазведке и, поверьте мне, точно знаю сколько там памяти :)
Приходилось сначала вводить данные и записывать их на ленту, а потом вторая часть программы их читала и обрабатывала.
Вместе оба модуля в оперативку ну ни как не влезали.
В начале 90-х, точнее 92-95, в общаге ЛЭТИ Синклер вызывал зависть. Летом 1995-го я накопил на материнскую плату 286, на остальное копил ещё где-то с год, с монохромным VGA монитором.
Емнип, на Синклере адресуемая память была 64кб, 16 кб из них ПЗУ, 48 — озу, включая видеоОЗУ
В 1990 году, осенью, в ПГТУ можно было в любое время подойти и сесть за свободный 8086
Теоретически там надо было записываться, но свободные всегда были.
На них работали только студенты младших курсов, старшие курсы и аспиранты работали на 80286, куда остальных не пускали.
Мамку с i80386SX мне выдал сисадмин "Геофизики" как глючную в 1992-м. За просто так. Она висела на стене, на гвоздике. Он её снял и вручил мне :)
Пусть будет 48 ;)
Видимо я уже просто чего то не помню ....
Я про личные, поработать можно было в самом институте.
С личными все было иначе в массе. У нас, помню, появился 286 с EGAшкой в 1994 году, который был (б/ушный) платой отцу за разработку пакета АИС для какой-то торговой фирмы, т.е. недешевая игрушка. У всех моих тогдашних друзей-одноклассников были от силы Денди, персоналка была только у меня. На следующий шаг — 80486 обновились в 1995, на 686 (и тот Cyrix) в 1998.
Не у всех желающих. Мне купили Микрошу за 700 рублей, а Синклер стоил 1500 емнип.
У меня в 1986 был волне себе Синклер с довольно примлемой графикой и производительностью.То, что конкретно у вас он был — не означало, что они достигли стадии «массового распространения».
Мои родители рассказывали, что ещё в 90е народ «подмазывался» к работникам бухгалтерии, чтобы они пустили на слудебной техники какие-то интегралы посчитать.
Так что «массовое распространение» — это уже, скорее, XXI век.
Хмммм…
Вероятно в разных местах было по разному, так как в том городе, на Урале, где я тогда жил, года с 1992 компы стояли даже у секретарш.
Вероятно и Синклеры в 80-х у нас были доступны в виду наличия в городе нескольких крупных оборонных заводов выпускавших военную электронику и микроэлектронику.
Там их не легально собственно и собирали.
И то, что компы попадали к секретаршам — вовсе не обозначает, что они были так уж сильно распространены. В том же, вами упомянутом, 1992м их было выпущено 20 миллионов, а в 2004м — 132 миллиона.
Согласитесь — несколько разные цифры. Население Земли в 6 раз за 10 лет точно не увеличилось!
Вероятно и Синклеры в 80-х у нас были доступны в виду наличия в городе нескольких крупных оборонных заводов выпускавших военную электронику и микроэлектронику.А, ну с этого и надо было начинать. У меня отец примерно в то же время работал на мясокомбинате, так мясопродукты у меня вообще были бесплатные и в достатке всегда.
Оба калькулятора раздал/сменял друзьям/родственникам, потом МК-52 ко мне все-таки вернулся, но видимо не мой экземпляр, уже не рабочий. Стоит-пылится на полке.
Есть еще абсолютно точный эмулятор для android — play.google.com/store/apps/details?id=com.cax.pmk.ext&hl=ru. Эмулирует все, в том числе всю еггогологию, описанную в свое время в «Технике-Молодежи».
Да, жаль, что не успели опубликовать, с удовольствием бы оценил игру.
А чем Вас JS-вариант эмулятора не устраивает? Тоже ведь не симулятор, к тому же и Android не нужен, только браузер.
Программировать в эмуляторе я уже не буду, а в телефоне часто просто использую для расчетов, когда рядом нет компа — совмещаю приятно с полезным.
Спасибо за ссылку. Почти как в детство вернулся
Есть еще абсолютно точный эмулятор для android
Потому что он использует все тот же код от Феликса Лазарева, только в варианте Java :)
Уважаемый автор, я недавно где-то в интернете наткнулся на достаточно подробный разбор архитектуры МК-61. Там много чего объяснялось — и длинная и короткая побочная ветвь, и Тьма, и много чего ещё — виной всему, насколько я помню, были особенности реализации кольцевого буфера, из которого все три процессора брали данные. Попробую поискать ссылочку, но не обещаю.
P.S. Вроде оно.
Решалось впаиванием диода. После этого получался перемещаемый девайс )))
Что касается легендарного ЕГГОГ — а что мешало разработчикам выводить «Еггог»? Для людей, не знающих тогда английский (как я), смысл бы всё-равно не поменялся, зато выглядело бы не так нелепо.
Так это и был error, не?
ru.wikipedia.org/wiki/%D0%95%D0%B3%D0%B3%D0%BE%D0%B3%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F
Из-за особенностей индикатора они похожи на upperscript… Хотя увеличил надпись и да, согласен, видно что в нижнем регистре получились бы совсем мелкие «г». Т.е. пресловутый «ЕГГОГ» это просто из прикола или незнания английского.
Помню у нас была преподаватель информатики, немка, она сразу предупредила «не смейтесь над названиями операторов». И вот пишет на фортране
WRITE и читает — «врите»
READ — «реад»
LINE — «лине»
Кто учил немецкий тем пофиг, а «англичане» кривили морды ))
Но сейчас, глядя на тот индикатор… это единственный вариант вывести error.
R заглавная была бы неотличима от A
При этом не стоит забывать, что шестнадцатеричные цифры в МК-61 иногда тоже используются, обозначаясь символами "-", «L», «C», «Г», «E», " ".
«A» используется как знак минуса, «F» — как пустой разряд.
Droid48 наше всё
Ну как бы HP48 и сам по себе мощнее и продвинутее МК-61. В конце 1980гг., начале 1990гг. у меня была книжка, в которой помимо МК-61 описывались современные зарубежные калькуляторы. Один был какой-то TI, а второй — вроде бы HP41 или HP42. Я читал и с тоской думал, что вряд ли мне доведется когда-либо иметь дело с такими девайсами.
При этом не стоит забывать, что шестнадцатеричные цифры в МК-61 иногда тоже используютсяНу дык на Б3-34 уже был ЕГГОГ, а никаких шестрандатеричных цифр ещё не было… оффициально, по крайней мере.
Спасибо, взностальгнул.
вместо того чтобы довести до массового выпуска компактный вариант чего-то типа Радио-86РК со встроенным ЖК экраном + ВЧ-модулятором для ТВ, и максимально его удешевить, промышленность тратила ресурсы на копирование мертворожденной фигни
и сейчас выпускаются, видимо хватает Гениев которым купить за 2000 руб. телефон с Андроид или за 3-5 тыс китайский 5" планшет, и поставить на него 5 калькуляторов и Maxima не позволяет гениальность советского Инженера
ЗЫ: забыл совсем про Гениальное советское ОЗУ РУ3/РУ5, вопрос снимается — реализовать портативный ПК было технически невозможно без комплектного РИТЭГа в чемодане
Полностью с Вами согласен — как владелец в те годы и МК-52 и Синклер, на 100% подтверждаю, калькулятор был так, "чисто поржать" даже с энергонезависимыми аж 96 ячейками.
Собственно и Радио-86РК был не пределом мечтаний при наличии аналогов процессора Z80 (который, если что, с 1976 года выпускается).
В СССР вовсю корпусировали кристалы выпущенные в Тайване или ГДР и недостатка в них не было. Недостаток был "в головах" у маразматиков.
По сравнению с шестичиповым набором Z80, набор КР580 вещь довольно таки убогая, капризная и не надежная.
Что-то вроде ЮТ-88?
Неужели все так плохо? Разбор микрокода при реверсе требует действительно много времени, но это отнюдь не безнадежно. Скорее всего, поставленные цели были достигнуты и уже не было особого смысла тратить время на полный разбор.
У меня хобби по разбору микрокода 1801ВМ1 заняло около года. Самое сложное было правильно определить формат слова, там было много полей которые несут двойную или тройную функциональность. Для МК-61 это вроде все известно, или я что-то упустил?
В ВМ1 слово кодировалось микроадресом и кодом инструкции PDP-11 и все это напрямую генерировалось ПЛМ, там просто не было никакого явного секвенсора с микрокомандами, пришлось писать специальный анализатор переходов и состояний. В МК61 стоит ROM и есть секвенсор, такой код намного проще разбирать — сейчас разбираю микрокод М4 на Am2900, там секвенсор + ROM — ушло всего две недели вечеров на разбор.
Так что — очень вероятно что МК-61 «добивать» просто не понадобилось, планка взята — и хорошо, а не потому что это «колесо Сансары».
Для МК-61 это вроде все известно, или я что-то упустил?Зависит от определения слова «всё».
Известно достаточно, чтобы выполнить этот микрокод на эмуляторе (не симулировать команды из инструкций, а именно микрокод выполнить). Но анализом его самого, вроде как, никто не занимался.
С другой стороны это как раз можно «оставить будущем поколениям» студентов: если уже есть и микрокод и симулятор, то уже дальнейший анализ — дело техники.
Тут беда в том, что ответ на вопрос «как» — таким образом получить можно, а вот «зачем» — увы, нельзя.
А он, зачастую, самый интересный…
Но по этой дороге пока никто не ходил. По крайней мере опубликованного результата нету.
> правильно определить формат слова, там было много полей которые несут двойную или тройную функциональность. Для МК-61 это вроде все известно, или я что-то упустил?
Книга Трохименко — Библия исследователей ПМК. Там подробно (побитно) разобран формат микрокоманды и даже есть карта кольца памяти. Дополнить её исследованиями Феликса, цены ей не будет.
Ну так вот похожий инструмент. Можно расписать действие каждой команды, пробовали такое делать. Много ли это дало?
Вот, например, разбор команды №30 ИК1302, которая принимает участие в выводе сообщения "ЕГГОГ":
S = R[0];
ОТ сч = 0 ДО 30 ПО 3:
R[сч] = R[сч + 3];
пам = R[33]; R[33] = S; S = пам;
ЕСЛИ S1 == 0xF:
L = 1; S1 = 0;
ИНАЧЕ:
L = 0; S1 = S1 + 1;
R[36] += L;
L = 0;
S = R[41];
pmk.the-hacker.ru/ИК13
В моих планах перенести, как минимум, микрокод из книги Трохименко. Потом дополнить кодом из эмуляторов. Но дел, конечно, тут больше, чем на одного человека. Буду рад, если вы поддержите.
Там же собрал немного информации по еггогологии, тоже можно дополнять:
pmk.the-hacker.ru/Электронный_океан
Кстати, насколько помню, в книге есть некоторые неточности, которые устранили только при восстановлении кода и разработке эмуляторов. Например, микроприказ №6, пихающий в альфу сумматора константу 4, у Трохименка напрочь отсутствует (с. 111), в итоге микрокоманда у него 27-битная.
Нашёлся ж. Если правильно помню, двоичное представление "тьмы" выглядит как несколько идущих подряд единичных битов, которые в процессоре зарезервированы под "Метку", которая по логике в кольцевом буфере должна быть только одна. И процессоры начинают воспринимать следующие за этой второй "Меткой" данные как команды, от чего пухнут и дохнут заглючивают.
Частично разобрали. В моём эмуляторе уже микрокод не используется, но сам код мало понятен, из за кучи мусора и не переименованных регистров переменных. Так что работы ещё много. Да, сделал декомпилятор, но оптимизатор ещё к нему не прикрутил. А ещё на разобрать алгоритм вывода на индикатор, по моему он не точен. Не в тех функциях инициализирует обновление экрана. Да, так же мой эмулятор самый быстрый и его ещё можно ускорить. На счёт статьи на хабре возможно будет потом.
Я, как и многие присутствующие, от корки до корки штудировал Юный Техник, Технику Молодёжи и Науку и Жизнь. Смотрю я на все эти программы, слюни текут… Я уже умею программировать, я уже знаю все тонкости, RPN отскакивает от зубов — а поработать не на чем. И вдруг пришла мысль — программировать уже умею, но совершенно не знаю клавиатуру, а ведь набирать надо быстро. Сказано — сделано: руки у меня росли откуда надо, я сделал себе модель калькулятора из дерева в натуральную величину. Всё чинно: кнопки вырезаны из толстого плотного картона острой бритвой и приклеены на свои места, экран тоже, всё раскрашено акварелью в соответствии с оригиналом, подписи чернилами.
Сижу и набиваю программы, чтобы запомнить расположение кнопок. Сначала медленно, потом быстрее, потом на время… Брат и сестра ржут надо мной ))) Наверное действительно вглядело нелепо — сидит 15-летний пацан и стучит по деревянному калькулятору.
Много позже я услышал присказку «тяжёлое детство, деревянные игрушки». Для кого-то это только оборот речи.
Спасибо что напомнили.
На практике, кстати, несколько раз приходилась обратная бескобочная запись. Собеседования проходить. Несколько раз задачи давали написать простой калькулятор с ней. Фраза " мой первый ПК был МК-61, а, кажется, в 1991 я реализовал свой Forth-83 на i8080" делала тестовое ненужным.
[
this.S, this.S1, this.L, this.T, this.П,
this.такт, this.команда, this.АСП,
this.вход, this.выход,
this.клав_x, this.клав_y
] = new Array(12).fill(0);
зачем такой вычурный способ инициализации? чем плох классический
this.S = this.S1 = this.L = this.T = this.П = 0
или просто присвоить 0 каждому свойству отдельно?
Спасибо, было интересно ознакомиться с Вашим опытом.
Прокомментирую некоторые моменты, надеюсь, Вы не против.
Также у калькулятора было 15 регистров для хранения данных и 105 байт оперативной памяти.
Всё-таки оперативной памятью у него является всё, что не хранится в ПЗУ (ну за исключением специальных регистров процессора). Т. е. формально у МК-61 есть 441 байт оперативки. Если же мы понимаем под оперативной памятью только то, чем может оперировать пользовательская программа, то ведь МК-61 не следует в полной мере принципам архитектуры Неймана-Лебедева, по которым программы и данные логически представлены в одной памяти, а оперативки у него тогда всего 10 байтов (регистры + стек).
Очевидно, что научить ПМК играть в шашки, а тем более в шахматы невозможно.
Очень даже возможно. Только это мало кому придёт в голову, потому что понадобится далеко не один экземпляр МК-61 и утомительный процесс с переброской данных между ними. Вот, например, программа, выполняющая шифрование по ГОСТ 28147-89 при помощи двух калькуляторов.
Клуб любителей игровых программ (КЛИП) своеобразная социальная сеть
Я бы очень удивился, узнав, что, поучаствовав когда-то в переписке по интересам, вдруг стал пользователем "социальных сетей".
существует продолжение серии: МК-152/162
К серии советских калькуляторов они имеют очень опосредованное отношение.
Всё-таки оперативной памятью у него является всё, что не хранится в ПЗУ
Да, Вы правы. Формально более правильно было бы написать: «Калькулятор предоставляет пользователю память для 105 шагов программы, 15 регистров общего назначения, 4 стековых и один предыдущего результата.»
потому что понадобится далеко не один экземпляр МК-61
Я когда-то читал о чем-то типа оверлеев на МК-52: в энергонезависимой памяти хранятся разные фрагменты очень большой программы, которые при необходимости подгружаются в программную. Но здесь я писал именно про вариант использования: один раз ввести программу и играть, а не заниматься перебрасыванием данных с одного калькулятора на другой :)
поучаствовав когда-то в переписке по интересам, вдруг стал пользователем «социальных сетей»
Но ведь социальной сетью можно назвать любые технические средства, позволяющие людям общаться и обмениваться информацией. Читал также мнение, что первой социальной сетью можно назвать европейскую почту XVII-XIX вв., позволявшую европейским ученым вести активную переписку и общение.
МК-152/162
Я, честно говоря, так и не понял смысл разработки этих устройств.
Но ведь социальной сетью можно назвать любые технические средства, позволяющие людям общаться и обмениваться информацией.
Ну так тогда и ту же электронную почту можно ею назвать. Вообще, в науках об обществе социальной сетью называют любой граф, где вершинами являются члены общества, а рёбрами — какого-либо рода социальные связи между ними. Технические средства тут не при чём. Другое дело, что в Интернете этот термин запомоен и используется для обозначения именно некоторой категории сайтов, пользование которыми, скажем так, не делает человеку чести и авторитета.
Я, честно говоря, так и не понял смысл разработки этих устройств.
Я тоже. Судя по всему, разработчики хотели выехать именно на волне "ностальгии", примазавшись к отечественной серии калькуляторов (не имея на это ровным счётом никаких оснований), но это даже мне, без всяких маркетинговых исследований, кажется абсурдом, особенно учитывая какие-то невменяемые цены, завышенные на порядки в сравнении со стоимостью комплектующих. Разработчики ещё что-то писали про использование этих поделок как управляющих/контролирующих устройств на производстве или что-то в этом духе, но это такой же бред — они там и даром никому не сдались. А может, рекламный ход такой: хоть кто-то теперь, пусть краем уха, но услышал, что в Новосибирске существует такая фирма.
Из известных цифр получается что 105 байт памяти программы и 21 регистр по 16 байт :)
Ну так регистры M, R и ST по 42 слова, две памяти по 252, итого 42 * 3 * 3 + 252 * 2 = 882
слова (т. е. всё то, что выведено на этой странице). А раз считаем 8-битными байтами, то делим на 2. Всякие ЛТП и S/S1 по очевидным причинам здесь не учитываем. Разумеется, сам термин "оперативная память" сюда за уши и другие концы тела притянут, поскольку это по сути внутренние регистры процессоров, а доступ к памяти последовательный, но функционально — оно самое.
Смог декомпилировать микрокод. Но код всё равно не слишком понятный, да он работает, я смог его нормально запустить в эмуляторе и он работает без ошибок.
Вот пример что смогла декомпилировать моя программка.
byte sum, x;
command = R[36] + 16 * R[39]; //8 bits текущая команда
switch (command) {
case 0x00: //IK1302 0
sum = 15;
S = sum;
sum = S;
R[0] = sum;
sum = R[3];
S1 = sum;
sum = S + 1;
R[2] = sum & 0xF;
sum = S;
R[3] = sum;
sum = R[6];
S1 = sum;
sum = S + 1;
R[5] = sum & 0xF;
sum = S;
R[6] = sum;
sum = R[9];
S1 = sum;
sum = S + 1;
R[8] = sum & 0xF;
sum = S;
R[9] = sum;
sum = R[12];
S1 = sum;
sum = S + 1;
R[11] = sum & 0xF;
sum = S;
R[12] = sum;
sum = R[15];
S1 = sum;
sum = S + 1;
R[14] = sum & 0xF;
sum = S;
R[15] = sum;
sum = R[18];
S1 = sum;
sum = S + 1;
R[17] = sum & 0xF;
sum = S;
R[18] = sum;
sum = R[21];
S1 = sum;
sum = S + 1;
R[20] = sum & 0xF;
sum = S;
R[21] = sum;
R[23] = 0;
sum = S;
R[24] = sum;
sum = 15 + 1;
Carry = sum >> 4;
S = sum & 0xF;
sum = 15;
S = sum;
sum = S;
R[27] = sum;
sum = R[30];
S1 = sum;
sum = S + 1;
R[29] = sum & 0xF;
sum = S;
R[30] = sum;
R[32] = 0;
sum = S;
R[33] = sum;
sum = 15 + 1;
Carry = sum >> 4;
S = sum & 0xF;
R[37] = 0;
R[40] = 2;
sum = R[36] + 1;
S = sum & 0xF;
push12(sum & 0xF);
if (Carry){
sum = R[37] + 1;
R[36] = sum & 0xF;
S = sum & 0xF;
} else {
sum = S;
R[36] = sum;
S = sum;
}
sum = S + 1;
R[36] = sum & 0xF;
sum = R[39];
S = sum;
push13(sum);
if (Carry){
sum = R[40] + 1;
R[39] = sum & 0xF;
S = sum & 0xF;
} else {
sum = S;
R[39] = sum;
S = sum;
}
sum = R[41];
S = sum;
break;
case 0x01: //IK1302 1
А вот после ручной оптимизацией.
byte sum, x;
register nibble tS, tS1;
register bit tCarry, tT;
tS = S; tS1 = S1;
tCarry = Carry; tT = T;
command = R[36] + 16 * R[39]; //8 bits текущая команда
switch (command) {
case 0x00: //IK1302 0
//# Формирование маркера кольца и кода состояния.
tS1 = R[30];
for (int i=0; i<=33; i+=3){
R[i]=0xF;
R[i+2] = 0;
}
ST[38] = ST[37];
ST[37] = ST[36];
ST[36] = 0x0 + 1;
ST[41] = ST[40];
ST[40] = ST[39];
ST[39] = 0x0;
R[36] = 2;
R[39] = 3; //goto 0x32
tCarry = 1;
tS = R[41];
break;
case 0x01: //IK1302 1
//# Ожидание маркера в кольце
Всё работает, и быстрей, но объём кода сильно возрос, без оптимизации кило на 175, после 80 КБ. Ах да, ещё много чего не оптимизировано так что объём кода можно ещё больше уменьшить. Всё таки ручная оптимизацию 800 кб кода или 49000 строк несколько утомительна.
Ладно! О чём я это я. Хочется сделать аппаратный эмулятор под максимально простые процессоры типа 8080 и микроконтролеры например 8051. А так же лучше понять внутренний алгоритм, сейчас он всё равно не очень понятный.
Интересная работа. Но я бы всё же сказал, что это не декомпилятор, а дизассемблер. Собственно, в подобном коде прошивка, по всей видимости, и писалась, а не на чём-то более высокоуровневом, вроде C, во что можно было бы в принципе декомпилировать. Я выше уже писал, что проводил подобные опыты, но понятнее код не стал, выявив лишь наиболее очевидные пути исполнения (например, нашлись команды, где лежит слово ЕГГОГ, или какие инициализируют память и ждут ввод). Даже подумывал дописать автоматический оптимизатор, но руки как-то не дошли.
Было бы интересно посмотреть на бумажную версию версию программ, как их писали разработчики, но, очевидно, не получится. Впрочем, поставленная нами задача принципиально решаема, но трудоёмкости ей не занимать.
Начинал на МК-61, но быстро перешёл на МК-52. ППЗУ тогда было космосом. Там можно было хранить программы между включениями! А БРП, это вообще были крутыми библиотеками. До сих пор две штуки дома лежат вместе с МКшкой.
Ну а потом МК-85 и -85М.
Сколько программ на них всех сделано, включая собственные игрушки, которые почти никто не видел кроме меня и моих друзей.
>> Если хотя бы один из битов команды с номерами 18—23 установлен в 1 и y кнопки равен нулю, то обнуляем T.
Судя по коду, с номерами 17-22.
МК-61: история, эмуляция, устройство