|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
| | | | Lavr wrote: Сразу скажу, что автор - Jamieson Rowe - вовсю подсматривал в PDP-8, поскольку других примеров перед глазами было немного. И это, безусловно, наложило отпечаток как на схемотехнику, так и на систему команд...
Three augmented input-output transfer (IOT) instructions are provided, each of which may be arranged to specify either an input or output device, and one of two possible devices in each category.
The IOT instructions are
skip on device flag (SKF, SDF), transfer data between device buffer and accumulator (KRS, LDS), and reset device flag (RKF, RDF).
The second and last of these may be combined, for programming economy. | | | | |
Я довольно подробно ознакомился с системой ввода/вывода PDP-8, которая послужила автору EDUC-8 образцом для подражания, и пришел к выводу, что команды IOT реализованы здесь довольно-таки искусственно, в отличие от оригинальной PDP-8. Не всякое устройство способно сообщать флагом о своей готовности, и в авторском наборе УВВ, это, пожалуй, только БИС УАПП. Во всех остальных случаях эти " флаги" реализуются схемотехнически совершенно независимо от работы устройства по принципу " чтобы було" - сам взвел, сам и послушал флаг, иначе просто часть из и без того скромного набора команд IOT работать не будет. Если глянуть на следующую схему, то видно, что часть её, работающая с флагом, с основной схемой вывода вовсе никак не связана! А вообще знакомство с принципами построения PDP-8 заслуги автора EDUC-8 только подчеркивает! PDP-8 стала дешевой и популярной моделью, поскольку разработчики нищебродски сумели снизить число ТТЛ корпусов в ней с ~15000 до 500 с мелочью... Автор EDUC-8 решил задачу на ~100 корпусах, что весьма неплохо, поскольку сам я в своих 4-битниках как раз стараюсь за "магическое" число 100 не вылезти... и пока у меня в этом успеха не наблюдается...
_________________ iLavr
|
27 Sep 2013 04:55 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
| | | | Lavr wrote: Я довольно подробно ознакомился с системой ввода/вывода PDP-8, которая послужила автору EDUC-8 образцом для подражания, и пришел к выводу, что команды IOT реализованы здесь довольно-таки искусственно, в отличие от оригинальной PDP-8. | | | | |
Ну и пока я с системой ввода/вывода PDP-8 разбирался, я потихоньку отрисовал
узел интерфейса логики для EDUC-8.
Посмотреть: EDUC8-IOT_INTERFACE
Основные узлы здесь просматриваются неплохо - это дешифратор УВВ на мелкой логике,
выбирающий одно из 4-х устройств (два на ввод, два на вывод).
Это вентили, пропускающие сигналы управления и данные, и это 4 исполнительных устройства,
которые суть - тоже ключи, которые по выборке дешифратора и логике команды, организуют
направление передачи данных, стробы и состояния признаков (флагов).
На отрисованой схеме не проставлены некоторые номера выводов edge-коннектора, поскольку
просто неразборчиво видны в оригинале.
Ну и поскольку в оригинале нет нумерации элементов, то на схеме они условно пронумерованы
по ГОСТ-у: сверху-вниз, слева-направо.
_________________ iLavr
|
30 Sep 2013 01:15 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я, наконец, добрался до подробного разбора системы команд и примеров программирования.
Это, я вам скажу, что-то!
Если хочешь, чтобы человек возненавидел ассемблер - подсунь ему EDUC-8 в качестве
учебного компьютера!
Теперь я понял, откуда пошли слухи о неимоверной страшности ассемблера - от PDP-8!
В общем, кто хочет развлечь себя экстремальным программированием, при нехватке
привычных команд - EDUC-8 - рекомендую!
Благо и эмулятор есть...
Чтобы вы не подумали, что я вас гнусно пугаю, приведу пример:
- в мнемонике i8080
Как это делается в EDUC-8 ну и в PDP-8:
1. В ячейку памяти с меткой CONST0 предварительно положить 33Н. 2. Очистить аккумулятор АС. 3. Сложить содержимое аккумулятора АС с содержимым ячейки памяти CONST0, результат - в АС.
И при этом следить, чтобы константа и сама эта программа были в одной странице памяти,
размером в параграф (16 байт) для EDUC-8 и 128 байт для PDP-8!
Для последней - легче... константы могут быть в 0-странице, доступной отовсюду.
Так что ассемблер здесь вам не хухры-мухры!
Если всё-же кто-то захочет рискнуть - вот тут есть компилятор с языка ассемблера EDUC-8 --- E8ASY - с примерами программ и исходниками.
_________________ iLavr
|
01 Oct 2013 09:37 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Потихоньку начал... И начать решил с блока клавишных переключателей...
Получилось вот так:
Довольно-таки похоже на оригинал. Ну и я сдвинул группы чутка, чтобы RESET добавить...
Автор его не ввел, хотя цепи RESET-а есть и срабатывают при включении питания.
Предыдущие мои опыты с такими конструкциями показали, что делать клавиатуру вот так:
схемотехнически нагляднее, но очень неудобно при симуляции...
_________________ iLavr
|
07 Oct 2013 08:31 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Теперь виртуальный EDUC-8 обзавелся собственной интерактивной "мордой" на основе активной VSM-модели Proteus.
Пришлось, правда, написать отдельную динамическую библиотеку, обслуживающую интерактивную "морду",
но поскольку я хочу попробовать попрограммировать на этом виртуальном EDUC-8 - затея того стОит...
На оригинал - весьма даже похоже... Как говорится - " близко к тексту"...
----
_________________ iLavr
|
21 Oct 2013 09:30 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Честно говоря, сам по себе этот EDUC-8 работает красиво, но бестолково - сто Ит
коробка, лампочками моргает и ничего не делает...
Читал я, что из " Саратов-2" (aka PDP-8 ) так делали светомузыку и даже заставляли
эти коробки музыкально звучать - гремя (вы не поверите! ) ферритовыми
колечками памяти!!!
Я уже пробовал программировать на эмуляторе EDUC-8, но всё пошло гораздо веселее,
когда я нашел в его коде закомментированные автором эмуляторы устройств ввода- вывода: клавиатуры и принтера " Philips 60SR"!
Так что - вот вам мой первый опыт программирования УВВ в системе команд EDUC-8:
Так сказать, некий "Hello, world!" предпразничной тематики...
Увеличить
_________________ iLavr
|
30 Dec 2013 07:58 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну и поскольку я действительно разбирался весьма подробно, думаю, будет правильным
описание системы команд EDUC-8, так сказать, русским по белому здесь выложить.
Если кого-либо это заинтересует более подробно, то примеры программирования есть в кратком дайджесте по EDUC-8 от sir Steven Pietrobon.
Ну и в моем переводе этого документа можно прочитать о возможностях раширения памяти на
примере контроллера расширенной памяти PDP-8.
В эмулятор я этот механизм приделаю сразу - на 256 байтах ОЗУ не сильно-то разгонишься
программировать!
PS. Мы тут обсуждали, что в нищебродских системах команд основной набор выбирается таким, чтобы на его основе можно было реализовать все недостающие команды. При наличии в этом наборе AND и CMA логическое OR получается довольно- таки несложно программным путём. А вот для XOR - простой реализации програмно особо и не видно...
И зря всё-таки Jim Rowe уволил при разработке EDUC-8 флаг С. В PDP-8 флаг Carry под названием Link всё же присутствовал...
PPS. Посмотрел в сети - у PDP-8 инструкцию XOR действительно реализуют программно и довольно неудобно...
_________________ iLavr
|
02 Jan 2014 12:35 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну теперь уж я точно знаю, куда этот автор подсматривал! Он подсматривал в PDP-8/S ! Была, оказывается, и такая разновидность в семействе PDP-8 для совсем оголтелых нищебродов. У неё было однобитное АЛУ и последовательная (serial) архитектура, PDP-8/S не была шустрой, но была зато недорогой и полностью PDP-8-совместимой. Я, честно говоря, глазам не поверил, хотя и читал при этом документ F-85S_PDP-8S_usersManual.pdf от DEC. УвеличитьНо 1 BIT ADDER - красноречиво говорит сам за себя! А потом я уже и в поиске этот факт стопудово уточнил... Судьба PDP-8/S, как пишут, не сложилась удачно, не смотря на дешивизну. Она получилась СЛИШКОМ медленной. Там где PDP-8/Е использовала 2 такта, PDP-8/S укладывалась в 14. P.S. А автор - Jamieson Rowe - даже и не скрывает, что не то, чтобы подглядывал в PDP-8/S, а просто передирал её один к одному, укорачивая до 8 бит... | | | | Jamieson Rowe wrote: The signals generated directly by the timing circuitry for use throughout the rest of the machine comprise T0-OR-T12 (L), T0.5 (L), T1, T13, T2-9, T14-21, and T22.5. A further signal T23 is also generated, but this is used solely by the major state generator. Note that there are actually two T2-9 signals and two T14-21 signals, with duplicated logic. This is a carryover from the original 32-word memory version of the machine, where the second sets of gating were required to produce T5-9 and T17-21 signals. Rather than redesign the board completely, the gates have simply been swung over to operate in tandem with the original T2-9 and T14-21 logic. | | | | |
| | | | RUS wrote: Эти сигналы, непосредственно сформированные электрической схемой синхронизации для использования для всех остальных цепей машины, включают T0-OR-T12(L), T0.5 (L), T1, T13, T2–9, T14–21 и T22.5. Дальнейший сигнал T23 также формируется, но он используется исключительно генератором основных состояний. Отметим, что в схеме действительно есть два сигнала T2–9 и два сигнала T14–21, с дублирующейся логикой. Это позаимствовано из оригинальной версии машины (PDP-8/S) с памятью в 32 слова, где вторые комплекты вентилей требуется для формирования сигналов T5–9 и T17–21. Чтобы не перерабатывать схему полностью, вентили были просто повторены, чтобы обслуживать сигналы T2–9 и T14–21 в тандеме с основной логикой их формирования. | | | | |
_________________ iLavr
Last edited by Lavr on 29 May 2014 09:40, edited 1 time in total.
|
24 Apr 2014 16:52 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну, наконец-то, проклевав мне изрядно мозг, заработала эта красивая псевдосенсорная клавиатура Протезуса...
Самое неприятное в том, что Протезус позволяет нарисовать модель клавиатуры любой сложности, вот только
кнопки у него - на замыкание и без фиксации... ( или же я чего-то так и не узнал) .
Поэтому переключатели панели EDUC-8 пришлось моделировать из двух кнопок, ну и, соответственно, обслуживать
всё это через RS-триггеры и прочие приблуды.
Так что Keyboard Driver получился весьма немаленький...
Но, мне думается, игра стоила свеч... В процессе отладки драйвера потыкал я в обычные кнопочки Протезуса и пришел
к выводу, что это было бы очень уныло и некомфортно...
Скорости процессора хватает пока с лихвой. Максимальная загрузка 4-6% при старте, пока идет начальная установка
состояний всех элементов и переходные процессы.
В дальнейшей работе - загрузка процессора всего 1%. Так что на остальную схему ресурса хватит... Что значит - чисто
цифровое моделирование!
Ну и последнее... может это кого-либо выручит, поскольку у меня убило более суток времени при совсем готовом проекте.
В ряде случаев внешнюю шину необходимо подписать через опцию "лэйбл" (на рисунке RB[0..27]).
В противном случае - по шине могут не проходить сигналы! Я себе чуть извилины мозга не выпрямил - ну не идут сигналы
сквозь шину - и всё! И не в одном хелпе Протезуса - хелпА на этот повод нет...
Совсем уже нечайно нагуглил на Казусе.ру вот такой рисунок:
Чисто эмпирически промаркировал у себя шину аналогичным образом - RB[0..27] - и вдруг всё заработало как из пушки!!!
_________________ iLavr
|
23 May 2014 19:41 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну и смоделированная авторская схема, на мой взгляд, либо отрисована с ошибками, либо как-то
не так я читаю эти нерусские УГО...
----------------------
Затрудняет также понимание, что автор не пронумеровал хотя-бы выводы одновибраторов.
Ну и, как он сам пишет, что нравится ему отрисовывать схемы, чтобы был понятен активный
входной уровень, отсюда в схемах вот такие интересности:
Но как-бы то ни было, нижний по схеме одновибратор запуститься не должен никогда, поскольку
насмерть закрыт подключением вывода к общему проводу.
Верхний одновибратор тоже не работает так, как объясняется в тексте.
Схема, которая реально работает согласно описанию, на мой взгляд, выглядит следующим образом:
_________________ iLavr
|
24 May 2014 10:33 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я думаю, что 40-ю годовщину создания одной из первых любительских мини-ЭВМ на мелкой логике, разработанной в 1974 год Джимом Роу, в
нашем, 2014 году, мы сможем встретить весьма достойно!
Я практически закончил этот проект в среде Proteus, и он великолепно
заработал! Это базовая версия с 256 байт памяти и с 2 устройствами
ввода-вывода.
Я обозначил его как EDUC-8M, поскольку многое мне пришлось Модернизировать,
поисправлять некоторые явные опечатки в опубликованных схемах, позаменять
детали и элементы, которых нет в среде Proteus, на современные, которые
есть в наличии в библиотеках симулятора.
Местами пришлось обходить глюки самого Proteus с помощью грязных схемотехнических
трюков... Но - тем не менее, это всё заработало, и на скриншоте модель выполняет
следующую коротенькую программу:
это ввод символа с клавиатуры через терминал и вывод на LCD с последовательным
интерфейсом.
Не думаю, что Джим Роу предполагал, что к EDUC-8 прицепят LCD в 2014 году...
Тем более в России...
В общем-то я тщился повторить свой трюк с теннисом и хотел заставить виртуальную
машину поуправлять реальным индикатором в программе какой-либо игрушки.
Но 256 байт памяти меня пока несколько смущают, хотя кардинальных препятствий
я не вижу. Расширение памяти страницами до 4...32 Кбайт я уже предусмотрел.
И прежде чем что-либо из программ написать, я собираюсь доделать в проект
загрузку из ПЗУ по интерфейсу, предусмотренному для перфоленты.
Набирать программу переключателями - конечно же экзотика! Но я её вдоволь
накушался за последний месяц, пока отлаживал эту модель EDUC-8М.
Если разработка вам интересна, то могу со временем выложить проект Proteus-а,
хотя, как я заметил, последний у нас здесь не в почете...
_________________ iLavr
|
17 Jun 2014 18:07 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Но Proteus - Proteus-ом, а схемотехника всё же здесь интересная, и поскольку
интерес к самодельным процессорам имеется, а этот EDUC-8 действительно
весьма прост для повторения, то рабочие схемы симуляции я решил выложить.
Сразу скажу, что интересное в них я для себя почерпнул, и в частности -
это смелое использование АЛУ ( здесь сумматора), в качестве одного из путей
для прохождения сигнала.
Второй момент заключается в том, что построение дешифратора на жесткой
логике, пожалуй, даже более выигрышно в сравнении со схемой на ПЗУ микро-
команд, тем что нет ограничений на количество управляющих выводов, а
нужные сигналы в привязке ко временнОй диаграмме сформировать легко.
Собственно, " пощупать" простой hardwared процессор и была одна из причин,
сподвинувших меня смоделировать этот древний гаджет...
Начнем по порядку...
Схема обслуживания клавиш передней панели.
Увеличить
Так распухла, поскольку захотелось мне красивую клавиатуру, а у Proteus
эти кнопки без фиксации, что и вынудило насовать сюда RS-триггеров, а также
пришлось изменить несколько оригинальную схему, так как всё срабатывает
теперь по отпусканию. Всё-таки это модель и трудно быть уверенным, что
длительности клика достаточно, чтобы за его время сработала потактовая
цепь - есть все же отличия от реального времени. Кто не хочет клавиатурных
красот, всё можно сделать как в оригинале - на переключателях с фиксацией
и без...
Логика тактового генератора.
Увеличить
Ну вот это и было довольно интересно на конкретном примере, хотя в общем
плане я себе это и представлял. Здесь добавил лишний одновибратор, чтобы
RS-триггер не срабатывал практически почти через запрещенное состояние.
В реальности это срабатывает, когда одновременно снимается R и подается S,
а вот Proteus может и в ступор впасть.
Логика дешифратора команд.
Увеличить
Здесь пришлось заменить хитрый сразу-и-регистр-и-дешифратор. В Proteus он
есть для разводки плат, но элекрически не симулируется. Заменил на обычные
регистр и дешифратор, но поскольку дешифратор активный низкими уровнями -
то вентили пришлось заменить на ИЛИ. Ну а в остальном - дешифруются 3 стар-
ших бита на 6 команд, работающих с памятью, плюс 2 группы команд: специальные
и команды ввода-вывода. Эти 2 группы не дешифруются а учитываются побитно.
Отсюда в PDP-8 ну и в EDUC-8 можно выполнить несколько этих команд за такт.
Аккумулятор.
Увеличить
В общем-то это и сразу часть АЛУ без сумматора. Часть функций исполняется здесь
прямо над аккумулятором. И только сумматор вынесен в отдельный блок, поскольку
он в схеме еще и инкрементирует программный счетчик и даже счетчик-ячейку памяти!
Логика последовательного сумматора.
Увеличить
Ну то что однобитный пришлось соорудить из 2-битного я уже писал вот здесь.
Полностью эмулировать сумматор на логике я не стал, опасаясь снижения
скорости симуляции. Но зря, видимо. Т.к. я не использовал " аналоговых"
компонент, симуляция чисто цифровая, и даже на моем дохлом древнем ноуте -
P-II 360 MHz загрузка процессора при симуляции всей схемы - около 47-50%.
Интересно пришлось повозиться с триггером переноса. Оригинального JK у меня
модели не окзалось - сделал из двух D-триггеров. 1-й защелкивает текущий
перенос, а второй уже - выдает перенос С в следующий сдвиг, когда 1-й опять
должен перенос сохранить.
Блок ОЗУ.
Увеличить
Вот тут пришлось повыкаблучиваться, так как оригинальное статическое ОЗУ схемы
уже и в жизни-то трудно найти (именно статическое, динамическое-то есть).
А я рассчитывал на 573РУ10 (хотя у Proteus их тоже нет), но вставил то, что есть,
тут особых требований нет, но растактовку пришлось подправить, т.к. в схеме было,
что когда память выдает, то регистры в схеме работают один по фронту - другой по
спаду, по которому происходит и переключение адресов, а в моей схеме - сдвиг из
или в ОЗУ - по спаду. Пришлось вводить схему формирования короткого импульса -
чтобы разнести по времени мометы записи и сдвига.
Я не применял RC-цепей для чисто цифровой симуляции, так что схема формирования короткого импульса вот такая:
Увеличить
В принципе, лучше было бы ввести повышенную частоту генератора, которая делится
пополам до тактовой частоты. Тогда б такую дичь делать не пришлось. Но это было
уже по пути, схемы плотные и менять уже сделанное мне не захотелось...
Интерфейс ввода-вывода.
Увеличить
Я его практически не менял, только я не захотел чтобы выходной сигнал был инверсным.
И далее оказалось, что так действительно лучше для построения приемника и передатчика
стандарта RS-232.
Приемник и передатчик стандарта RS-232.
Увеличить
Увеличить
В отличие от автора у меня не было его БИС приёмопередатчика UART, да и так вышло
спортивнее - всё на мелкой логике. Ну а о приемнике и передатчике - ничего говорить
не буду, т.к. я тут целый топик с ними тренировался:
И вот их время - пришло!
Загрузчик программы из ПЗУ.
Увеличить
Его не было в оригинальной схеме, и по сути он заменяет устройство ввода с перфоленты.
Причем используется тот же принцип - схема загрузчика как бы "нажимает" на клавиши
передней панели. Весь процесс действует по принципу мультивибратора на триггере:
загрузчик периодически дает внешнюю команду DEP - ЗАПИСЬ, а компьютер окончанием
записи сдвигает счетчик байт и запускает одновибратор, который снова дает внешнюю
команду DEP - ЗАПИСЬ - и так до совпадения адреса с 1111.1111 включительно.
Далее идут схемы сборки блоков:
Основной блок - по сути это весь законченный компьютер без ОЗУ и УВВ.
На нем можно вполне провести большинство тестов, чтобы убедиться, что
ошибок нет. Аргумент удобно брать с клавиш ввода передней панели.
Увеличить
Блок памяти (ОЗУ) и УВВ с ПЗУ-загрузчиком.
Увеличить
Ну и, собственно, сама передняя панель в сборе.
Увеличить
На сборочных схемах есть некий INVERTOR - это вот что:
Увеличить
Здесь нет стремления почудить или пооригинальничать. Я бы поставил здесь что-то типа
580ИР83 (он с инверсией), но все его аналоги в моей старенькой глючной версии Proteus
отказались делать инверсию! Ну такое уже со мной и Proteus-ом было, так что я просто
сгруппировал 8 "честных" инверторов в под-схему.
Вот такая схемотехника у Proteus-модели EDUC-8. Саму модель выложу позже, т.к.
схемы мной уже довольно тщательно проверены, а вот написанная мной dll-библиотека
для " оживления" светодиодной передней панели ещё немного в тестах нуждается.
Но всё, что уже выложено, спокойно и честно без этой dll-библиотеки работать будет,
только на схеме передней панели надо будет расположить либо светодиоды, либо цветные
логические пробники - есть такие в Proteus.
Сам я такого делать не стал - ну не за этим же я сам себе написал dll-библиотеку
для LED-панелей!
_________________ iLavr
|
26 Jun 2014 14:36 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну и поскольку " кормить соловьёв баснями" - не самое благодарное занятие , я выкладываю,
собственно, и сам проект эмуляции 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.
После каждого нажатия " 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!
_________________ iLavr
|
29 Jun 2014 09:39 |
|
|
Александр А.
Senior
Joined: 25 Jan 2015 11:38 Posts: 165 Location: 109.225.59.224
|
Едва продрался сквозь схемотехнику этого чуда из 70-х. Как их разрабатывали вручную (оригинал то вообще от DEC) ?
Похоже, что автор компьютера тогда банально сломал голову при разводке односторонних плат, поэтому быстро сдался и немного увеличил количество однотипных микросхем. Зато не надо стало вводить полноценные дорожки на стороне деталей.
_________________ Просто Александр.
|
06 Feb 2015 10:06 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я думаю, он старался сделать это " чудо 70-х" максимально доступным для повторения любителями.
" Electronics Australia" - это у них что-то типа нашего " Радио"...
Так что он и разнес микросхемы максимально широко, и поверху провода бросил.
У меня любимый магнитофон "Электроника 323" из тех времен - тоже с односторонней
печаткой и с перемычками со стороны деталей, хотя и промышленного производства аппарат.
А так, на мой взгляд, это " чудо 70-х" зело поддается ужатию, как схемотехнически,
так и конструктивно.
_________________ iLavr
|
06 Feb 2015 10:18 |
|
|
Who is online |
Users browsing this forum: No registered users and 13 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|