You are here
Счастливые билеты на MK61S
пн, 05/10/2020 - 22:37 - Vitasam
Версия 0.3.5 MK61S работает. "Короткие" счастливые билеты:
00 01 02 03 04 05 06 07 08 09 00 ИП8 П0 ИП0 ИП1 + ИП2 + ИП3 - ИП4 10 - ИП5 - Fx=0 19 ИП7 1 + П7 FL0 20 03 С/П
отработали за 15 секунд (прошивка с оптимизацией компиляции по размеру: -Os).
Оригинальный МК61 работает около 40 секунд, т.е. MK61S быстрее оригинала примерно в 2.6 раза. Как-то негусто.
Попробую с флагом оптимизации -O2.
Forums:
Нормально
Можно даже встроить замедление, для аутентичной скорости. В DM41X такой режим slow есть.
Нормального мало
Нормального мало, надежда была хотя бы раз в 10 быстрее. Смысла в таком эмуляторе
Смысл
На вскидку:
1. Удобное хранение программ и связь с компьютером.
2. Декомпилятор, вставка и удаление команд, ввод шестнадцатеричных КОПов.
3. Антитьма и антипустышка для еггогологии. (Кнопка для приведения зависшего ПМК в чувство.)
4. Возможность просматривать/редактировать кольцо (если будет реализована), дешифровывать/генерировать «сверхчисла» и узнать чуть больше о ПМК.
5. Шестнадцатый регистр и 112 шагов, если добавить ещё одну страницу в кольцо.
6. Хоть в 2-3 раза, но быстрее.
7. Советские ПМК выходят из строя, а МК-161 позволить себе иметь может не каждый.
8. В отличии от ЭКВМ, полная совместимость.
9. Долгожданный проект. Его всё равно кому-то придётся делать, можно сделать раньше и побыстрее развить сцену ПМК.
10. На такой ПМК есть спрос.
11. Опыт его разработки и выпуска пригодится при создании прекрасного ПМК Будущего.
12. Просмотр и очистка стека возвратов.
Смысл и список
По поводу смысла - в целом да, смысла в такой цифровой ожившей копии больше, чем в симуляторах типа DM42 и МК161.
По поводу списка - 1), 2) 4), 5) еще сильно далеки от реализации.
По поводу быстродействия - глядя на текущий код эмулятора, есть подозрение, что его можно чуть чуть ускорить.
Надо "короткие" счастливые билеты захардкодить, чтобы по нажатию клавиши грузились из Си-шной структуры. Удобно для оптимизации быстродействия, чем руками набивать каждый раз
Тесты
googletest, который у меня основной, видимо, будет тяжеловат, а вот Catch должен подойти, хотя он с IDE не интегрируется.
Оптимизация
Виталий, ты не посмотрел дискуссию с Алексеем по ссылке выше? Там ровно те же проблемы были, решались выкидыванием "лишнего" и вводом предвычисленных таблиц. Исходники Алексей влил на сурсфордж.
Ага, общаемся с ним
Да, мы с Алексеем общаемся уже на эту тему. Его исходники я в Гитлаб тоже залил.
У него на msp430 "короткие" билеты дали 17 секунд, почти сравнимо с более быстрым stm32. Надо его оптимизацию сюда повносить.
А то такие циклы на каждый тик выглядят грустно:
Именно
Именно так, по 560 циклов на выполнение одного такта эмулятора - это тихий ужас. И есть подозрение, что проблема не в эмуляторе, а в прошивке и архитектуре МК61.
Проблема
Проблема в том, что никто ещё не сел за стол и не расписал алгоритмически ни одну из 256 команд. И даже ни одна из 128 синхрокоманд не записана в виде алгоритма, насколько я помню.
Уже 8 лет прошло, как опубликован микрокод. Но на разных языках (Си, C++, JavaScript) всё до сих пор эмулируется потактово, на уровне 68 микрокоманд. Прогресс только в мегагерцах у зарубежных процессоров, на которых идёт эмуляция.
Оптимизированный код из mk61msp
Код из mk61msp портировался. Новый результат "коротких" билетов с флагом -O2 - 8.5 секунд.
Итого: в 4.7 раза быстрее оригинала
И еще splash-screen:

Заставка
Заставка очень к месту, но мне кажется, что каноичнее имитировать рубленый шрифт (ариал) МК 61 :) Как на оригинале
Шрифт заставки
Шрифт заставки сейчас мне тоже не нравится, но тут проблема: количество уникальных глифов, из которых рисуется жирный шрифт, может быть не больше 8. Поэтому приветствуются варианты дизайнов, если получится что-то более лучшее :)
Флаги оптимизации
а лучше
-О3 на билетах даёт ~40% прирост скорости по сравнению с -О2.
-Оs так и не нашёл, что означает.
Сайт
Флаги
-Оs вроде дает самый маленький бинарник.
Флаги да, это потом тоже в планах, но пока надо из кода выжать все что можно
-pipe
А для каких stm32 это опция будет работать? Я правильно понимаю что -pipe оптимизация по конвейеру stm32? Действительно у stm32 есть зависимость от порядка следования команд?
Флаг -pipe
Я так понял флаг -pipe просто ускоряет компиляцию.
Сайт
Флаги O2 и O3
Проверил сейчас последний код из Гитлаба, размеры бинарника при флагах O2 и O3:
При этом на быстродействии в "коротких" счастливых билетах почти не сказывается.
Проверка скорости
Добавил два UART принта - один, когда нажата клавиша C/П, а второй - когда режим работы по программе заканчивается (код в Гитлабе).
Терминал в Arduino IDE умеет подставлять штампы времени, что есть удобно для измерений.
Ниже размер бинарника прошивки при флагах -Os, -O2, -O3 и время работы "коротких" Счастливых билетов, соответственно. Измерения делал два раза - результат стабильный:
-Os
mk61s_app.bin: 23788 bytes
Total: 8.4 sec
Total: 8.4 sec
-O2
mk61s_app.bin: 24736 bytes
Total: 8.4 sec
Total: 8.4 sec
-O3
mk61s_app.bin: 41564 bytes
Total: 8.1 sec
Total: 8.1 sec
Итого:
Прошивка -03 больше прошивки -Os в 1.75 раз, но при этом быстрее всего в 1.04 раза. И, соответственно, быстрее оригинала в 4.9 раза.