16.11.2021 13:46, автор DiEitch
Сегодня я представлю не совсем обычную конструкцию. Дело в том, что копаясь в своих старых архивах, я наткнулся на один очень любопытный проект.
==========================================
Аппаратный эмулятор МК90.
Множество устаревших вычислительных систем с успехом моделируются (эмулируются) на современных ПК. Это удобно, так как обеспечивается гибкий доступ к данным и отладочным средствам (в отличие от реальных устройств). На одном единственном ПК (или даже смартфоне) можно опробовать множество различных устаревших вычислительных устройств (как калькуляторов, так и компьютеров), а также легко переносить (если это допускают сами эмуляторы) данные между ними.
Но никакой программный эмулятор не заменит аппаратного, когда можно потрогать и пощупать, убедиться в наличии или отсутствии сигналов, увидеть изображение на реальном дисплее, понажимать клавиши, подключить что-либо к интерфейсам и запустить. А ещё интереснее собрать такой эмулятор самому и убедиться, что он работает.
Однажды, когда я впервые узнал про МК90, я захотел его заполучить. Но когда я понял, что это довольно сложно и затратно, я захотел сделать хотя бы его копию. А когда я увидел и запустил "Эмулятор МК90" от Piotr Piatek, эта идея засела во мне прочно и основательно. Так как в это время я работал с ATMEGA-ми, то и решил всё это сделать на ядре AVR.
После некоторых усилий я запустил эмулятор на ATMEGA64. Но к своему стыду осознал, что изначально не совсем правильно рассчитал ресурсы (во-первых, не хватило оперативки и пришлось лепить внешний контроллер, а во-вторых, мне просто не удалось добиться нужной скорости эмуляции – мой МК90 жутко тормозил).
Когда мой ум основательно протрезвел (от AVR), я решил всё-таки не бросать проект (хотя и времени с момента фиаско прошло значительно), а перенести его на ядро Cortex-M3.
В качестве «жертвы» избрал китайского клона (STM32 ARMCortex-M3 Leaflabs Кленовый лист Мини-Модуль для Arduino), на котором установлен контроллер STM32F103C8 (ARMCortex-M3 72 МГц, 64/128 КБ FLASH, 20 КБ SRAM и встроенные RTC). На тот момент этого показалось вполне достаточно для реализации функционала МК90. Кроме того, если бы я вдруг запланировал какие-либо расширения проекта (например, синхронизация по USB с ПК), то мог бы выбрать в дальнейшем просто более мощный чип из этой же линейки.
Итак, я заказал модуль и ещё программатор-отладчик ST-LINKV2. За всё удовольствие отдал очень скромные деньги (почти во столько же, если не больше, мне обошлась бы плата с AVR и программатор-отладчик типа AVRISP-MKII).
Фото от продавца.
Ещё для реализации эмулятора понадобились дисплей и клавиатура. Дисплей я подобрал 128х64 от Winstar (но можно и любой другой совместимый, даже лучше, если он будет в исполнении COG). А клавиатура – просто матрица Н/Р контактов. Т.к. дисплей и клавиатура для экономии выводов МК используют один порт, потребуются ещё диоды (при замыкании нескольких клавиш, выводы порта могут быть закорочены, что без диодов губительно скажется на работе микроконтроллера). За пару вечеров соорудил (как мне тогда показалось) нечто:
Клавиатура использована от компьютера "Карат" (диоды пока не поставлены для упрощения, так как одновременно две клавиши нажать на этой дубовой клавиатуре практически нереально, и даже одну не очень легко), дисплей WG12864A-YGH-TN, питание от USB, вправо уходят провода на отладчик.
На фото видно, что уже вполне можно программировать на BASIC. С хардварной частью, пожалуй, всё, теперь лучше расскажу немного по коду: за основу был взят открытый код эмулятора Piotr Piatek (его и Ovsienko V.A., который написал эмулятор PDP-11/03, можно по праву считать соавторами данного проекта), благо, я когда-то работал с Delphi и смог вникнуть в суть проекта. Сначала я занялся переводом кода на Си. Потом выявлял ошибки, возникшие при переносе, их было очень много, и работа обещала быть интересной.
Аппаратный лэер я импортировал из проекта в CubeMX с некоторыми правками «под себя». Позже прикрутил и встроенные часы (которые с некоторым приближением пытаются изобразить из себя КА512ВИ1 – их можно проверить в версии BASIC2.0). На очереди последовательный интерфейс (звук и СМП).
Из особенностей проекта – эмулятор содержит сразу 2 версии BASIC (V1.0 и V2.0), любую из которых нужно выбрать до включения. К сожалению, эмулятор пока не умеет воспроизводить звук (что некритично) и работать с СМП (а вот это - плохо).
==========================================