Найти тему
Мифоборец

Самодельный 8-разрядный компьютер в наше время. Часть вторая

Оглавление

В первой статье посвященной самодельному 8-разрядному компьютеру я рассказал о том ЗАЧЕМ вообще собирать подобный компьютер в настоящее время. хотя собирать или нет - каждый вправе решать сам. Во второй части расскажу о компьютере более подробно

Концепция

Даже в наше время разработок вось­миразрядных компьютеров достаточно много. Это и клоны известных компью­терных марок, например ZX Spectrum, широко распространённых в конце 80-х годов, в журнале "Радио" описана блестящая разработка Василия Лиси­цына, многочисленные разработки на основе готовых процессоров и мик­роконтроллеров в роли контроллеров периферии, проект THE $4 Z80 SINGLE­BOARD COMPUTER и т. п. Сеть Интернет позволяет найти много интересных примеров и проектов.

Эти разработки прекрасно справ­ляются с поставленными задачами, но у них есть и общий недостаток: изначаль­но взятая за основу платформа на пер­вых порах является преимуществом, но по мере расширения спектра задач потихоньку становится "узким местом", ограничивающим полёт фантазии. А хочется иметь полноценный компьютер с разумной поддержкой стандартной периферии, прозрачной внутренней архитектурой, легко модифицируемый отдельными блоками и с открытым ко­дом. Предлагаемая разработка направ­лена на то, чтобы заполнить эту "нишу".

Сформулируем базовые требования, которые были положены в основу раз­работки:

— полностью восьмиразрядная ар­хитектура, никакого "шаманства" в части оверклокинга и т. п., полное соот­ветствие стандартам и протоколам под­держиваемых устройств;

— максимально возможная унифи­кация со стандартными и доступными на сегодняшний день периферийными устройствами и методами передачи и хранения данных;

— модульная внутренняя архитекту­ра с внутренней стандартизацией шин и протоколов;

— программная архитектура, вклю­чающая поддержку стандартных про­цессоров (на уровне эмуляции), опера­ционных систем, совместимости с ре­альными устройствами для лучшей переносимости программ.

После многочисленных эксперимен­тов, критического анализа требований и доступных опций была определена следующая архитектура:

— базовая эмуляция процессора Z80 и поддержка ОС СР/М;

— системное ОЗУ объёмом 64 Кб показалось достаточным;

— видеоадаптер VGA в монохром­ном буквенно-цифровом режиме (поче­му именно так — об этом дальше);

— поддержка клавиатуры PS/2 и, желательно, мыши;

— коммуникационный интерфейс RS-232 и, желательно, Ethernet для работы с простыми протоколами;

— использование SD-накопителя для хранения данных.

Общая посылка была простая: можно стараться сделать относительно быстрый компьютер с какой-то графикой, с USB- хостом и т. п., но зачем? Такая разработ­ка по определению не будет простой и понятной либо будет сильно ограничен­ной функционально. А вот простой ком­пьютер с классической архитектурой бу­дет куда интереснее, проще и полезнее. Реальных возможностей у такого устрой­ства, на самом деле, гораздо больше.

Таковы были базовые предпосылки разработки. В качестве вычислитель­ной базы выбор остановился на микро­контроллерах семейства AVR как на­дёжной и честной восьмиразрядной платформе, а интерфейсы реализованы на базе стандартных специализирован­ных микросхем.

Отдавая дань временам, когда такие устройства были популярны, устрой­ство изначально разрабатывалось под DIP-компоненты, но все элементы име­ют SMD-исполнение или функциональ­ные аналоги для поверхностного монта­жа, поэтому портирование не составит труда. Но монтаж выводных элементов проще и легче для большинства не слишком опытных любителей плюс не требует специализированного (и дорогого) оборудование вроде паяльной станции с феном и микроскопа. Кроме этого, важно, чтобы аппа­ратная часть была легко тиражируемой, лёгкой в повторении (при желании даже в домашних условиях) платой, устанав­ливаемой в легко доступный на рынке корпус и иметь "товарный" вид.

-2

Компьютер КРИСС

Прежде чем продолжить, немного поговорим о терминологии в статье, а именно — о терминах "программный" и "аппаратный". Далее по тексту подразу­мевается, что все функции, реализо­ванные на уровне "базовых" микропро­грамм для МК, считаем "аппаратными". "Программными" будут называться функции, которые можно реализовать на уровне специальных "пользователь­ских" программных блоков на языке программирования AVR или в програм­ме, выполняемой под эмулятором цент­рального процессора.

В результате устройство, получив­шее название "КРИСС СР/М", размес­тилось на одной плате размерами 10x13 см, выполнено в формате моно­блока и имеет следующие па­раметры:

— система команд: z80 (Zilog) в режиме эмуляции, расширенная, ско­рость выполнения команды регистр— регистр 1 мкс;

— память: статическое ОЗУ 64 Кб, системное ПЗУ 128 Кб, буферный банк ОЗУ 2 Кб;

— видеоадаптер: VGA, 640x480 то­чек, монохромный, буквенно-цифровой с разрешением до 25x80 символов;

— внешний накопитель: SD-карта, программная поддержка стандартных образов дискет;

— часы реального времени;

— аппаратная поддержка клавиату­ры PS/2;

— коммуникационные интерфейсы: RS-232, системный UART;

— контроллер Ethernet;

— однотональный синтезатор мело­дий с памятью, встроенным усилителем и динамической головкой;

— поддержка GPIO (до 128 линий ввода/вывода, внешний блок расшире­ния) или указателя мыши PS/2;

— операционная система СР/М вер­сии 2.2 и выше.

Компьютер питается от сети пере­менного тока 230 В, потребляемая мощность — не более 5 Вт. На компьюте­ре работают практически все програм­мы, написанные под "чистую" СР/М, в частности программы, написанные для очень популярного в СССР компьютера Robotron 1715. Но предусмотрена воз­можность и эмуляции платформенно­зависимых особенностей.

Структурная схема

Компьютер построен по стандарт­ной, в общем-то, схеме: центральный процессор (ЦП) реализован на микро­контроллере (МК) ATmega1284P ,контроллер периферии — на МК ATmega328, контроллер VGA — на двух МК ATmega328 и ATtinyl 3, контроллер Ethernet — на специализированной микросхеме ENC28J60 (Microchip), часы реального времени — на DS1305 (Dallas Semiconductor). Внешнее ОЗУ 64Кх8 —W24512 (Winbond). Внутренняя шина — SPI. Общая структурная схема компьютера показана на рис. 2.

Рис.2 Структурная схема компьютера
Рис.2 Структурная схема компьютера

Сразу сделаем оговорку, что функ­циональная схема не соответствует один к одному набору микросхем: так, например, микросхема центрального процессора исполняет частично функ­ции контроллера периферии, а микро­схема контроллера периферии являет­ся, кроме прочего, частью VGA-koht- роллера. По ходу описания это распре­деление будет раскрыто подробно.

Несколько слов о том, почему было решено ограничить себя такими скром­ными, на первый взгляд, рамками. От­вет "в целом" — этого на самом деле более чем достаточно для решения 80 % реальных задач, а конкретно было принято во внимание следующее:

— расширение ОЗУ для "не игровых" задач большого смысла не имеет: для работы ПО СР/М 64 Кб вполне доста­точно, нет сложностей с выбором стра­ниц, а кроме того, в этом компьютере реально в распоряжении разработчика гораздо больше памяти, чем на стан­дартном СР/М устройстве, о чём пого­ворим в разделе про типы и организа­цию памяти;

— полноценная графика требует большого объёма видео-ОЗУ (посчитай­те хотя бы для режима 640x480x16 цв.) и реально (игры и просмотр картинок исключаем) требуется больше для ото­бражения специальных символов (сразу вспоминается компьютер "Микроша"), что в данном случае было решено дру­гим путём (см. раздел про видеоадап­тер);

— монохромность, на самом деле — это разумная достаточность, а кроме того, она имеет как минимум два пре­имущества: позволяет сконцентриро­ваться на содержании, а не на оформ, а кроме того, она имеет как минимум два пре­имущества: позволяет сконцентриро­ваться на содержании, а не на оформлении (не секрет, что, набирая текст в Word'e, часто больше думают, что и как выделить, чем над содержанием) и сильно упрощает работу программиста, сокращая при этом программный код и улучшая производительность. Для учебного компьютера это то, что надо. Реализация атрибутов к тому же ведёт либо к появлению пустых символов на экране, либо при скрытых символах атрибутов разрушает организацию ви­деопамяти. Но, при желании, это можно добавить, о чём будет разговор далее.

Общая схема может показаться несколько усложнённой, но так сложи­лось по ходу разработки: все МК рабо­тают на пределе возможностей, даль­нейшая оптимизация и объединение задач выглядела уже нецелесообраз­ной.

Рассмотрим блоки и элементы схемы подробнее.

Принципиальная схема

Принципиальная схема. Часть1
Принципиальная схема. Часть1

Устройство содер­жит встроенный блок питания (внутрен­нее напряжение — 5 В), набор внешних коммуникационных разъёмов и индика­торных светодиодов. Индикаторные светодиоды подключены аппаратно и отображают физический доступ к соот­ветствующему интерфейсу. Отдельные части и компоненты описаны дальше в статье.

Питается компьютер от модульного преобразователя, установленного на плате. Блок имеет выходную мощность 5 Вт, обеспечивая максимальный вы­ходной ток 1 А.

Примерное потребление модулей

  • Микроконтроллеры и вспомогательная логика 100 мА
  • ОЗУ 200 мА
  • SD-карта в режиме чтения/записи 50/100 мА
  • Контроллер Ethernet в режиме покоя / передачи 50/250 мА
  • Синтезатор мелодий при воспроизведении 70мА
  • Клавиатура 150 мА

Загрузка источника питания близка к предель­ной, поэтому при использовании ком­мутационных цепей на плате GPIO реко­мендуется использовать внешнее пита­ние. В случае, если при повторении устройства что-то будет изменено и добавлены, например, цепи работы с манипулятором мышь, синтезатор мелодий и пр., от встроенного блока питания можно отказаться, использо­вав с пользой освободившееся место.

Цепи питания платы защищены самовосстанавливающимся предохра­нителем F1 на 1,1 А, а для обеспечения качества питания содержат дополни­тельный фильтрующие цепи — дрос­сель L1 и расположенные на плате кон­денсаторы. Два разъёма на плате поз­воляют в режиме отладки питать устройство от внешнего источника ста­билизированного напряжения питания 5 В (рекомендуемая мощность источ­ника — не менее 10 Вт, соответственно ток — 2 А).

Выключатель питания устанавли­вают на питающем проводе. Желающие могут разместить выключатель на лице­вой панели устройства, но в низко­вольтной части, включив его вместо предохранителя или фильтрующего дросселя, — есть возможность вместо дросселя установить контактную груп­пу. Но реальной надобности в этом нет, поскольку сброс компьютера реализо­ван аппаратно на уровне контроллера клавиатуры.

Учитывая, что модуль питания рабо­тает практически на пределе, при его монтаже необходимо оставить зазор 1...2 мм до поверхности платы, а кон­тактные площадки, на которых присут­ствует высокое напряжение, рекомен­дуется изолировать термоклеем. Также следует изолировать термоклеем ого­лённые части терморезистора мягкого старта RK1, выступающие со стороны установки элементов.

Вход RESET МК ЦП имеет цепь фор­мирователя сигнала стартового сброса DR2.1 и С1, все входы RESET имеют внешние подтягивающие к плюсовой линии питания резисторы. Кроме этого, все сигналы контролируются управляе­мыми программно цепями: МК ЦП име­ет возможность сформировать сигнал сброса контроллеру внешних устройств (КВУ) и, наоборот, КВУ формирует сиг­нал сброса МК контроллера VGA, конт­роллер VGA — блока формирователя синхроимпульсов.

В системе задействовано несколько источников тактовых сигналов. ЦП, МК КВУ и основной МК контроллера VGA ра­ботают на частоте 20 МГц, которую фор­мирует МК КВУ (кварцевый резонатор ZQ2), это линия 15 жгута, сигнал выве­ден на контрольную точку КТ1 "F". Мик­росхемы формирователя синхроимпуль­сов VGA и контроллер Ethernet имеют собственные источники тактовых частот 25,175/2 МГц (G1) и 25 МГц (ZQ3) соответственно. Кроме того, часы реального времени имеют собственный низкочас­тотный кварцевый резонатор ZQ1. По­дробнее см. описание конкретных узлов.

Принципиальная схема. Часть 2
Принципиальная схема. Часть 2

Рассмотрим узлы и элементы под­робнее.

Системная шина

Внутренняя системная шина после­довательная SPI — Serial Peripherial Interface. Это синхронная четырёхпро­водная шина передачи данных типа мастер—ведомый, в которой линии разделены функционально:

— CS — линия выбора устройства Chip Select, своя для каждого ведомого устройства;

— SCK — System Clock, линия тактирующих импульсов, общая для всех устройств, импульсы всегда формируются мастер-устройством;

— MOSI — Master Out Slave In — шина передачи данных от мастер-устройства к выбранному ведомому устройству, общая для всех устройств, управляется мастером;

— MISO — Master In Slave Out — шина передачи данных от выбранного ведомого устройства к мастеру, захватывается ведомым устройством при выборе последнего.

Протокол SPI относится к категории общепринятых протоколов без жёсткой спецификации. Общий принцип работы шины показан на Выбор устройства осуществляется сигналом SS, по сигналу тактового импульса передаются данные по шинам MOSI и MISO. Обратите внимание, что передача данных в обоих направлениях идёт параллельно. Существуют несколько вариаций работы шины в зависимости от полярности тактового сигнала и направления фронта выборки, их обсуждать не будем, отметим только, что в этой разработке все устройства работают в режиме "О", как на рисунке: полярность импульсов положительная, рабочим является нарастающий фронт тактового импульса. Рабочая частота шины зависит от возможностей ведомого устройства. Размер фрейма — всегда восемь бит.

Ведомые устройства подключены через диспетчер, выполненный на дешифраторе "3 в 8" на микросхеме 74НС138. Эта микросхема выбрана по нескольким причинам:

— активный уровень — низкий, что является стандартным для большинства ведомых устройств;

— несколько входов разрешения работы;

— в состоянии "запрета" вывода на всех выходах поддерживается высокий уровень, что позволяет не подключать подтягивающие резисторы.

Микросхема диспетчера управляется сигналами выбора адреса ВАО—ВА2 МК ЦП и двумя сигналами разрешения /СЕ: один — с выхода CS штатного интерфейса SPI МК (мастер-устройст-ва) и отдельного сигнала разрешения шины. Это необходимо, поскольку выводы управления шиной SPI объединены с адресной шиной доступа к ОЗУ и требуется разделение режимов работы.

Кроме задачи выборки устройств, диспетчер отвечает за некоторые дополнительные задачи, которые нужны, но выводов МК не хватило: управление системным индикатором HL3 "SYS", звуковым оповещателем НА1, формирование сигнала сброса МК контроллера периферии. Оповещатель — электромагнитный co встроенным генерато­ром, подключён через эмиттерный повторитель на транзисторе структуры PNP VT1, поскольку потребляемый им ток — около 20 мА.

Назначение сигналов шины и назначение выводов ЦП приведены на рисунке

Сигналы шины и выходы ЦП
Сигналы шины и выходы ЦП

Выводы CS, SCK, MISO, MOSI используются также при ISP-программировании микроконтроллера, поэтому выведены (вместе с сигналом сброса /RESET) на наплатный разъём ХРЗ. Особенности его использования будут описаны в разделе про программирование устройства.

Номера устройств шины приведены на рисунке. Обратите внимание, что для упрощения платы разводка выполнена так, что логический номер устройства, т. е. номер, выставляемый на шину при выборе устройства, не совпадает с номером физического выхода микросхемы диспетчера. Для управления важен именно логический номер устройства, номер выхода микросхемы диспетчера приведён для лучшей ориентировки на схеме.

-7

ОЗУ

Системное ОЗУ выполнено в виде отдельной микросхемы статического ОЗУ объёмом 64 Кб DS1. Применена микросхема W24512A производства Winbond. Причины выбора этой микросхемы:

— паспортное время полного цикла чтения (выборка адреса плюс отработка сигнала разрешения выхода) от 30 нс (для индекса W24512А-15) до 70 нс (для микросхемы с индексом 35);

— микросхема выпускается в компактном 32-выводном корпусе DIP300;

— легко доступна для приобретения.

Для МК, работающего на частоте 20 МГц, время одного такта равно 50 нс, что должно обеспечивать работу без потери производительности. По факту всё оказалось немного хуже, но не сильно.

Микросхема ОЗУ подключена к МК напрямую, без использования регистра-защёлки, и работа с памятью организована на аппаратном уровне без использования штатных механизмов МК AVR. Такой подход выбран по соображениям упрощения разводки платы и не очень удобной логики работы штатного механизма. Кроме этого, в таком формате память программ эмулятора процессора и внутренней микропрограммы разделена физически, что упрощает логику микропрограмм.

Для работы с ОЗУ выделены три полных порта центрального МК: порты РА и PC как адресные шины и порт РВ как шина данных, объединённый с шиной SPI. Дополнительно задействованы две команды управления: разрешение вывода при операциях чтения /ОЕ (порт PD4) и команда записи /WE (порт PD5). Эти выводы соединены с плюсовой линией питания через внешние резисторы, поскольку при их отсутствии микросхема ОЗУ может по случайным наводкам выводить что-то на шину данных и сбивать процессы ISP-программирования МК. Сигналы выбора кристалла не использованы и установлены в состояние "выбрано". В случае модификации устройства с целью расширения памяти они могут быть задействованы для переключения между банками. Выбранная микросхема имеет сигналы выборки разной полярности, что позволяет переключаться между двумя микросхемами одним сигналом без дополнительной логики.

Цикл работы с памятью включает в себя следующие операции:

— выставить старший байт адреса (один такт);— выставить младший байт адреса (один такт);

— выставить направление порта данных (один такт);

— установить сигнал /ОЕ (один такт);

— прочитать данные из порта данных (один такт);

— снять сигнал /ОЕ (один такт).

Предполагается, что сигнал /ОЕ формируется выводом предустановленного значения в порт, а не командой cbi/sbi, поэтому посчитан как один такт. На практике оказалось, что для стабильной работы микросхемы необходимо добавить минимум один такт после выборки адреса и один такт после установки сигнала /ОЕ. Возможно, это было связано с конкретной партией микросхем, поскольку контроль сигналов показал идеальную форму всех фронтов. Из-за этого цикл чтения занимает восемь тактов вместо теоретических шести. Но это в реальности не влияет на общую производительность, в этих тактах выполняются вспомогательные операции, например инкрементирование счётчика команд.

Накопитель на SD-карте

Приятная особенность накопителя на SD-карте в том, что он умеет работать по протоколу SPI, благодаря чему использовано стандартное подключение к системной шине.

Само подключение накопителя (на схеме обозначен как разъём XS1) особенностей не имеет. Он питается от отдельного стабилизатора DA1 (78L33), для контроля работоспособности предусмотрена контрольная точка КТ2 "3,3 В". Для сопряжения с уровнем основной платы установлены диоды сопряжения VD3—VD5, а выводы карты соединены резисторами с линией питания +3,3 В. Вывод MISO (DO) подключён напрямую, поскольку в большинстве случаев он имеет выход с открытым коллектором и не требует преобразователя. Тем не менее встречаются карты, у которых выход DO внутри соединён с плюсовой линией питания, это немного повышает напряжение питания примерно до 3,9 В, но работоспособность карты при этом сохраняется.

В устройстве применён простой, не совмещённый держатель SD-карт, имеющий десять рабочих выводов и размер от выводов до края около 25 мм, обратите на это внимание. Рекомендуется использовать нажимные "push-push” держатели ATTEND 104D-TCC0-R06, эти устройства хоть и дороже обычных, но имеют высокое качество. Альтернативно можно применять более простые держатели HTB1TK9DHF, в ассортименте продающиеся на aliexpress, но удобство работы будет ниже. Плата разработана с учётом обеих модификаций.

Контроллер SD-накопителя поддерживает все виды карт, но рекомендуется использование карт небольшого объёма, автор использует карты 128 Мб. На карте хранятся данные по начальной загрузке системы (блоки по 64 Кб) и образы дисков (дискет) в соответствии с настройками выбранной ОС, максимальный размер дискеты — 2 Мб. Типичный для СР/М диск имеет размер 819 Кб. Структура SD-карты будет описана в разделе по программированию устройства. Программирование карты выполняется через специализированное приложение под ОС Windows.

В этой версии работа с картой имеет ряд особенностей:

— предполагается, что весь сеанс работы идёт с одной картой, замена предусмотрена только при начальной (стартовой) загрузке;

— для пользовательских программ доступ к данным SD-карты ограничен стандартным адресным блочным доступом к 128-байтным секторам образов дискет, возможность доступа к карте на физическом уровне отсутствует.

Есть, конечно, возможность обойти эти ограничения, но уже на уровне системного программирования. В процессе работы есть возможность "менять дискеты в дисководах" через системную консоль.

Контроллер работы с картой реализован програмно на уровне микропрограммы МК ЦП, передача данных осуществляется через внутренний буфер размером 512 байт в ОЗУ МК с прямым доступом к внешнему ОЗУ (режим DMA). Контроллер выполняет следующую последовательность команд (упрощённо):

— инициализация: 80 импульсов wakeup — CM D00 — CMD08 — CMD58 — ACMD41 — CMD58;

— чтение: CMD17 — DATA;

— запись: CMD24 — DATA.

Стандартный размер блока для SD-карты — 512 байт, в то время как стандартный сектор СР/М — 128 байт. По этой причине введена буферизация на уровне ОЗУ МК, например, при чтении считывается сразу 512 байт, далее, если запрашиваемый сектор принадлежит блоку, чтение не производится. При записи сначала читается блок 512 байт, корректируется сектор 128 байт и записывается обратно.

Часы реального времени

Часы реального времени (RTS) выполнены на специализированной микросхеме DS1305, поддерживающей работу по SPI-шине (при установленном высоком уровне на выводе SM), и стабилизированы отдельным кварцевым резонатором 32768 Гц (ZQ1).

Несколько особенностей, которые нужно иметь в виду.

Эта микросхема имеет встроенные конденсаторы для резонатора и рассчитана на кварцевые резонаторы ёмкостью 6 пФ. На практике дешёвые резонаторы редко обеспечивают приемлемую точность хода, помочь может либо установка резонатора от неисправной материнской платы, либо можно попробовать улучшить точность дополнительными внешними конденсаторами ёмкостью 2—14 пФ (С17, С18), на схеме они показаны штриховыми линиями .

Выводы /INTx с низким рабочим уровнем объединены по схеме ИЛИ диодами VD1, VD2, они формируют сигнал /INTC (PD6) МК ЦП (см. раздел про прерывания). Микросхема ЧРВ имеет нестандартный, высокий уровень сигнала выбора CS, поэтому подключена к диспетчеру устройств SPI через инвертор микросхемы DD3 (74НС00).

Для работы часов при отключённом питании предусмотрен резервный элемент напряжением 3 В. Печатная плата рассчитана на установку элемента питания CR2032 SLF или аналогичных. Можно установить вертикальный держатель KLS5-CR2032-04, но высота корпуса буквально на 1 мм не позволяет использовать стандартные элементы CR2032. В качестве решения можно немного профрезеровать крышку корпуса или использовать элемент меньшего диаметра CR1632, зафиксировав его небольшим куском термоусаживаемой трубки. Как альтернативный вариант, на плате вместо держателя можно установить контакты и подключать внешний элемент с проводными выводами.

Микросхема DS1305 имеет возможность использовать в качестве резервного перезаряжаемый источник питания, у неё есть внутренние цепи для его подзарядки. Такие аккумуляторы подключают к выводу VCC2. Например, можно применить литий-полимерные серии LP40*** напряжением 3,7 В. При желании идти по такому пути на плате предусмотрена возможность установки контактов для подключения батареи, но нужно будет перерезать дорожку, соединяющую контакты VCC2 и GND, и установить перемычку в отверстия для подключения обычного элемента. Подробнее об этом можно прочитать в документации на микросхему.

В этой конструкции микросхема RTS использована не только как часы, но и как системное ПЗУ объёмом 96 байт, которое используется для хранения системных настроек, в частности МАС-адреса устройства. Эта память считывается при загрузке устройства, и данные доступны прикладным программам.