Вход для пользователей

You are here

Счастливые билеты на MK61S

Версия 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 есть.

Изображение пользователя Vitasam.

Нормального мало, надежда была хотя бы раз в 10 быстрее. Смысла в таком эмуляторе

На вскидку:
1. Удобное хранение программ и связь с компьютером.
2. Декомпилятор, вставка и удаление команд, ввод шестнадцатеричных КОПов.
3. Антитьма и антипустышка для еггогологии. (Кнопка для приведения зависшего ПМК в чувство.)
4. Возможность просматривать/редактировать кольцо (если будет реализована), дешифровывать/генерировать «сверхчисла» и узнать чуть больше о ПМК.
5. Шестнадцатый регистр и 112 шагов, если добавить ещё одну страницу в кольцо.
6. Хоть в 2-3 раза, но быстрее.
7. Советские ПМК выходят из строя, а МК-161 позволить себе иметь может не каждый.
8. В отличии от ЭКВМ, полная совместимость.
9. Долгожданный проект. Его всё равно кому-то придётся делать, можно сделать раньше и побыстрее развить сцену ПМК.
10. На такой ПМК есть спрос.
11. Опыт его разработки и выпуска пригодится при создании прекрасного ПМК Будущего.
12. Просмотр и очистка стека возвратов.

Изображение пользователя Vitasam.

По поводу смысла - в целом да, смысла в такой цифровой ожившей копии больше, чем в симуляторах типа DM42 и МК161.

По поводу списка - 1), 2) 4), 5) еще сильно далеки от реализации.

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

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

Изображение пользователя st.

googletest, который у меня основной, видимо, будет тяжеловат, а вот Catch должен подойти, хотя он с IDE не интегрируется.

Изображение пользователя st.

Виталий, ты не посмотрел дискуссию с Алексеем по ссылке выше? Там ровно те же проблемы были, решались выкидыванием "лишнего" и вводом предвычисленных таблиц. Исходники Алексей влил на сурсфордж.

Изображение пользователя Vitasam.

Да, мы с Алексеем общаемся уже на эту тему. Его исходники я в Гитлаб тоже залил.

У него на msp430 "короткие" билеты дали 17 секунд, почти сравнимо с более быстрым stm32. Надо его оптимизацию сюда повносить.

А то такие циклы на каждый тик выглядят грустно:

    for (int count = 1; count <= 560; count++)
    {
        for (i = 0; i < 42; i++)
        {
            Tick();
...
Изображение пользователя st.

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

Проблема в том, что никто ещё не сел за стол и не расписал алгоритмически ни одну из 256 команд. И даже ни одна из 128 синхрокоманд не записана в виде алгоритма, насколько я помню.

Уже 8 лет прошло, как опубликован микрокод. Но на разных языках (Си, C++, JavaScript) всё до сих пор эмулируется потактово, на уровне 68 микрокоманд. Прогресс только в мегагерцах у зарубежных процессоров, на которых идёт эмуляция.

Изображение пользователя Vitasam.

Код из mk61msp портировался. Новый результат "коротких" билетов с флагом -O2 - 8.5 секунд.
Итого: в 4.7 раза быстрее оригинала

И еще splash-screen:
Splash

Изображение пользователя st.

Заставка очень к месту, но мне кажется, что каноичнее имитировать рубленый шрифт (ариал) МК 61 :) Как на оригинале

Изображение пользователя Vitasam.

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

Изображение пользователя Электромонтёр.

-march=cortex-m3 -O2 -pipe

а лучше

-march=cortex-m3 -O3 -pipe

-О3 на билетах даёт ~40% прирост скорости по сравнению с -О2.
-Оs так и не нашёл, что означает.

Сайт

Изображение пользователя Vitasam.

-Оs вроде дает самый маленький бинарник.

Флаги да, это потом тоже в планах, но пока надо из кода выжать все что можно

А для каких stm32 это опция будет работать? Я правильно понимаю что -pipe оптимизация по конвейеру stm32? Действительно у stm32 есть зависимость от порядка следования команд?

Изображение пользователя Электромонтёр.

Я так понял флаг -pipe просто ускоряет компиляцию.

Сайт

Изображение пользователя Vitasam.

-О3 на билетах даёт ~40% прирост скорости по сравнению с -О2.
-Оs так и не нашёл, что означает.

Проверил сейчас последний код из Гитлаба, размеры бинарника при флагах O2 и O3:

-O2 -> mk61s_app.bin: 22148
-O3 -> mk61s_app.bin: 38512

При этом на быстродействии в "коротких" счастливых билетах почти не сказывается.

Изображение пользователя Vitasam.

Добавил два UART принта - один, когда нажата клавиша C/П, а второй - когда режим работы по программе заканчивается (код в Гитлабе).

Терминал в Arduino IDE умеет подставлять штампы времени, что есть удобно для измерений.
Ниже размер бинарника прошивки при флагах -Os, -O2, -O3 и время работы "коротких" Счастливых билетов, соответственно. Измерения делал два раза - результат стабильный:

-Os
mk61s_app.bin: 23788 bytes

23:13:06.809 -> S/P pressed	
23:13:15.169 -> PRG finished

Total: 8.4 sec

23:16:30.712 -> S/P pressed	
23:16:39.106 -> PRG finished	

Total: 8.4 sec

-O2
mk61s_app.bin: 24736 bytes

23:30:24.696 -> S/P pressed	
23:30:33.097 -> PRG finished	

Total: 8.4 sec

23:31:29.104 -> S/P pressed	
23:31:37.513 -> PRG finished	

Total: 8.4 sec

-O3
mk61s_app.bin: 41564 bytes

23:36:36.972 -> S/P pressed	
23:36:45.117 -> PRG finished	

Total: 8.1 sec

23:38:17.120 -> S/P pressed	
23:38:25.267 -> PRG finished	

Total: 8.1 sec

Итого:
Прошивка -03 больше прошивки -Os в 1.75 раз, но при этом быстрее всего в 1.04 раза. И, соответственно, быстрее оригинала в 4.9 раза.