Часть 2: Эмулятор СМ-1800
В этом посте:
- скачать эмулятор СМ-1800
- список команд для программы-монитора
- как пользоваться пультом ПКУ
- экранная клавиатура (там много кнопок, но они используются не часто)
Эмулятор СМ-1800
Для того, чтобы работать с миникомпьютером, нужно либо иметь к нему физический доступ, либо использовать программу, которая реализует его поведение на обычном компьютере – эмулятор.
Поскольку настоящие СМ-1800 сегодня не производятся, а выжившие экземпляры очень редки, вместо этого лучше использовать эмулятор.
Используемый в этой серии статей эмулятор можно скачать по этой ссылке. Эта программа © 2002-2005 Смирнов Сергей Андреевич, © 2002-2005 Кафедра САПРиУ, СПбГТИ(ТУ). К сожалению для пользователей Linux и Mac OS, она доступна только для ОС Windows.
Описание программы-эмулятора (из файлов помощи)
Немного истории...
В последнее время развитие вычислительной техники происходит с невероятными темпами.
В связи с тем, что вычислительные машины, выпущенные ранее 1980 года, морально и физически устарели, возникла необходимость перехода на современные ПК. При этом нельзя недооценивать важность учебных курсов по изучению архитектуры и принципов функционирования вычислительной техники. Используя только современную технику, невозможно охватить все аспекты функционирования вычислительных машин, или посмотреть работу компьютера «изнутри». Эмуляторы призваны решить эту задачу.
Эмулятор — это прикладной программный продукт, позволяющий полностью имитировать на современном персональном компьютере работу другого, более медленного компьютера, или некоторых его отдельных модулей.
Фактически, создание программы-эмулятора представляет собой построение абстрактной машины (или устройства) на базе ресурсов более мощных вычислительных машин, по сравнению с эмулируемой.
Вашему вниманию предлагается программный продукт «Эмулятор СМ-1800», написанный специально для проведения лабораторных работ по курсам «Организация вычислительных систем» и «Технические средства ЭВМ» на кафедре САПРиУ.
"Эмулятор СМ-1800" полностью эмулирует работу микроЭВМ СМ-1800 на персональном компьютере класса IBM PC. Внешний вид программы эмулятора выполнен в стиле оригинальной микроЭВМ СМ-1800; панели эмулятора на экране схожи по внешнему виду с передними панелями соответствующих устройств СМ-1800. Это позволяет перейти от работы на оригинальной СМ-1800 к работе с эмулятором без дополнительного обучения.
Эмулятор предназначен для работы студентов 2-го курса (и старше) специальности 220300 "Системы автоматизированного проектирования".
Эмулятор позволяет выполнять лабораторные работы и решать практические задачи по курсам "Технические средства ЭВМ" и "Организация вычислительных систем".
Цикл работ, необходимых для выполнения на эмуляторе, включает как знакомство с характеристиками и назначением основных аппаратных технических средств вычислительной техники, так и получение навыков использования основных программных средств, а именно:
- Изучение характеристик модуля центрального процессора (МЦП), принципов организации и выполнения процессором машинных команд,
- Назначение и правила работы с пультом контроля и управления (ПКУ),
- Изучение характеристик и режимов работы алфавитно-цифрового видеотерминала (ВТА),
- Изучение принципов организации первого (машинного) уровня интерфейса, обеспечивающего сопряжение ядра вычислительной системы с адаптерами и контроллерами периферийных устройств,
- Изучение принципов построения ассемблерных программ на примере центрального элемента инструментальной операционной системы СМ-1800 - программы "Монитор" ("MONID 1.3"),
- Изучение принципов функционирования многоуровневой системы прерываний, внутреннего таймера, и др.
Так как эмулятор - это всё-таки программная имитация процессов, происходящих в реальной машине СМ-1800, то наибольшую практическую пользу можно извлечь при работе с эмулятором, если иметь возможность также дополнительно работать и на реальной СМ-1800.
Немного об СМ-1800...
Партия микроЭВМ СМ-1800 была приобретена кафедрой САПРиУ в 1970-х годах для выполнения лабораторных работ и проведения инженерных расчётов. Для СМ-1800 было выпущено множество программных пакетов. Туда входили и математические программы, расчётные алгоритмы, различные трансляторы, компиляторы, языки программирования, и др.
На сегодняшний день на кафедре остался один (почти) рабочий экземпляр машины. Именно поэтому возникла необходимость написания Эмулятора СМ-1800 в рамках курсового проекта.
На сегодняшний день на Эмуляторе уже проводятся лабораторные работы для студентов 2-го курса. Также возможно получение задания на курсовой проект, связанный с архитектурой ЭВМ, который будет выполняться с помощью Эмулятора СМ-1800.
Немного о реализации...
Программа написана на языке C++ в среде разработки программ Borland C++Builder 6. Исходный текст программы состоит из 17 модулей (файлы .cpp, .h и .dfm). Каждый модуль выполняет определённую системную функцию или эмулирует одно из внутренних устройств СМ-1800.
Эмулируются все устройства СМ-1800:
- Модуль центрального процессора (МЦП),
- Микропроцессор КР580ИК80А,
- Модуль системного контроля,
- Пульт контроля и управления (ПКУ),
- Модуль связи с пультом контроля и управления,
- Выносной пульт с элементами коммутации и индикации,
- Видеотерминал алфавитно-цифровой (ВТА 2000-30)
- Клавиатура,
- Модуль оперативной памяти 64Кб (МОЗ),
- Модуль теневой памяти 3Кб + системное ПЗУ 2Кб,
- Порты ввода 00h, 01h, и другие,
- Порты вывода 00h, 01h, 03h, и другие,
- Внутрисистемный интерфейс И41,
- Модуль таймера,
- Система обработки приоритетных прерываний,
Все устройства эмулируются на аппаратном уровне. Точность эмуляции центрального процессора КР580ИК80А - 1/2 машинного цикла.
Немного об архитектуре СМ-1800...
Центральный процессор и шины СМ-1800 работают на частоте 2 МГц. ЦП имеет 8 внутренних 8-битных регистров, понимает около 250 различных команд, может адресовать 65536 байт оперативной памяти и 256 портов ввода-вывода, имеет 8-уровневую систему приоритетных прерываний.
К внешней шине подключены устройства: дисковод (8 дюймов, ёмкость дискеты 160 Кб :), печатающее устройство (на бесконечной бумаге), и другие.
Вся информация выводится на видеотерминал ВТА в текстовом виде (чёрно-зелёный шрифт, 127 знаков, размер зкрана 80х24 символа). Терминал "общается" с системой через интерфейс И41 (7-битный).
Основной орган управления - стандартная клавиатура СМ-1800 - имеет несколько режимов работы, поддерживает 2 кодировки (JCUKEN/ЙЦУКЕН).
Еще один орган управления - это выносной пульт ПКУ с элементами коммутации и индикации. Он позволяет выполнять ЛЮБЫЕ операции с памятью, портами ввода-вывода, позволяет управлять работой центрального процессора (останавливать, трассировать шины адреса и данных, выполнять машинные инструкции с остановами между циклами ЦП, и т.д.).
Все остальные модули скрыты внутри системного блока СМ-1800 и доступны программно, а именно:
- Модуль программируемого таймера (минимальный фиксируемый интервал - 1 МГц)
- Модуль системного контроля,
- Модуль оперативной памяти 64Кб (МОЗ),
- Модуль теневой оперативной памяти 3Кб + системное ПЗУ 2Кб,
- Порты ввода 00h, 01h, и другие,
- Порты вывода 00h, 01h, 03h, и другие,
- Система обработки приоритетных прерываний,
В ПЗУ СМ-1800 зашита операционная система СПО МОНИТОР 1.3 (MONID 1.3). Именно она получает управление после запуска СМ-1800.
Интерфейс программы
Чтобы запустить программу, нужно распаковать архив на диск и запустить CM1800.exe.
При запуске открывается вот такое окно:

Самое большое окно с текстом MONID 1.3 – это текстовый вывод компьютера, который соответствует ЭЛТ-монитору на реальной машине.
Под этим окном есть экранная клавиатура, которая позволяет вводить текст в компьютер.
Использовать ее не обязательно, потому что ввод с настоящей клавиатуры также передается в эмулятор.
Справа от монитора находится окно пульта контроля и управления, или ПКУ. Он позволяет просмотреть состояние процессора, останавливать и продолжать работу, читать и записывать значения в память и ставить одну точку останова.
Сверху окна находится меню. В нем есть пункты:
- Файл: позволяет сохранить всю оперативную память эмулятора в файл, или загрузить такой файл в эмулятор.
- Эмулятор: позволяет перезапустить эмулятор, сбросить состояние отдельных компонентов, а также останавливать и продолжать работу и регулировать скорость выполнения.
- Показать: открывает или закрывает отдельные окна в эмуляторе (дисплей, ПКУ и клавиатуру), дополнительные окна информации (состояние микропроцессора и дамп памяти), строку состояния (“Режим работы”).
- Конфигурация: изменяет настройки отображения эмулятора
Программа-монитор
Когда эмулятор запускается или перезапускается, он выполняет программу-монитор. Эта программа принимает команды, которые имеют очень простую форму: выбранная команда обозначается одной буквой, а параметры пишутся сразу после этой буквы в определенном порядке. Если в любой момент вводится буква, которая не ожиданна, то программа-монитор выдает ошибку и начинает заново – после этого нужно писать команду заново.
Если команда принимает адрес, то он должен быть записан в виде 4 шестнадцатиричных цифр, например, DF50.
Если команда принимает значение, то это один байт в виде 2 шестнадцатиричных цифр, например, FF.
Доступные команды:
G(от goto) – принимает адрес и начинает выполнять код по этому адресу.-
D(от dump) – принимает два адреса и выводит значения памяти между ними.
S(от set) – принимает адрес. После этого выводит значение по этому адресу и ожидает ввода значения. Если введено значение, оно заменяет старое значение, и продолжает с следующего адреса. Если нажат пробел, значение не меняется и переходит к следующему адресу. Если нажата любая другая клавиша, запись останавливается и на новой строке выводится финальный адрес и значение по нему.

F(от fill) – принимает два адреса и значение. Записывает в каждый адрес между первым и вторым включительно указанное значение.

M(от move) – принимает адрес начала, адрес конца и адрес назначения. Копирует отрезок памяти от первого адреса до второго включительно в память по указанному адресу.

C(от compare) – принимает адрес начала, адрес конца и адрес назначения. Сравнивает отрезок памяти от первого адреса до второго включительно с памятью по указанному адресу, и для каждого найденного расхождения выводит строчку, описывающую разницу.

X– принимает одну букву изABCDEFHLX. Если принята букваX, выводит текущее состояние регистров процессора. Если принята одна из остальных букв, принимает значение и присваивает его соответствующему регистру (TODO: точно не уверен, что происходит именно это)
Для всех букв, которые не являются командами, программа-монитор выводит ошибку. Для следующих букв этого не происходит, поэтому это также команды, но я не знаю что они делают: T, I, L.
Пульт ПКУ
Справа от основного окна находится пульт ПКУ. Он содержит ряд индикаторов, которые показывают текущее состояние микропроцессора – например, в данный момент происходит чтение или запись в память, ввод или вывод с внешних устройств и т.д. Здесь же есть индикаторы того, какой адрес памяти сейчас затрагивается, и какое значение находится в этом адресе.
Пульт ПКУ можно использовать для того, чтобы вручную изменять состояние компьютера. Это может быть полезно для отладки программ. Однако лично для моего понимания это довольно сложно, и мне часто проще изменять программу, добавляя команды диагностического вывода.
На пульте есть три типа кнопок: кнопки-переключатели для битов, кнопки-переключатели для режимов и кнопки для однократного нажатия. Чтобы различать между ними, можно щелкнуть правой кнопкой мыши на пустом пространстве в окне и выбрать “Циферные переключатели”. Тогда это окно выглядит так:

Переключатели под областью “данные” вместе представляют собой один байт, который я буду здесь называть d.
Переключатели под областью “адрес” вместе представляют собой два байта, которые я назову h и l.
Кнопки делают следующее:
- “сброс” – сбрасывает состояние процессора в начальное; перезапускает компьютер, не меняя память.
- “тест” – заставляет процессор перестать выполнять текущий код и вместо этого запускает код по адресу
0x1000– там располагается программа для проверки чексуммы ПЗУ. - “стоп” – переключает процессор в режим ожидания (отправляет сигнал
WAIT). Процессор сообщает об успешном входе в этот режим индикатором “ож”. В этом режиме пульт может использоваться для чтения и записи в память вручную. - “пуск” – если процессор остановлен (например, сигналом “стоп” или точкой останова), продолжает его выполнение. Если при этом включен сигнал “стоп”, то процессор выполнит один шаг и опять остановится.
- “ком с пульта” – воспринимает байты
d,lиh, в этом порядке, как инструкцию для процессора. На следующем цикле процессор выполнит эту инструкцию. - “прер” – переключатель, не знаю что делает.
- “ост по адр” – переключатель. Если он нажат, то, прежде чем процессор выполнит инструкцию по адресу
hl, он остановится (иными словами, включает точку останова по адресу). Когда он остановится, он перейдет в режим ожидания, и выполнение можно продолжить, нажав кнопку “пуск”.
Область “Прямой доступ” позволяет менять состояние памяти. В ней есть следующие кнопки:
- “вп” – выполнить действие, заданное остальными кнопками.
- “зх” – переключатель, не знаю что делает. Должен быть нажат или в состоянии 1, чтобы работать с памятью.
- “зу/увв” – переключатель, не знаю что делает. Должен быть нажат или в состоянии “увв”, чтобы работать с памятью.
- “чт/зап” – переключатель, указывающий, какое действие следует выполнить. Если он в состоянии “чт”, то при выполнении команды пульта лампочки в области “данные” покажут значение в
hl. Если он в состоянии “зап”, то при выполнении команды пульта в адрес поhlзапишетсяd, и затем лампочки над областью “данные” покажут значениеd. - “авт/одн” – если переключатель в состоянии “авт”, то, когда происходит чтение или запись, сначала процессору посылается сигнал
BUSRQ, который просит процессор временно отпустить шину данных и адреса. Когда процессор делает это, включается сигналBUSAK, который отображается на лампочке “зан”. Если переключатель в состоянии “одн”, то этого не происходит.
Клавиатура
У эмулятора есть экранная клавиатура. На ней есть обычные клавиши (но они отличаются от стандартной QWERTY-раскладки, и английские символы вместо этого используют необычную JCUKEN-раскладку). Помимо них, есть набор управляющих клавиш, значение большинства которых мне неизвестно.

Пользоваться экранной клавиатурой не обязательно – если на вашем компьютере есть русская и английская раскладка, то можно использовать настоящую клавиатуру для ввода в эмулятор.
В этом посте мы рассмотрели основные элементы эмулятора СМ-1800. В следующем посте мы начнем писать программы, которые можно будет запускать на эмуляторе.
Если вам помогла эта статья, вы можете поддержать автора: