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

, я выкладываю,
собственно, и сам
проект эмуляции 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!