Онлайн-версия эмулятора МК-61

Соорудил онлайн-версию эмулятора на JavaScript'е, авось кому пригодится: http://mk-61.moy.su

Можно прикрутить автоматический ввод кода программ и предваряющих их инструкций, вывод отладочной информации и т. п.

P.S. Эмулятор опубликован на нашем сайте. Ссылка также доступна через верхнее меню.

Онлайн. Мне понравилось. Прикрутить ввод программ из библиотеки и их сохранение, конечно, интересно. Особенно если можно будет сделать совместимость с форматом mkp, в котором многое уже выложено здесь, на сайте уважаемого Арбинады.

Немного попробовал «EГГ0Гологию», работает. С «точкой» поглючить не удалось, но это вопрос времени на проверку. :-)

Могу посоветовать сделать красивые клавиши. Хотя бы в Юникоде: × ÷ ↑ → ← ↔ ≠ ≥ ⊕ π² и т.д., но лучше всего картинками. Также полезен эффект нажатия на клавишу и, возможно, клик.

В 93 строчке кода есть возможная ошибка: "x<0" лучше заменить на "x&lt;0". Мой браузер проглотил, но всё-таки неаккуратно. e^x, 10^x и x^y лучше отображать традиционно: как ex, 10x и xy.

В режиме счёта (выполнения программы по С/П) правый символ выходит за рамки индикатора. На родных калькуляторах яркость мерцающих цифр была слегка приглушённая. Это создавало эффект «вспыхивания» индикатора, когда счёт останавливался. Он легко ловился боковым зрением. Также в эмуляторах ПМК для iOS применялась графика для отображения аутентичных 8-сегментных цифр. Получалось неплохо.

Исправления > Могу посоветовать сделать красивые клавиши. Хотя бы в Юникоде
Сделал. Теперь практически полное соответствие надписям калькулятора, выполненное без единой картинки (всё в одном файле). Немало времени пришлось потратить, чтобы это всё выглядело одинаково и под Оперой, и под Хромом, и под Файерфоксом.

Можно попробовать сделать и мерцание, как на реальном калькуляторе. Я просто шёл по пути максимальной простоты скрипта, стремясь найти баланс между скоростью работы и нагрузкой на процессор. С графикой мерцания быстродействие уменьшится, зато будет примерно соответствовать реальному, и работа программы будет весьма красиво смотреться. В таком случае лучше будет использовать фотографии реального знакоместа ( http://www.alfredklomp.com/technology/mk-61/p1000867-868.jpg ).

> В режиме счёта (выполнения программы по С/П) правый символ выходит за рамки индикатора.
Подгонял в Опере, теперь вроде бы не вылазит и под другими обозревателями.

> В 93 строчке кода есть возможная ошибка: "x<0" лучше заменить на "x<0"
Исправил, спасибо.

Вылазит. На моём Firefox'е под OS X вылазит. Зато слева от цифр теперь — здоровенное поле. Если сделать цифры картинками на основе фотографий, вылезать не будут. Мерцание и сейчас есть. Просто зелёный цвет надо сделать чуть тусклее (ближе к цвету фона), когда калькулятор находится в режиме счёта по программе.

Надписи на клавишах теперь гораздо лучше, спасибо. Единственное — символ ≥ виден везде. А тот, который сейчас использован для >=, под OS X не виден. Также у меня не виден злополучный символ FR (код 25). Когда Михаил Борисович столкнулся с проблемой этого символа, он просто использовал вместо него картинку. Как в документации, так и на сайте. Хорошее решение в Юникоде, видное везде, пока не найдено.

Аналогично "1,6 6 1 9 0 2 5 - 0 1" показывается как "1,6 6 1 9 0 2 5 - 0", не влезает. Firefox под Linux Mint 13.

Калькулятор надо изобразить либо целиком картинками (от корпуса до знакомест), либо целиком без них, идя по пути наибольшей простоты программы. Промежуточный вариант сношения с файлами изображений мою душу не очень греет.

> Если сделать цифры картинками на основе фотографий, вылезать не будут.
Пока сделал по-другому: для каждого знакоместа своё поле. Надеюсь, сейчас не вылезут.

> Единственное — символ ≥ виден везде.
Только выглядит он, к сожалению, вызывающе нерусским. Может быть, нужно подобрать для надписей конкретный шрифт, содержащий использованные знаки?

> Также у меня не виден злополучный символ FR (код 25).
Ещё такой есть: Ѻ. Не стрелки, но весьма похож. Поставленный сейчас знак только с одной стрелкой и не замкнутый.

Знакоместы. Индикатор, вроде, заработал. В режиме счёта отображается 12 символов. Первый 0 с запятой (если число отрицательное, то девятка), потом 8 цифр мантиссы, 2 цифры КОПа, запятая, Е, запятая. Целиком одной картинкой не получится, а вот сделать по две картинки на каждую клавишу (нажатая/отжатая) будет красиво.

Символы >= и кольцо по прежнему не видны. Вместо них отображается в прямоугольничке нечто, гораздо более вызывающе нерусское, чем ≥.

Вот эта дырка с точками - Ѻ, отрисовывается или нет?

> Целиком одной картинкой не получится
Я имел в виду одно изображение для корпуса и наложенные на него картинки кнопок (нажатых и отжатых), выключателей и цифр.

> сделать по две картинки на каждую клавишу (нажатая/отжатая) будет красиво
Так это же обычные HTML-овские кнопки, тут можно и стилями CSS обойтись...

> Мерцание и сейчас есть. Просто зелёный цвет надо сделать чуть тусклее
Хорошая идея. Видимо, такой эффект создаётся по той простой причине, что индикатор не успевает толком разгореться до следующего затухания. Кстати, именно эти затухания перед выводом нового значения я и имел в виду под мерцанием.

Дырка с точками > Вот эта дырка с точками - Ѻ, отрисовывается или нет?
Да. На форуме отрисовывается.

Эмулировать затухание/разгорание, видимо, смысла нет. А вот пониженную яркость индикатора хотелось бы.

Сейчас индикатор работает хорошо, с фиксированными знакоместами. Но пропала возможность выделить мышкой число и скопировать его из RX в буфер обмена.

Замена. Заменил дырку и сравнение, сделал объёмные кнопки с круглыми углами. Как выглядят?

Выглядит замечательно. Все названия видны, кнопки нажимаются, все знакоместа видны. Осталось только приглушить яркость в режиме счёта по программе и будет МК-61.

Считывание/сохранение программы это уже будут добавления от нашего времени.

Сделал пока мерцание при изменении числа на индикаторе. Но некоторое мерцание у реального калькулятора имеется вообще при любом нажатии клавиши, а в режиме счёта - постоянно. Надо этот момент ещё проработать.

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

Ну так алгоритм на это и нацелен: разгорается шрифт, допустим, 0,15 с, а значение обновляется каждые 0,1 с, в итоге получить последнее значение яркости шрифт не успевает, и экран выглядит тусклым.

Вот как сейчас? Общая скорость разгорания по коду получается 50 мс, тогда как обновление индикатора - не чаще 100 мс. Но, тем не менее, получается, что разгорание происходит медленнее. Интересно, насколько это зависит от общего быстродействия компьютера. На своём я как раз наблюдаю эффект притухшего экрана в режиме счёта.

Быстродействие. Сильно зависит.

Великолепный пример программы, которая на двухгигагерцовой машине считает 2×2 почти полминуты. А в 2007 году утверждали, что так не бывает. :)

Тут ещё от организации многопоточности зависит, как осуществляет периодические вызовы кода JavaScript, в частности.

Что конкретно интересует: как отображаются цифры, успевают ли полностью разгореться в режиме счёта или вообще не разгораются, и над этим ещё надо работать? Или нормально смотрятся?

Не переживайте, написать ява-скриптовое приложение, одинаково работающее везде сложнее, чем аналогичное исполняемое оконное. Просто потому, что оконное надо тестировать под разными ОС, а скриптовое - под разными браузерами и под разными ОС. Комбинаторика :)

Смотрится. Да нормально смотрится.

Хотя, к примеру, на FF v3 и Konqueror v4 (Linux) Ваша программа тормозит люто, но не думаю, что Вам имеет смысл принимать во внимание существование таких пользователей. На Опере v11 всё работает более-менее нормально на этой же машине.

Хорошо, в таком случае оставлю, как есть. Относительная совместимость с различными обозревателями всё-таки достигнута. Запуск одного такта происходит с интервалом 0,1 с, можно увеличить, но тогда будет медленнее реагировать на действия. Впрочем, можно проработать ещё реакцию на нажатия клавиш в условиях более медленной работы, заодно и мерцание добавить.

Затухание. Уменьшение яркости в режиме счёта по-прежнему нет. Более того, если включить калькулятор и нажать С/П, моргание тоже довольно быстро прекращается.

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

Затухание. А чем плохо просто уменьшить яркость цифр в режиме счёта — заменив зелёный на тёмно-зелёный? Зачем возиться с физикой моргания и затухания, так ли это важно?

Сейчас коп 00 вызывает моргание лишь если цифра добавляется к мантиссе. Как только набирается 8 цифр, моргание исчезает. Но даже моргающий экран горит на той же яркости, что и в режиме АВТ.

Хорошо, убрал мерцание цифр, вместо него сделал потускнение в режиме счёта. Плюс к тому несколько оптимизировал код: скорость вызовов основного шага сокращена в три раза, не будет так тормозить, вместо этого шаг вызывается при каждом нажатии кнопки.

Лучше. Значительно лучше. Правда, на ПМК сильней тускнело. Теперь можно попробовать сделать нажатия клавиш, имеющихся на клавиатуре ПК (0, 1,… 9, +, -, Enter) — конечно, если это поддерживает JavaScript.

Попозже проверю с айфона, как там страничка работает.

Кстати, родные ПМК при нажатии шаг влево/шаг вправо помаргивали индикатором. Будто переходят на мгновение в режим счёта. На ЭКВМ тоже это не «слепые» клавиши — меняется счётчик шагов на экране.

Сделал ещё тускнее. Добавил нажатия клавиш для цифр, цифровой части клавиатуры, включая арифметические действия и запятую, а также В^, Сx и ШГ->/<-.

Нажатие. Нажатия клавиш не работают. Видимо, здесь действительно нужна цифровая клавиатура, который под рукой нет. Разница в яркости сейчас заметна. Можно оставить, хотя на ПМК цифры были не так различимы.

Да, под Фаерфоксом не работают, надо поискать способ. Под остальным нажимаются; я указал не только цифровую клавиатуру, но и цифры в основном поле. Что касается тусклости, то дальнейшее потускнение, на мой взгляд, сделает индикатор почти нечитаемым. Да и причина не такой различимости была, видимо, больше в мерцании, чем в его следствии - тусклости.

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

Проверка на айфоне. Очень плохо работает на айфоне. Жутко тормозит, на индикаторе от цифр остаётся лишь по непонятному столбику. Символ, выбранный для FR, на клавиатуре не виден.

Лучше всего страничка выглядит в родном Сафари, нежели в альтернативных браузерах. Там удалось не только включить ПМК, но и перейти в F ПРГ. Хотя пришлось это делать вслепую.

Ну так это устройство не предназначено для таких задач. Если на ПК скомпилированный эмулятор жрёт от 20 до 40 % ресурсов процессора, то что говорить о жаваскриптовом на айфоне?

Формат "mkp" > совместимость с форматом mkp
Какой смысл изобретать какой-то специальный формат для программ, занимающих в текстовом виде не больше килобайта и предназначенных для ручного ввода?

Формат "mkp" изобретать не придётся. Он уже есть. И в нём уже набрано большое количество программ для ПМК.

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

Хорошо, тогда какие инструменты для работы с ним существуют? Ведь тому же МК-61 скормить файл "mkp" не получится, всё равно надо чем-то преобразовать в читаемый вид...

Описание формата mkp есть на сайте производителя.

Я не знаю, есть ли у тебя доступ к памяти программ твоего МК-61. Если нет, надо будет нажать F АВТ В/О F ПРГ и восстанавливать нажатия клавиш по кодам операций, считанных из mkp.

Доступ > Я не знаю, есть ли у тебя доступ к памяти программ твоего МК-61
Интересно, а у кого он есть?

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

Я так понял, для работы с этим форматом есть одна-единственная программка, которая выдаёт нечто подобное:

Причём тут советские калькуляторы, я так и не понял.

Транскрипция. Ну, если Вас беспокоит латинская транскрипция, то есть и такой вариант:


; Программа "Таймер Дзэн"
; Разработана в Москве, 12 июля 2010 года
; Автор Васильев И.В.
; Файл mkp обработан программой mkp2mklrus

.АДР 0
В 60 / П0 9ВП3 ПЕ 44 + ПА 11 + ПВ
СХ РРП 9045
А21: 2 РРП 9010 19 РРП 9020 КГРФ
223 РРП 9042 32 П1
А40: 32 ИП1 - 64 КИПА - П2 КПЕ
СХ 63 ФВХ + П3 РРП 9012
31 ИП1 + ИП2 КПЕ
ФВРЩ ИП3 РРП 9012 КГРФ
ФЦ1 А40
А73: РРИП 9029 КНЕ ФХ!=0 А73
КИПВ КМСГ ПС 255 РРП 9042 4 П3 РРП 9001
64 П6 СХ П7 В КПЕ 8 В 3 РРП 9013 КГРФ
А107: КИПА П5 КИПА П4 КПЕ 2
А113: П2 31
А116: П1 КИПА ФКОС П8 КИПА ФКОС П9
А123: ИП6 ИП4
А125: - ИП5 ИП7 - ФХ=0 А141
90 ИП3 3 - ФХ>=0 А158
ФВРЩ БП А163
А141: / ФАРКТГ
4 ИП3 - ФХ!=0 А162
3 - ФХ=0 А158
СХ 360 БП А162
А158: СХ 180
А162: +
А163: ИП0 * 360 / ПД
А170: КИПВ КМСГ ИПС - ФХ<0 А179
24 +
А179: ИПД - ФХ>=0 А170 ИП7 ИП6 РРП 9012 КГРФ
ИП8 + П6 ФВРЩ ИП9 + П7 ФЦ1 А123
32 РФЦ2 А116
РФЦ3 А107
440 В 10 РРП 9052
А215: РРИП 9052 ФХ=0 А215
РБП А21
.ДБ 06ш, 0Аш, 0Сш, 0Фш, 10ш, 12ш, 13ш, 15ш, 16ш, 17ш
.ДБ 18ш, 19ш, 19ш, 1Аш, 1Вш, 1Вш, 1Сш, 1Дш, 1Дш, 1Дш
.ДБ 1Еш, 1Еш, 1Фш, 1Фш, 1Фш, 1Фш, 20ш, 20ш, 20ш, 20ш
.ДБ 20ш, 20ш, 1Фш, 40ш, 0ш, 5Аш, 5Аш, 0ш, 20ш, 40ш
.ДБ 5Аш, 0ш, 0В4ш, 5Аш, 20ш, 3Фш, 0В4ш, 5Аш, 5Аш, 0В4ш
.ДБ 1Фш, 3Фш, 5Аш, 0В4ш, 0ш, 5Аш
.КОНЕЦ

P.S. Забавно было бы посмотреть на доморощенный вариант таблицы товарища Менделеева. У Вас такого ещё нет, случайно?

> Забавно было бы посмотреть на доморощенный вариант таблицы товарища Менделеева. У Вас такого ещё нет, случайно?
Так использующийся сегодня вариант - он и есть, ведь Менделеев и использовал подобные обозначения. А советские калькуляторы ничего похожего на "RM", "ENT" и "GSB" не использовали.

> ФАРКТГ
> ФКОС
Больше на нелепую транслитерацию похоже, нежели на язык русских ПМК.

Опять не нравится > "Больше на нелепую транслитерацию похоже, нежели на язык русских ПМК"

Опять не нравится. :)

Зато приведённый вариант вообще не содержит латинских букв, прекрасно укладывается в КОИ-7, а при минимальной доработке и в МТК-2.

Собственно, устоявшейся полной русской транскрипции ЯМК не было сделано, по ряду причин. Упомянутая программа содержит промежуточный вариант. Можете приложить руку к созданию каноничного синтаксиса.

А латинская транскрипция ЯМК выполнена в соответствии с советским стандартом - о чём Вам, впрочем, неоднократно говорили.

> выполнена в соответствии с советским стандартом
Латинская часть стандарта предназначалась для изделий, идущих на экспорт. Зачем её вообще было трогать?

Экспорт. Некоторая часть партии, очевидно, пошла на экспорт. :)

Работа с файлами. Считывать файлы всё равно придётся. И двоичный файл с однозначными кодами операций считывать проще, чем разбирать текстовый. Где может быть русская буква К, а может быть латинская K. Может быть ИП, а может быть П→х, десятки других неоднозначностей.

Ссылку я привёл, т.к. на той страничке (помимо прочего) приводится формат mkp:
== ==
Программа (*.mkp)

Файл содержит коды команд МК и является исполняемой программой ЭКВМ. Длина программы МК кратна странице (100 команд). Длина файла от 1 до 20001 байта.

Формат файла:
Смещение Назначение
0 номер начальной страницы
2i+1 код команды
2i+2 признак команды (0 - команда или адрес), шестнадцатиричного ввода (1 - HEX) или текста (2 - TEXT)
Здесь i принимает значения от 0 до 100*n-1, где n-число страниц в файле

Программа может быть преобразована в исходный текст (декомпилирована).
== ==

MK.EXE — не единственная программа, понимающая этот формат. Также его понимает, например, мой программный калькулятор «Электроника ВК-6».

Показатель, однако. 30 лет прошло с первого выпуска ПМК, но до сих пор создаются эмуляторы на разных платформах.

Так, культовая вещь есть культовая вещь :)

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Текстовые программы. Прикрутил автоматический считыватель текстового программного кода. Окно ввода вызывается клавишей пробела.

Добавил вывод регистров, стека и счётчика команд, а также поставил на ту же страницу форму ввода программы.

Добавил считывание программы из памяти.

Считывание работает, только мнемоники несколько странные, например "пи" или "^" вместо символов π и стрелки ↑.

Так это же для удобства набора на клавиатуре ПК. Букву пи или значок стрелки набрать будет несколько проблематично. Хотя, в принципе, можно добавить эти красивые обозначения в качестве альтернативных и выводить именно их при считывании. Просто считывание программы имеет ещё одно назначение: показывает, какую мнемонику можно использовать для ввода нужной команды; так эта функция пропадёт.

Если поле используется и для ручного ввода текста, тогда причины понятны. Я сходу решил, что оно нужно для ввода/вывода через буфер обмена, чтобы наглядно было, ну, и для публикации программы. В последнем случае адресов не хватает - может имеет смысл выводить/вводить команды в формате "АДРЕС.КОМАНДА"?

Сделал вывод в таком формате. Ввод также возможен в нём, при этом адрес указывает, куда будет записана команда (не стоит, однако, смешивать ввод команд с адресами с командами без адресов). Также исправил недоработку, приводившую к ошибке, если подавалось более 105 команд.

Теперь текст воспринимается гораздо лучше, да и руками можно вводить не в калькулятор, а просто набивать в шаблон с клавиатуры, да хоть в Excel/LibreOffice Calc. Можно использовать этот формат для обмена с другими программами. А в известном calculator3000 я так и не смог скопировать мнемонику в буфер обмена.

39.Kx=0D
40.KИПD
41.KПП1D
42.Kx>=01C
46.KП1A
47.KП1B

Что-то не так с именами регистров - иногда правильные, а иногда с префиксом "1" выходят

Исправил, спасибо за замечание.

Добавил вывод стека возвратов.

Позвольте и мне предложить своё скромное участие в проекте.
Вот как можно превратить МК-61 в МК-54:

if // MK-61
{
IK1306.in = IK1303.out; IK1306.tick();
IR2_1.in = IK1306.out; IR2_1.tick();
}
else // MK-54 - убираем ИК1306 из кольца, соединяя ИР2_1 с ИК1303 напрямую
{
IR2_1.in = IK1303.out; IR2_1.tick();
}

Вот разница между адресами страниц памяти:

MK-61:
{2, 209},
{2, 251}, {2, 41}, {2, 83}, {1, 125}, {1, 167}, {1, 209}, {1, 251}, {1, 41}, {1, 83},
{5, 41},
{4, 41}, {3, 41}, {2, 125}, {2, 167}

MK-54:
// убираем в начале {2, 209}
{2, 251}, {2, 41}, {2, 83}, {1, 125}, {1, 167}, {1, 209}, {1, 251}, {1, 41}, {1, 83},
// здесь убираем {5, 41}
{4, 41}, {3, 41}, {2, 125}, {2, 167},
// в конце добавляем обе убранные пары
{2, 209},
{5, 41}

А вот разница между адресами регистров стека:

MK-61:
{5, 34},
{4, 34}, {3, 34}, {2, 118}, {2, 160}

MK-54:
// убираем в начале {5, 34}
{4, 34}, {3, 34}, {2, 118}, {2, 160},
// в конце добавляем новую пару
{2, 202}

Стек возврата у МК-61 и МК-54 сидит в одном и том же месте.

Благодарю за участие. Добавил эмулятор МК-54. Правда, пришлось немного адреса да и сам код подправить. К примеру, [5, 41] здесь быть в принципе не может, поскольку 5 здесь - указатель на ИК1306, первые 4 страницы памяти стали последними, адреса стека несколько изменились и т. п. Кстати, по такому случаю можно было бы и Б3-34 оформить, как считаете?

Виноват, [5, 41] действительно лишний в МК-54, проглядел.

Что касается "нарисовать Б3-34", то почему бы и нет ? Насколько мне известно, определённый спрос на такое оформление имеется. Для полноты коллекции можно и МК-56 нарисовать.

Пока добавил Б3-34, как выглядит? На досуге и МК-56 надо будет прицепить.

Недурно, очень похож, но я бы клавиши сделал квадратными.

Согласен с Вами, сделал их квадратными. Добавил также МК-56. С ним интереснее: судя по всему, как и прочие настольные модели, он отличался многообразием цветов корпуса. Я взял более или менее стандартный - серо-коричневый.

Впечатлён, просто здорово получилось. Осталось добавить МК-52 для полноты. Я как раз недавно приобрел это "культовое" устройство "в железе" в рабочем состоянии вместе с БРП-3 (попутно избавившись от МК-161). По этому поводу возникла идея: к эмулятору МК-52 добавить функции "подключения" БРП. Программы из них (БРП-3 и 4) уже декодированы и доступны в виде дампов.

Спасибо за такую оценку, рад, что нравится. Насчёт МК-52 возникает закономерный вопрос: известна ли достоверно схема работы с модулями памяти, в частности, устройство К745ИК1801-2, или её следует реализовать самостоятельно? Не будет ли в последнем случае это нарушением принципа эмуляции?

По культовости,наверное,МК-61 всё-таки,впереди. МК-52 на руках у народа было меньше - больше было бредящих он нём, типа меня :)
Я тоже приобрел коллекционный МК-52 с БРП-3, последних лет выпуска. К сожалению, там был баг "постсоветского" пофигизма - перепутаны провода питания на разъеме, в результате вставленные батареи коротятся. Баг известный, но всё нет времени сесть перепаять.

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Отлично получилось!

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Спасибо. Почитал, кстати, насчёт упомянутого МК-52. Управляющие микросхемы К745ИК18 подобны К745ИК13, так же являясь микроЭВМ со своей программой в ПЗУ. То есть без кода программы К745ИК1801-2 эмулятор МК-52 сделать не получится.

Несколько человек просили меня сделать им МК-61 "в шкуре МК-52", хоть и без ППЗУ, но им "так привычнее", т.к. они в жизни имели дело только с МК-52.

С одной стороны мне кажется, что делать эдакого франкенштейна будет идеологически неверно. С другой - шансы, что Феликс Лазарев или кто-то другой расчехлит микроскоп и выйдет на охоту за микрокодом К745ИК18 исчезающе малы.

Согласен - это будет идеологически неверно.

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Эмуляция должна дублировать функции, но при этом воспроизводить еще и внутреннюю работу устройства не является обязательным условием. Мне кажется, что считывание программ/данных из БРП-хх и операции чтения/записи данных/программ из/в ППЗУ - как раз тот случай, когда достаточно, не вдаваясь в схемотехнику, воспроизвести работу функций, коих наберется с десяток, наверное.

Из недокументированных "фишек" навскидку помню, что при записи в ППЗУ одной программы поверх другой коды их команд логически складывались. Это был "стандартный" метод получения команд с кодом "FF" на МК-52, он описан в журналах, могу даже поискать. В "НиЖ" №1-1989 была целая статья, посвященная работе с ППЗУ.

На примере программы "14 пешек" проверил работоспособность ввода-вывода текстов программ на эмуляторе. Наткнулся на следующие трудности, которые, видимо, легко поправить.
1. Вместо нуля "0" в В/О используется буква "О"
2. Не хватает "К" перед соответствующими операциями (например, /\). Понимаю, что "К" может показаться лишней, но это фактический стандарт, принятый при записи в большинстве изданий того времени.
3. Аналогично для "F" перед операциями (например, пи).
4. Очень нужно форматирование: выравнивание столбиков команд, разбитых на строки по 10 команд. Тогда текст можно просто вставить в блог тегом pre, и он останется читаемым.
5. Умножение "*" записывалось в большинстве источников как "х" (можно использовать русскую "ха" и латинский "икс")
6. Видимо, имеет смысл выводить для справки команду по адресу А5, зацикленную на 00.

Почитал статью про ППЗУ. Сделать, естественно, можно, хотя вопрос полного соответствия работе микросхемы ещё стоит. Весьма мудрёная схема (то 98 команд, то уже 91, то первая команда ставится на место последней и т. д.), МК-52 на руках не имею, так что проверять не на чем. Хотя заняться стоит, инструмент будет, полагаю, полезный.

Про 14 пешек...
1. Тут прочтение двойственное. С одной стороны О - это очистка регистра счётчика шагов. С другой 0 - это возврат к 0-му адресу (суть одно же). Добавил и В/0. Кстати, в Вашей программе используются оба варианта (00 и 54).
2 и 3. Сделал.
4. Добавил пока переход строки после каждых 10 команд. Табуляция между ними ублюдочно смотрится, поле слишком маленькое.
5. Сделал.
6. В каком виде приписывать 106-ю команду? БП 00? В/О как-то не совсем понятно тут, на мой взгляд.

Спасибо за внесенные изменения! Если надо будет что-то проверять на живом МК-52, то я, конечно, постараюсь помочь.

По пунктам:
1. Команда В/0 у меня отпечаталась в памяти как "возврат на ноль". Т.е. возврат из подпрограммы или, если стек возврата пуст, БП 01. Если разборщик текста в эмуляторе принимает оба написания - тем лучше, потому что при наборе можно и ошибиться.
4. Думаю, табуляция здесь и не нужна. Алгоритм вычисления отступа примерно такой. Для каждой команды столбца (номер оканчивается на 0, 1,..., 9) определяем максимальную длину Lmax команды в выводимых символах. Затем для каждой команды столбца добавляем Lmax - Lтекущей + 1.
6. Думаю, вывод 106-й команды нужен только, если по 00 стоит В/0, для наглядности.

Не за что. Сделал, как Вы написали. Также убрал команды ИК1306 из разборщиков Б3-34 и его семьи.

Попробовал скопировать текст "14 пешек", и программа ввелась без проблем!

Обнаружил небольшие недочёты при выводе:
1. Если в режиме ПРГ выделить текст Ctrl+A и удалить его клавишей Del, то в ПМК вводится команда Cx (OB).
2. При выводе текста обратно по-прежнему нет префиксных клавиш К и F перед операциями типа {x} или 1/x, умножение выводится звездочкой, а не крестиком "x".

В остальном ввод-вывод практически готов для ввода программ методом копирования через буфер. Правда, я встречал в сети запись программы по столбцам без вывода номеров команд, может быть имеет смысл предусмотреть такой ввод (вывод, конечно, уже "нормальный", с номерами).

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

Еще одна идея, думаю, легко реализуема - добавить "ускоренный" режим счета, когда скорость устройства не эмулируется. Это очень полезно при отладке, а также при проверке старых программ, которые работали часами на МК-61/52. Например, поиск простых чисел.

1. В программе предусмотрен ввод некоторых команд клавиатурой, поэтому имеется такой эффект при работе с текстом. Попробую повозиться со всякими фокусами на поля ввода, если не будет эффекта, тогда придётся ввод с клавиатуры убрать.

2. Так ввод может быть и с номерами, и без номеров. А вывод я просто оставил в прежнем виде, можно поменять. Ориентировался при подборе формата вывода на книги Я. К. Трохименка, который обычно указывал коды без номеров и префиксов. Насчёт ускоренного режима могу сказать, что намного быстрее эмулятор работать не станет, раза в 2 - 3 максимум, зато процессор будет грузить на 100%.

Первое исправил. Насчёт второго надо подумать, как сделать лучше. В журналах, к примеру, использовались более приличные знаки стрелок, степеней и т. д. Сделать по подобию? Тогда, как я уже писал, пропадёт функция демонстрации печатных мнемоник команд.

Мне кажется, текст вывода вполне читаемый и близок к стандартам того времени (с учетом уже высказанных уточнений). Пусть даже он будет немного отличаться, не в этом суть, главное, чтобы он был зафиксирован и воспроизводим. Вывод не корректируемых с клавиатуры символов, по-моему, не нужен. Т.е. проще исправить в тексте В^, чем копировать символ стрелки через буфер из таблицы.

А вот со вводом ситуация противоположная - чем больше вариантов эмулятор сможет разобрать и перевести в код ПМК (с последующим "стандартным" выводом), тем лучше. Включая знаки стрелок, плюсов в кружке и прочей юникодной и html-entities символики.

Поставил для вывода адресов команд 100:104 вместо буквы A чёрточку, а также добавил обозначения ПX и XП для ИП и П.

Думаю расширить поле ввода программы, а само изображение калькулятора переместить в правую часть экрана, а в код программы добавить немного подсветки (адреса, группы команд и т. д.). Как думаете, не будет ли хуже смотреться?

Подсветка только улучшит прочтение текста. А страницу я бы скомпоновал так:
- в левой части - выпадающий список "Тип калькулятора" и под ним сам ПМК
- в правой части - стек, регистры, счетчик и стек возвратов
- в нижней части - блок текста "Код программы" (чтобы команды по 10 влезали по длине), кнопки "Прочитать" и "ввести" - справа.

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

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

В целом стало удобнее.

Если при выводе текста программы можно будет учесть уже высказанные пожелания по поводу добавления префиксов К и F, х вместо *, то будет совершенно аутентично публикациям в НиЖ или ТМ.

Добавил выбор подсветки по желанию, а также вывод текста программы в виде числовых кодов. Сделал также рамочки вокруг полей, чтоб выглядело понятнее. Размеры полю ввода кода придал определённые, чтоб красивее смотрелась (правда, в Опере есть некоторые проблемы с фокусом). Вывод в стиле старых журналов полагаю сделать, когда оформлю выделение префиксов К и F в коде, а то без этого разметка имеет меньше смысла.

Сделал вывод с префиксами. Выделяются они серым тонким шрифтом; не голубым и жёлтым, поскольку будут контрастировать с командами косвенного обращения, в которых префиксы не выделяются, ибо неотъемлемы от них. Также заменил звёздочку умножения на икс и ещё всякого по мелочи, можете оценить. Надо ещё остальные калькуляторы переделать.

Отлично, спасибо! Привычная журнальная нотация.

С наступающим!

Спасибо, и Вас с Новым Годом и наступающим Рождеством Христовым! Ещё добавил для разнообразия эмулятор Феликса-М; в будущем можно будет его дополнить некоторыми автоматизирующими работу инструментами.

Перечень мнемоник команд вынес в отдельный файл (mk-61.moy.su/mnemonics.js). Структура каждого пункта перечня следующая: код; список возможных слов; тип команды (0 - обычная, 1 - с номером регистра; 2 - с последующим адресом); группа, к которой относится команда (используется в подсветке); номер мнемоники, используемой при чтении кода из памяти; перечень номеров мнемоник, использующих префиксы F или K.

Давайте сделаем страничку эмулятора на нашем сайте? Я бы взял за основу существующую версию, если будут обновления - обновим.

Вот, кстати, когда оно все в одном файле - удобнее развертывать (в ущерб удобству модификации программ). Есть такая штука, как макропроцессор m4 (похож на си-препроцессор, но помощнее), он позволяет собрать из кусков один файл. Не хотите пойти по такому пути? Я его использую для SQL.

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

Также добавил по примеру эмулятора уважаемого Cax'а сохранение состояния калькулятора в произвольный момент времени.

Собрал всё до кучи, в один файл, добавил кнопку остановки работы эмулятора, исправил несколько мелочей. В таком виде, полагаю, можно выкладывать на сайте.

Опубликовал ссылку в главном меню. Заодно вернул ссылку в википедии на оригинальную с объяснениями, надеюсь, что поймут (я удалил нецензурную лексику). Спасибо за столь серьезный вклад!

Спасибо. Со старой страницы поставил перенаправление (или лучше оставить два экземпляра эмулятора?).

Почему-то ручка от Феликса в обход моего внимания уехала вниз. Если Вас не затруднит, прошу исправить 954-ю строку, в стиль тега "td" приписав "vertical-align: middle;". Кстати, Вы перенесли с эмулятором и счётчик, устанавливавшийся хостингом в самом низу страницы, здесь он ни к чему.

А вот с википедиками, считаю, дело Вы зря пытаетесь иметь: чем больше их гниль всплывает наружу, тем лучше, ибо далеко не всем, к сожалению, очевидно, какие это мрази. Я с этими выродками давно знаком, так что знаю, о чём пишу.

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

Стиль добавил, счетчик убрал.

С вики ругаться нет смысла, если по каким-то причинам не поймут объяснения - жаль, но как-нибудь обойдемся.

Хорошо, пусть будет перенаправление, по мере вноса более серьёзных изменений можно будет сделать там тестовый полигон, а окончательные версии размещать здесь.

Взял недавно в руки свой МК-61 и обратил внимание на то, что кнопка К на нём синяя, в то время как на большинстве изображений в Интернете она ярко голубая. Интересно, откуда такое расхождение? Предлагаю для эмулятора промежуточный вариант #5BC8EC (строка 53).

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

Русский wrote:
Взял недавно в руки свой МК-61 и обратил внимание на то, что кнопка К на нём синяя, в то время как на большинстве изображений в Интернете она ярко голубая. Интересно, откуда такое расхождение?

Выцвела :-) Шучу, конечно. А если серьёзно, то и на моём калькуляторе есть небольшие расхождения в размере шрифтов и прорисовке. Кстати, внимательно сравните как подписаны клавиши на фото МК-54, МК-61 и МК-52, и сразу поймёте о чём речь (в качестве примера: х->П и X->П).
Если есть желание найти разные варианты и собрать статистику, можно организовать кампанию "покажи свой ПМК" , чтобы желающие могли прислать фотографии калькуляторов.

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

строки 769-770:
<td><span class="жёл_т">L0</span><br /><button class="верхняя_кнопка" onClick="Нажатие_кнопки(8,9);">П→x</button></td>
<td><span class="жёл_т">L1</span><br /><button class="верхняя_кнопка" onClick="Нажатие_кнопки(6,9);">x→П</button></td>

строка 53:
background: #5BC8EC;

Внес изменения. Только оба моих "нафигатора" по-прежнему показывают большие буквы "Х" на кнопках х-П и П-х.

Спасибо. У меня показываются маленькие иксы, как положено (для МК-54, для остальных - большие). Видимо, у Вас просто страница в кэше обозревателя не обновилась.

Кстати, что случилось с любителями китайских микросхем? Что-то давно их не видно.

Любителей китайских микросхем в новом пользовательском соглашении вежливо попросили соблюдать его или пройти на выход.

Очередное обновление к годовщине снятия блокады Ленинграда: добавил мнемоники в соответствии с кодировкой Юникод и возможность вводить код программы без перезапуска калькулятора. Изменений много, потому разместил на старом сайте, предлагаю перенести.

Спасибо, разместил. Наверное, имеет смысл на страничке показывать номер текущей версии, чтобы не запутаться.

P.S. Моя бабушка-блокадница еще жива в свои 92, накануне поздравлял. Правда, их с прабабкой в середине 1942 выслали в 48 часов из Ленинграда в сибирскую глушь. Такая вот "судьба народа", у всех разная.

Хорошая идея, для опознания версии написал дату её выпуска в справочном окошке.

P. S. Бабушке Вашей здоровья и долгих лет жизни! Страшно представить, что пришлось пережить нашему народу в те годы. Каждый человек, перенёсший эти испытания и ставший тем самым опорой страны, тем самым хребтом, который враг так и не сумел сломать, - герой русской нации. На таких людях испокон веков держалась Россия, независимо от политического режима и социально-экономического уклада в стране.

Ко дню памяти преподобного Сергия Радонежского в год 700-летия со дня его рождения обновил эмулятор, исправив несколько ошибок, немного оптимизировав, добавив несколько мнемоник команд и т. п.

В качестве дальнейшего развития предполагаю сделать страницу демонстрации работы внутренностей процессора ИК13, обсуждавшееся выше подобие МК-52, более подробную обработку текстовых команд и многое другое. К сожалению, свободного времени крайне мало, так что серьёзно заняться этим вопросом пока не получается.

Спасибо, обновил версию на сайте.

В версии от 30.10.2014 подправил вывод команд К-, Кх, К:, а также вывод адресов "An" вместо "-n". Если нужен доступ к SVN - пишите в контакты или просто берите файл по ссылке с главной страницы, чтобы синхронизировать версии.

Не совсем понял Вашу логику назначения групп команд и номеров имён с префиксами. Про "A" вопрос спорный, впрочем, нехай будет так. Немного поисправлял всякой мелочи и выложил у себя.

Нашёл в Интернете крайне занятную, на мой взгляд, ссылку: http://gtello.pagesperso-orange.fr/elektronika_e.htm . Некий француз приобрёл МК-61 и написал под него компилятор "высокоуровневого" языка. Помню, ещё в старых журналах о такой штуке писалось, и тоже на Бэйсике делали, но этот прецедент особенно примечателен. Интересно было бы такую штуку к нашему эмулятору прикрутить.

Кстати, довелось на досуге узреть его под браузером Андроида. Лучше б я этого не видел: перекосоёбило всё вдоль и поперёк, особенно Феликс; в той же мобильной Опере лучше выглядело. Даже не знаю уже, как лучше выравнивать, да и нужно ли...

В НиЖ №6 1990 писали о подобном кросс-трансляторе. Спасибо за ссылку, написал товарищу письмо, может ответит, если тема его еще интересует.

P.S. Ответил. К сожалению, по-русски он не говорит, т.е. непосредственно участвовать в нашем сообществе не сможет. Если есть нужда адаптировать MK-compiler, то он может это сделать. По специальности - чистый программист, с микроэлектроникой не связан. У него также есть МК-161, с которым большие трудности из-за русскоязычного интерфейса, но большая часть "декодирована".

Да как же он его адаптирует, ежели по-русски не понимает? Переписать на JS немудрено, но нужно развивать компилятор, в частности избавиться от бесскобочной нотации (в перспективе), от беспробельных конструкций, типа "IF(x=0)THEN", да и вообще от наследия Бэйсика и Паскаля, русифицировать сам язык и выходной текст (крайне нелепо выглядит ЯМК-код в виде "STO 0 RCL 0 STOP GOTO"). Вот помочь ему в этом было бы неплохо.

Автоматический перевод текста и знание матчасти первоисточников, согласно которым мнемоники БП или ИП были взяты из GTO и RCL, а не наоборот. Поэтому помощь такого рода западным товарищам вряд ли нужна :) А вот перевести кросс-компилятор на русский язык с нашей помощью товарищ в принципе готов.

Обновил эмулятор: исправил некоторые ошибки, добавил возможность вывода кода в "простом" формате, обращения к нужному калькулятору по ссылке.

Загрузил экспериментальный вариант скрипта, показывающего пошаговое изменение данных в ИК1302: http://mk-61.moy.su/potroha.html . Версия совсем сырая (в частности, действие по микрокоманде расписано очень скудно), но всё ж может быть интересно.

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

Рекомендую иногда всё ж обновлять код на сайте, ибо я периодически исправляю разные ошибки, например вчера заметил, что код программы не читался в одном из трёх состояний ИР2; размеры Феликса зафиксировал в точках, поскольку в разных обозревателях по-разному происходило выравнивание, и т. д.

Как раз вчера планировал обновить версию эмулятора, что сегодня и сделал. Спасибо за поддержку.

В порядке эксперимента добавил для МК-61 шкуру из картинок.

Всех с Днём Русской Нации!

Кто-то уже успел оценить версию с картинкой? Интересует, насколько приемлемо отображается в разных обозревателях и соответствует реальному виду калькулятора.

Ещё задался вопросом: почему Феликс Лазарев при восстановлении микрокода решил упустить из вида такую штуку, например, как видеодрайвер? Интересно было бы эмулировать и такие небольшие аспекты работы микроЭВМ, которые, казалось бы, логичнее упустить.