Эмуляция МК-61 на МК-161

Сергей, а кто сделал и отлаживал эмулятор МК61? Напрашивается написание точного МК-61 для МК-161, благо клавиатура там практически родная, а входные языки очень похожи. Возможность запускать все программы для МК-61 (или даже МК-61 и Б3-34) довольно привлекательна.

Какие ресурсы требуются такому эмулятору?

UPDATE. Из дискуссии в комментариях. По ресурсам памяти на Каллисто проект влезет, но с большим трудом. Опираясь на анонимное сообщение, даже написанный целиком на ЯМК эмулятор МК-61 потребует серьёзной оптимизации по скорости.

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

«В память МК161 он должен влезть.»

Хотелось бы заранее оценить объём работ. На МК-161 эмулятор можно реализовать поверх Каллисто или напрямую на ЯМК. На Каллисто это можно сделать куда быстрее, но работать такой эмулятор будет в десятки раз медленней — да и памяти под таблицы и код доступно не так много, как для варианта на ЯМК.

«Есть ли в этом смысл, если совместимость с большинством программ и так поддерживается - не знаю.»

Многие программы приходится переделывать, исследования «Электронного океана» (что само по себе — захватывающая электронная игра) тоже до написания эмулятора не повторить. Возможность 100% совместимости это серьёзный плюс.

Код там несложный, в 10К шагов точно влезет. Скорее всего в несколько сотен. Основная часть - данные, схема переходов, микропрограммы.

См. исходник mk61emu.c

IK1302
microinstructions: 68 4-байтных констант
instructions: 256 4-байтных констант
microprograms: 1152 1-байтных константы

IK1303
microinstructions: 68 4-байтных констант
instructions: 256 4-байтных констант
microprograms: 1152 1-байтных константы

IK1306
microinstructions: 68 4-байтных констант
instructions: 256 4-байтных констант
microprograms: 1152 1-байтных константы

Итого: 3 слепка микросхем по 2448 байта каждая = 7344 байта данных надо где-то уместить.

«3 слепка микросхем по 2448 байта каждая = 7344 байта данных надо где-то уместить.»

Спасибо, Сергей.

На Каллисто всё должно уместиться в 4К двоичной памяти. Максимум, что можно сделать — добавить 3К области текста.

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

В МК-161 область байтовых данных + текст занимает 7168 байт. В ней можно хранить состояние микросхем (чтобы было удобней сохранять/загружать программы для ПМК), но часть слепков придётся разместить в памяти программ.

Скорость исполнения программы будет крайне низкая. Я для интереса откомпилировал на AVR версию Феликса Лазарева, и один цикл исполняется за восемдесят миллионов тактов (четыре секунды на максимальной тактовой частоте процессора).

Ох, как медленно, это же раз в 10 хуже, чем на оригинальном МК61!

А вы не пробовали скомпилировать и запустить нашу версию? Она как раз в стадии начала перевода под MSP-EXP432P401R. Если захотите присоединиться к этому проекту (там еще Рапира на калькуляторе запланирована), просьба создать профиль на нашем сайте.

Тем более надо делать на ЯМК. Каллисто подходит лишь для тех проектов, где можно жертвовать скоростью.

Впрочем, 32-битные инструкции и микроинструкции можно вынести в десятичные регистры. Займёт (68+256)×3 = 972 регистров. В Каллисто свободно 980 регистров, можно легко освободить ещё четыре. Хотя надо учитывать, что в этих же регистрах также размещается стек данных.

Все микропрограммы 1152×3=3456 в области текста (3072 байта) не поместятся, но её использование может существенно разгрузить область двоичной памяти — так, что там поместится код эмулятора МК-61.