Ускорение работы эмулятора МК-61

Добрый день!

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

Или тот же вопрос к авторам эмулятора - что надо подкрутить в исходнике JavaScript?

Помню, когда-то менял там во всех setInterval 300 на 30, работало явно быстрей. Но особо не тестировал. Возможно и какие-то глюки при этом можно получить, особенно на слабом железе.

Спасибо, попробую. Вообще хотелось бы получить прирост производительности раз в 10000. Я, к сожалению, недостаточно владею JavaScript, чтобы понять, как эмулируются тайминги, как опрашивается клавиатура, насколько глубоко эта эмуляция привязана к исходному железу. Но на моем текущем уровне понимания вроде ничего не должно мешать работать эмулятору со скоростью той машины, где он запускается. Современные калькуляторы занесло совсем не туда со всеми этими языками высокого уровня, которым место на компьютере. Посчитать какие-нибудь аппроксимации или ряды в разы проще на МК-61. Где вообще можно почитать, как этот эмулятор устроен? Зачем там регистры? Вроде взять систему команд процессора, прошивку, настроить тайминги для сохранения винтажного мерцания индикатора - и все! Мне кажется, МК-61 много не хватало в связи с отставанием микроэлектронной технологии от того же, скажем, TI-59, и лучше было бы это устранить хотя бы в программном эмуляторе - например, нельзя было остановить вычисления для показа промежуточного результата, получить ввод от пользователя, хотелось бы усложнить саму концепцию программирования, управления памятью. В таком виде, как он остался в нашей памяти, МК-61 тоже, конечно, кое-что может, но зачем к этому привязываться!? Из него вполне можно сделать спорткар.

Описание эмулятора JS есть тут:
https://habr.com/ru/post/505612/
По-сути, эмулируется железо.

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

Таким образом, "отодрать" опрос клавиатуры, а скорость всего остального увеличить в 10000 раз не получится, так как документация разработчиков была утеряна в трудные годы?

Исходя из:

В режиме исполнения программы реальный калькулятор выполняет около 3–4 шагов пользовательской программы в секунду, примерно на такую же скорость работы настроен и эмулятор. Для прохождения одного шага такт повторяется 23520 раз, выполняя 560 команд, прописанных в коде ПЗУ.
Это обстоятельство и сам довольно нетривиальный алгоритм исполнения кода делают реконструкцию механизмов и алгоритмов работы, запрограммированных в коде микросхем этих калькуляторов, очень и очень затруднительной. Достоверно и детально описать, как это работает, могли лишь причастные к разработке этих устройств; сегодня же любителям советских программируемых калькуляторов, интересующимся этой темой, остаётся лишь тоскливо рассматривать под лупой каждый бит восстановленного кода и пытаться понять, зачем он нужен.

скорей-всего максимум, что можно выжать из текщей версии JS-эмулятора, это увеличить количество вызовов функции Шаг() в секунду по максимуму (уменьшив интервал в setInterval до 1 или 0, например), добавить новый флаг и проверку, чтоб новый Шаг() не запускалась пока не отработает предыдущий Шаг(). Ну и получить постоянную 100% загрузку браузером одного ядра процессора при включении калькулятора.
Ускорение в 10000, конечно же, так не получить. Хотя работать будет на хорошем железе заметно быстрей. Ну и греть процессор в процессе работы будет как скриптовый биткоин-майнер. ;)

А нет ли как-нибудь детально графически разрисованной логики работы хотя бы 145ИК1302, такой, как существует, например, для Z80, с помощью автоматов состояний? Ведь вся эта последовательная шина - это, по сути, параллельная, просто тактируемая из-за имевшихся на тот момент в производстве БМК. Никто не понимает, как это работает, но при эмуляции последовательной шины скорости не добиться. Можно ли все это представить в виде процессора с 4-битной разрядностью, управляемого полупустым ПЗУ с разрядностью 23(память команд)+6(синхропрограммы)+28(синхрокоманды)=57 бит? К такой конструкции остается дописать модуль инжектирования в нее нажатия кнопок, синхронизующийся с тактами ее работы, так что опрос клавиатуры может работать с другой скоростью. Я не зацикливаюсь на JS, просто хотелось бы понять трудоемкость переработки имеющейся схемы эмуляции по сравнению с тем, чтобы написать что-то свое с нуля. Моя задача - получить МК-61-подобную систему программирования,способную работать с высокой скоростью, всякие красоты типа глубин ERROR - для более тонких ценителей, да и вообще, имеет ли это смысл? Может, что-то такое на свете уже есть? Хотелоь бы, чтобы потом это можно было затолкать в смартфон или, лучше, в какой-нибудь быстрый контроллер типа Scenix и носить с собой.

Моя задача - получить МК-61-подобную систему программирования,способную работать с высокой скоростью, всякие красоты типа глубин ERROR - для более тонких ценителей, да и вообще, имеет ли это смысл? Может, что-то такое на свете уже есть? Хотелоь бы, чтобы потом это можно было затолкать в смартфон

Я лично Free42 пользуюсь. Система та же - keystroke RPN. При небольшой сноровке можно программы МК-61 практически по-коммандно вводить. И это симулятор, т.е. никакой эмуляции чужеродных процессоров и микросхем, поэтому летает даже на старых-престарых смартфонах времен 2-ого Андроида.

Посмотрите eMKatic, раз вам не нужна error’ология:
https://sourceforge.net/projects/emkatic/

Именно педантичная эмуляция однобитных ИК13, гоняющих родную прошивку, и съедает быстродействие. Это действительно не практично, хотя имеет своих ценителей.

Премного благодарен!

emKatic - примерно 5 операций в секунду
free42 - примерно 250 000 операций в секунду. То, что надо от калькулятора!

Какой же медленный у вас ПК. На моём компьютере eMKatic компилировал каллистянский редактор за секунды. Это очень быстрый калькулятор. Железный МК-161 ту же работу делал за полчаса, хотя он в сотни раз быстрее МК-61. И это было пару лет назад, на не самом современном компьютере.

Может, вы включили какие-то настройки замедления eMKatic до скорости МК-61? Или спутали его с эмулятором.

Явно спутал. Но по этой ссылке вроде только эмулятор?

На этом сайте как-то прижилась терминология Нокиа из эпохи Series 60. Эмулятор полностью воспроизводит эмулируемое устройство — на уровне имитации родного для него железа, на котором запущена родная прошивка. Именно эмулятор МК-61 работает здесь на веб-страничке, на его быстродействие вы ругались.

По ссылке на sf симулятор — вольная реализация, совместимая с устройством по функциональности. Как раз то, что вы искали. Симуляторы обычно менее совместимы, но они быстрее эмуляторов.

Приветствую всех. Ранее верно написали, что к чему. Эмулятор исполняет код прошивки, считанный с микросхем процессоров ИК13. Мы можем повысить скорость работы эмулятора, но незначительно, ни о каких десятках тысячах раз речи тут не идёт. Возможно, Вам действительно лучше с этой целью использовать симулятор, там вообще вопрос со скоростью стоять не будет. Что касается нашего эмулятора, то задержка в 300 мс здесь не столько для реализации истинной скорости МК-61, сколько для того, чтобы не грузить процессор и не вешать страницу. Нас не особо заботит, каким образом эмулятор будет выполнять код, но пока никакого более оптимального алгоритма, нежели тот, что воспроизводит работу самого процессора ИК13, нету; каким-либо образом оперировать структурными элементами прошивки мы тоже не можем. Поэтому для ускорения можно, допустим, переписать браузерный эмулятор на ассемблер и убрать искусственно установленные задержки, но это того не стоит. Я вот прогнал у себя вычисление Пасхи с задержками и без них, вышло соответственно 14 и 5 секунд, не очень впечатляет. А что касается переработки алгоритма выполнения кода прошивки, то это в принципе возможно, но весьма трудоёмко. Посмотрите код эмулятора, чтобы понять, о чём речь, метод ИК13.Такт(), который вызывается на каждом такте, соответствующем микрокоманде, и крутит кольцо M, исполняя по одной команде каждого процессора за 42 вызова.

Кстати, не пора ли обновить эмулятор на сайте, взяв код с mk-61.moy.su? Я ещё в 2018-м году об этом писал, эмулятор значительно доработан и исправлен с версии 2015-го года, а код переписан на современный ES6.