Ну и поскольку "
кормить соловьёв баснями" - не самое благодарное занятие  

 , я выкладываю,
собственно, и сам 
проект эмуляции EDUC-8M в среде моделирования Proteus.
Несколько слов о том, как с 
виртуальной моделью EDUC-8M работать.
По старту симуляции мы видим изображение идентичное следующему рисунку:
 
Поскольку я избегал аналогвых 
RC-цепей, "
Сброс" по старту не срабатывает, и хотя в 
прог-
раммном счетчике PC нулевое значение, в 
регистр адреса MA забрасывает по старту единицу
слева. В этом ничего необычного нет, т.к. в 
реальном EDUC-8 в регистрах и вовсе случайные
значения. 
PC и 
MA можно обнулить, нажав круглый красный "
Reset". Я для этого его и ввел,
поскольку в 
оригинальном EDUC-8 сброс выполнялся выключением питания, а 
старт/рестарт
проекта в 
Proteus - процедура не быстрая.
Регистр-аккумулятор AC содержит по старту значение 
0AAH - 
10101010b - это специально сделано
предустановкой его регистров, поскольку 
сигнатура 0AAH - 
10101010b - удобна для наблюдения
различных операций над 
аккумулятором в процессе тестирования исполнения инструкций.
Состояние 
клавиш ввода значений 7...0 отображается нижними маленькими прямоугольными инди-
каторами (как, впрочем, и остальных клавиш): "
красный" = "
1" клавиша поднята вверх, "
синий"=
"
0" - клавиша отпущена вниз. Но состояние 
клавиш ввода значений 
7...0 дублируется вверху
листа проекта на семисегментных индикаторах 
в коде 7-3-7, в котором принято программировать
реальный 
EDUC-8, значение также дублируется в привычном 
HEX-коде, ибо в нём 
Proteus показы-
вает содержимое своей памяти. 
Код 7-3-7 - похож на октальный - где 
max значение - 
7, просто в
средней позиции у него всего 
2 разряда, отсюда - 
3. Наследство 
PDP-8.
Чтобы 
EDUC-8 начал что-то делать, ему надо ввести программу с передней панели.
Довольной короткий, но эффектный пример ввода с клавиатуры, я специально расположил в нижнем
углу. Нажимаем круглый красный "
Reset", 
PC и 
MA сбрасываются в нулевые значения, и с клавиш
ввода, глядя на 7-сегментные индикаторы, начинаем вводить программу по одному байту, нажимая
после набора на индикаторах каждого числа клавишу "
DEP" - "
депонирование" или 
запись в память
по адресу, указанному в 
программном счетчике PC.
Code: Select all
604
601
501
602
621
504
622
624
500
После каждого нажатия "
DEP" 
PC переписывается в 
MA, а сам 
PC = PC + 1.
По адресу в  
MA записывается байт с 
клавиш 7...0 и модель вновь готова принять следующий код
по следующему адресу.
Если есть необходимость загружать коды не с позиции 
PC = 00H, то значение 
PC можно изменить в
любой момент, набрав нужный адрес на 
клавишах 7...0, и записав это значение в 
PC нажатием клавиши
"
LOAD ADDR". Это и есть её назначение - загрузка в 
программный счетчик PC.
Состояние памяти можно в любой момент проконтролировать с нужного адреса, введя его в 
PC,  и,
далее, последовательно нажимая клавишу "
EXAM", после чего значение из ячейки памяти, указанной
в 
PC, отобразится на "
светодиодном" экране 
EDUC-8 в 
регистре буфера памяти MB.
При этом  сам 
PC = PC + 1 - инкрементируется, и ячейки памяти можно просмотреть одну за одной.
Всего их в этом 
базовом варианте EDUC-8 - 
256 байт.
Поскольку это 
модель Proteus, то состояние памяти можно просмотреть и иначе - нажать паузу
смуляции и в верхнем меню 
Proteus - '
Debug' выбрать 
опциию просмотра содержимого микросхемы
памяти, где все изменения можно увидеть в 
HEX-виде. Памяти там я поставил - 
2Кбайт, но исполь-
зуются только первые 
256 байт. 
Proteus версий 7.хх ещё и подсвечивает изменения в памяти.
 
Ну, процедура набора программы с клавиш может быть интересна пару раз, чтобы почувствовать,
как это раньше было. А потом это начинает утомлять, поэтому я ввел загрузку в 
ОЗУ из 
ПЗУ
кнопкой "
/Load" справа над экземпляром программы.
В 
ПЗУ в данный момент хранится та же самая программа, и чтобы её загрузить, необходимо в 
PC
установить начение 
00H, нажав "
Reset" или введя значение в 
PC посредством клавиши "
LOAD ADDR"
с 
переключателей 7...0.
После этого 
переключатели 7...0 ОБЯЗАТЕЛЬНО УСТАНОВИТЬ В ПОЛОЖЕНИЕ "1" - ВСЕ КРАСНЫЕ ИНДИКАТОРы.
Далее - нажимаем кнопку "
/Load" и начинается процесс загрузки кодов из 
ПЗУ, который, по сути,
256 раз автоматически выполняет набор на клавишах кода и сопровождения его нажатием  "
DEP".
Поэтому 
переключатели 7...0 должны быть в  "
1", т.к. и они, и загрузчик из 
ПЗУ работают об-
щими коллекторами на общую резистивную нагрузку.
Если нет желания смотреть загрузку всех 256 байт, из них у нас пока 
только 9 полезных, то
загрузку из 
ПЗУ можно прервать в любой момент клавишей "
HALT" на передней панели, либо её
дубликатом - кнопкой "
/HLT" справа. Сразу скажу, что кнопка "
/HLT" справа дублирует исполне-
ние инструкции "
HLT" в программе - это программный останов исполнения, как и в 
i8080.
Саму программу можно скомпилировать и загрузить в ПЗУ заранее из 
bin-файла, 
Proteus дает
такую возможнось. Жаль нет возможности загрузить 
содержимое ОЗУ, тогда бы и загрузчик был
бы не нужен, но зато всё очень близко к реальности! 
 
 
Наконец, программа введена. Нажав "
Reset", или введя значение в 
PC = 00H, устанавливаем адрес
начала её исполнения. После чего, наконец-то, можно запустить программу на исполнение клавишей
передней панели "
RUN". Понятно уже, что и остановить исполнение призванна клавиша "
HALT",
расположенная рядом.
По умолчанию после нажатия "
RUN" программа выполняется с максимальной скоростью и непрерывно,
поскольку клавиши "
SINGLE/CONT" и "
SLOW/FAST" - в нижнем положении и индикация их - "
синяя".
Если клавиша  "
SINGLE/CONT" - в верхнем, "
красном" положении, то программа выполняется пошагово:
по одной инструкции на каждое нажатие "
RUN". Все фазы исполнения программы отображает передняя
панель: выбор инструкции "
FETCH", её исполнение - "
EXEC", или же вставка дополнительного цикла
"
DEFER" при косвенной адресации.
Сами команды также отображаются на передней панели: "
AND", "
TAD", "
ISZ, "
DCA", "
JMS", "
JMP",
"
IOT" и "
OPR". Расшифровку группы "
OPR" я вывел справа на маленькие логические индикаторы.
Передняя панель также отражает все пересылки между регистрами 
PC, 
MA, 
MB и 
AC в процессе
исполнения кодов операций (инструкций).
Что делают отдельные инструкции я уже 
подробно описал в этом топике ранее и сам пользовался уже этим удобным документом.
Для компиляции программы из текстового ассемблерного файла можно воспользоваться компилятором,
встроенным в 
эмулятор EDUC-8, обсужавшийся 
в этом топике выше. Он компилирует ассемблерный
файл прямо при загрузке, а результат можно получить в виде файла, сохранив область памяти,
можно все 256 байт - не столь уж и большой объём! Я этим компилятором пользовался и смотрел
его текст в исходниках, они есть 
в том архиве.
Можно попробовать и компилятор 
E8ASY - но я посмотрел, он в режиме командной строки работает,
поэтому пользоваться им не стал, хотя в архиве есть и исходники и примеры программ...
Если подробности исполнения программы даже в пошаговом режиме не ясны, можно включить медленную
скорость исполнения программы клавишей "
SLOW/FAST". Оба генератора вынесены также на основной
лист - справа от 
LEDPANEL. Частота "
SLOW" составляет 
10 Hz, а частота "
FAST" - 
1 KHz. Модель,
как и сам 
EDUC-8, работоспособна на 500 KHz и выше, но при этом индикатор 
LEDPANEL становится
совершенно бессмысленным - мешанина моргающих индкаторов, воспринимаемых беспорядочно, хотя это
на самом деле и не так.
На 
частоте 1 KHz еще видна структура исполнения программы и этой частоты достаточно, чтобы пример
программы работал в реальном времени.
Кликнув по пиктограммам генераторов (треугольнички "
G_Hi" и "
G_Lo"), рабочие частоты режимов
"
FAST" и "
SLOW" можно изменить.
Если надоело моргание всех индикаторов "
как в цирке" - их можно выключить переключателем "
Led
Off" справа.
С этим разобрались, ну а введённая нами и исполняемая непрерывно программа вводит символ из окна
виртуального терминала, который воспринимает нажатие кнопок клавиатуры, если в его окно поместить
курсор, после чего полученный программой символ выводится на 
ЖК символьный дисплей 4 строки по 20
символов. И дисплей и виртуальный терминал работают по протоколу 
RS-232S без инверсии с частотой
передачи 
2400 бод - 8 бит, без контроля четности, 1(2) стоп-бита.
Оригинальный 
дисплей Milford c последовательным интерфейсом не имеет в наборе символов кириллицы,
но 
проблему его руссификации давно разрешили заменой таблицы символов в библиотеке LCDALPHA.DLL.
Обычно её оригинал переименовывают в 
LCDALPHA.BAK и подгружают в папку 
MODELS Proteus 
библиотеку LCDALPHA.DLL с русскими символами (
я её в проекте приложил).
Файлы в 
архиве поекта разложены по тем папкам, в которые их надо поместить в той директории где,
собственно, сам 
Proteus и установлен.
Я выложил 
проект EDUC-8M в базовой версии так, как всё было в оригинале мини-компьютера в 1974 г.
Если кто-либо хочет усовершенствований, то можно 
ввести "нулевую страницу" (Zero Page) как у 
6502,
хотя это у 
6502 ввели 
Zero Page, как у 
PDP-8. Можно также расширить память страничной адресацией.
Но я этого всего делать 
в этом проекте не стал, поскольку у меня несколько другие планы...
И я думаю, если это кому-либо интересно, то небольшие модификации приятнее сделать самому.
Все выложенные мной материалы свободны для некоммерческого использования.
Все замечания вопросы и пожелания, если таковые будут, - направляйте в личку, поскольку я ухожу
в отпуск, и в реале у меня накопилось множество неотложных дел, так что я не планирую заглядывать
сюда часто, но в личку при случае постараюсь ответить...
73!