"Аюша" 6502 SBC - описание схемы


Схема первого этапа



Схема выложена "как есть", т.е. является калькой с рабочего образца. Можно повторить её и в таком виде, но, думаю, что лучше бы подойти к повторению творчески и кое-что поменять или выкинуть. Разберём схему по порядку.


Задающий генератор собран на транзисторе КТ315 по схеме, аналогично применённой в игровой приставке "Денди/NES", собранной на дискретных элементах. Руководствовался тем, что у меня не было в запасниках кварца, указанного в оригинальной схеме, а вот в десять раз большей - пожалуйста. Но имеющийся кварц ни в какую не захотел нормально работать в стандартной схеме генератора на двух инверторах. Поэтому была использована трёхточка, а инверторы D1.1 и D1.2 с уже установленными резисторами стали простыми формирователями импульсов.


Примечание. Думаю, что тут достаточно одного линейного инвертора, второй можно использовать в нормальном режиме. При этом высвободим элемент D4.1. А если найдётся кварц на частоту 1,8432 МГц, то он просто обязан нормально запуститься в стандартной схеме.


Для подстройки частоты генератора (а это нам требуется исключительно для нормальной работы последовательного порта) используется катушка L*, выполненная на каркасе от ПЧ-контуров транзисторных приёмников. Она имеет 15 витков провода ПЭЛ-0,1 и подстроечный сердечник. Катушка нужна в случае, если частота генератора получилась выше требуемой. В противном случае катушка заменяется подстроечным конденсатором в 30пФ, к которому, при необходимости, может быть подключен дополнительный постоянный конденсатор (последовательно или параллельно - смотрится по установке частоты).


Далее импульсы с формирователя делятся на 10 микросхемой D2 и ещё на 2 половинкой микросхемы D3.1. Выходные частоты подаются на микросхему таймера 580ВИ53, последовательный порт 68В50, а с выхода D3.1 - на процессор 6502. Первые две микросхемы могут быть подключены на любую задающую частоту, по выбору пользователя. Для таймера это даёт возможность получения более низких генерируемый частот, для последовательного порта - выбор различной скорости работы с терминалом.


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


Процессор 6502 уже имеет шину управления внешними устройствами, имеющую тактовые сигналы Ф1OUT, Ф2OUT и управления чтением/записью R/W. Эти сигналы мы выводим в общую шину управления (на схеме чёрная). Эти же сигналы используются и в чипах комплекта 63хх/65хх/68хх, что и видно по подключению чипа последовательного порта 68В50. Однако для микросхем памяти и чипов из других микропроцессорных комплектов требуются иные сигналы, а именно чтения READ и записи WRITE (в тексте я не буду ставить верхние подчёркивания, на схеме они есть). Формированием этих сигналов занимаются элементы D4.2 и D1.4 D4.3. Вот и всё, шина управления контроллером готова.
Разумеется, что в общую шину включены сигналы прерываний NMI и IRQ, они также выведены на системный разъём, но, поскольку в данном этапе они не используются, они просто притянуты к положительному контакту источника питания.


На микросхемах D11-D13собраны буферы шин адреса (красная) и данных (синяя). Для шины адреса использованы микросхемы 580ИР82, для данных - 555АП6, управляемая сигналом R/W.


Примечание. Если в дальнейшем контроллер не будет расширяться, то буферы шин можно не ставить, получив экономию места и потребляемого тока. Вместо 580ИР82 можно также применить 555АП6.


В схеме сброса контроллера применена микросхема с триггером Шмитта D5 155ТЛ1, могущая сделать для нас простыми средствами импульсы с крутыми фронтами, что важно для нормального сброса процессора (это требование отражено в даташите на процессор).


Узел связи с терминалом на чипах D7 D8 полностью аналогичен оригинальной схеме, за исключением выбора микросхемы D8 - в нашей схеме она выбирается одним сигналом. Выбор скорости связи с терминалом без перепрограммирования чипа осуществляется подключением выводов 3 и 4 на различные частоты генератора. При использовании частоты 1,8432 МГц скорость работы с терминалом будет составлять 115200 Бод, при использовании 0,9216 МГц - 57600 Бод. Остальные параметры терминала: 8 бит, без чётности, 1 стоповый бит (8-N-1).


Примечание. Разумеется, что чип 68В50/63В50 может быть заменён на 580ВВ51, но для этого придётся переделать схему его синхронизации и частично переписать процедуры ввода/вывода в ПЗУ. Да и скорость передачи данных будет ниже.


Включение чипа 580ВВ55 стандартное. Порты выведены на штыревой разъём, позволяющий подключить к нему стандартный шлейф от LPT-порта (DB25F).


Включение чипа 580ВИ53 также стандартно, за исключением коммутации тактовых импульсов и входов управления стробированием каналов. Перемычками можно выбрать тактовую частоту каналов 1,8432 МГц или 0,9216 МГц, а входы стробирования могут либо быть скоммутированы на "плюс" (нет стробирования), либо управляться с выходов микросхемы. При этом гейт первого канала коммутируется на выход второго, гейт второго канала - на выход третьего, гейт третьего канала - на выход первого.


Примечание. Применение 580ВИ53 в данной конструкции, как сказано выше, оправдано только желанием автора использовать контроллер в качестве основы синтезатора КВ-частот. Поскольку музыкальные возможности микросхемы более чем скромные, и если не требуется операций, связанных с формированием тактовых последовательностей (звуки, прерывания), либо если есть желание использовать звуковой синтезатор AY, то можно чип таймера не устанавливать.


В качестве ПЗУ использован чип FLASH-памяти Winbond 27С512 объёмом 64 килобайта. Мы используем его четырьмя страницами по 16К, ибо мало ли что нам взбредёт в голову попрограммировать. Страницы переключаются перемычками S1 S2. В стартовой комплектации содержимое всех страниц одинаково. Во вторую страницу можно записать простой монитор и программировать контроллер на Ассемблере, а вот с оставшимися двумя и входом PRELOAD разговор отдельный...
Предположим, что в дальнейшем будет решено использовать для вывода информации на дисплей микросхему 6538. Для её работоспособности требуется загрузка знакогенератора в её память (если не использовать жёстко вшитый). В этом случае нам необходима предзагрузка знакогенератора перед основной работой компьютера. Для этого в одной странице ПЗУ записывается знакогенератор и процедура загрузки, после отработки которой на вход PRELOAD поступает сигнал низкого уровня, переключающий страницы ПЗУ на блок с основной рабочей программой. Разумеется, что знающие программисты с осторожностью отнесутся к такой возможности (для объяснения этого отсылаю к описанию маппинга страниц ПЗУ NES), но таковая имеется и может быть в будущем использована. Таким образом у нас будет что-то вроде псевдо-32К ПЗУ, в которой половина использована под знакогенератор. Конечно, знакогенератор составляет 8К, значит в оставшейся области можно записать какие-либо процедуры (ввода/вывода например), предзагружая их для последующего использования, скажем, в верхние адреса ОЗУ.
Выборка ПЗУ осуществляется элементом D4.4 при "единицах" на 14 и 15 адресных шинах.


Примечание. Если подобных опытов в дальнейшем не предполагается, то можно использовать обычную микросхему ПЗУ с УФ-стиранием. А поскольку такие ПЗУ имеют выход с открытым коллектором, то шина данных подтянута к "плюсу" через резисторы, как в "Спектруме".


Чип ОЗУ, применённый в контроллере, имеет ёмкость 64К. Поэтому есть большое желание использовать его ёмкость максимально. Конечно, можно использовать и 32К чип (оба чипа можно взять из кэш-памяти 486 компьютеров), но сами понимаете, что много памяти никогда не бывает. Однако при использовании ОЗУ свыше 32К встроенный Бейсик имеет небольшой косяк, связанный с определением оставшейся свободной оперативной памяти - она определяется с ошибкой (команда PRINT FRE(0) выдаёт отрицательный результат, что отражено в листинге Бейсика). Думаю, что на это можно не обращать внимания, а в случае применения предзагрузки (о чём сказано выше) в верхние адреса памяти можно загружать различные процедуры, указав Бейсику, что для него доступно только 32К.

Примечание. Если у вас под руками нет чипов большой ёмкости, то можете использовать родимую К537РУ10 объёмом аж в 2К. Бейсику в этом случае будет доступно полтора килобайта, но контроллер можно будет уже пользовать и программировать!


Выборка ОЗУ, как и устройств ввода/вывода, собрана на дешифраторах D16 D17 типа 155ИД3. Эти микросхемы применены для того, чтобы по возможности больше экономить адресное пространство (не забываем, что порты внешних устройств для процессора 6502 отражены на память). D16 делит пространство 8000 - BFFF на 16 окон по 1К. Первые 15 окон, совместно с адресной шиной 15, через схему "проволочное или" на диодах, осуществляют выборку ОЗУ (если адресная шина 15 низкая, выбираются первые 32К, затем окошками по одному килобайту), 16 окно делится на 16 страниц по 64 байта микросхемой D17 и полностью отдано выборке внешних устройств.


Примечание. Данный узел решён "в лоб" исходя из наличия микросхем. Современный вариант - использование какой-либо ПЛИС или ПЛМ, но тогда весь шарм устройства уходит. Разумеется, что абсолютно необязательно отдавать верхние 15К под ОЗУ, можно использовать квазидиск на ПЗУ, даже многостраничный. Но это на выбор конструктора.


В выбранной схеме дешифрации адресов, кроме размеров, есть ещё один подводный камень, связанный с определением Бейсиком доступного пространства ОЗУ. Да, можно его указать вручную, вплоть до 1024 байта, и Бейсик будет работать. Но при автоматической проверке грабли следующие.
Для определения размеров ОЗУ Бейсик пошагово записывает в каждую последовательную ячейку число 36, затем его считывает. Если 36 - это ещё ОЗУ и двигаемся дальше. Если 255 - то ОЗУ закончилось и его размер на одну ячейку меньше. Данный алгоритм предусматривает разорванность адресного пространства, как в оригинальной схеме. (там пустое окно в 8К). У нас же сразу после ОЗУ следующей ячейкой может быть установлено устройство ввода/вывода, в данном случае ячейка ВС00. Если мы, к примеру, посадим на этот адрес последовательный порт, то при автоматической проверке в его управляющий регистр запишется число, полностью разрушающее его работу и рвущее связь с внешним миром. Поэтому при использовании страницы с адресами ВС00 - ВС3F следует так сделать дальнейшую выборку, чтобы ячейка ВС00 всегда была свободна (Дополнено 25.10.2014: оказывается можно обойти это ограничение, если читаться из этой ячейки будет иное значение, нежели записывалось. Именно поэтому чип RTC прекрасно работает на этих адресах, поскольку ячейка, в которую Бейсик записывают свою проверочную константу, принадлежит счётчику миллисекунд, и ко времени чтения значение в ней изменится. Ну и старший ниббл будет всегда равен нулю, что бы в него не записывали. Подробнее на страничке RTC).
По этой же причине было решено устанавливать внешние устройства "сверху вниз", начиная со старших страниц. Таким образом в данной схеме страница BFC0 - BFFF (49088 - 49151) отдана последовательному порту 68В50, страница BF80 - BFBF (49024 - 49087) отдана порту 580ВВ55, страница с адресами BF40 - BF7F (48960 - 49023) предназначена для таймера 580ВИ53.
Как мне кажется, 64 байта на устройство - вполне нормально. Исходя из этого на системный разъём шина адреса выведена не полностью, а только её первые пять линий, чего для управления внешними микросхемами вполне достаточно для большинства случаев.


Программирование устройств очень просто. Для записи в устройство используем команду POKE addr,const , для чтения из устройства PRINT PEEK(addr). Для операций реального времени это, конечно, медленно (общение с магнитофоном, к примеру), но для остальной периферии вполне достаточно.


С внешним миром и платами расширения контроллер соединяется тремя шлейфами: 25 линий для 580ВВ55, три линии для СОМ-порта и 40-штырьковый разъем внешней шины (старый ИДЕ-шлейф). С терминальным компьютером контроллер соединяется нульмодемным кабелем. Можно использовать различные программы - Telemax для DOSа, Hypertrminal для Windows 98/2000/XP. Для Win7/8 - тот же Гипертерминал, который просто можно скопировать из ХР парой файлов. Остальная работа полностью аналогична оригиналу - загрузили/написали программу, запустили контроллер и терминал можно отключать.

Потребление тока собранным экземпляром составило 570 мА, причем львиная доля потребляется процессором (0,7 Ватта рассеиваемой мощности по даташиту). Решение - применение процессора 65С02, собранного по КМОП-технологии, потребляющего 1,5мА на мегагерц и могущего работать с частотой в 14 МГц, что очень впечатляет и далеко переплёвывает ВМ80 или Z80А.

Что ещё хотелось бы... Во-первых, печатная плата. Хоть схема и будет изготавливаться пользователем в единственном экземпляре, но не у каждого хватит усидчивости для вязания МГТФа. Правда этот пункт сразу ограничит конструкторов в возможности применения подножного материала из заветных коробочек. Далее, внешнее запоминающее устройство, карточка или магнитофон (сделано) - пока не важно. Часы реального времени (сделано). Дисплей, клавиатура - можно собрать как составляющую часть, а можно (если не делать игровой компьютер) как внешний терминал (сделано), либо взяв за основу девайс Гранта Сирла (https://searle.x10host.com/MonitorKeyboard/index.html), Дэрила Риктора (http://sbc.rictor.org/vid3.html), Стана Печала (http://www.serasidis.gr/circuits/TV_terminal/Small_TV_terminal.htm), либо готовый в продаже (http://www.microvga.com/ , задушив свою жабу :).

 

Карта памяти (по состоянию разработки 25.10.2014)

0000 - 7FFF Основное ОЗУ 32К
8000 - BBFF ОЗУ 15К страничками по 1К
BC00- BC3F

RTC MM58167AN

48128 - счетчик миллисекунды

48129 - счетчик сотни и десятки миллисекунд

48130 - счетчик секунды

48131 - счетчик минуты

48132 - счетчик часы

48133 - счетчик день недели

48134 - счетчик день месяца

48135 - счетчик месяц

48136 - память миллисекунды

48137 - память сотни и десятки миллисекунд

48138 - память секунды

48139 - память минуты

48140 - память часы

48141 - память день недели

48142 - память день месяца

48143 - память месяц

48144 - регистр статуса прерывания

48145 - регистр управления прерывания

48146 - сброс счетчиков

48147 - сброс памяти

48148 - статус бит

48149 - команда "Пуск"

48150 - прерывание Standby

48151 - тест

BC40 - BC7F CS1
BC80 - BCBF CS2
BCC0 - BCFF CS3
BD00 - BD3F CS4
BD40 - BD7F CS5
BD80 - BDBF CS6
BDC0 - BDFF CS7
BE00 - BE3F CS8
BE40 - BE7F CS9
BE80 - BEBF CS10
BEC0 - BEFF CS11
BF00 - BF3F CS12
BF40 - BF7F

таймер 580ВИ53

(таймер 0 - 48960D, таймер 1 - 48961D, таймер 2 - 48962D, РУС - 48963D

BF80 - BFBF порт в/в 580ВВ55

порт А - 49024D, порт В - 49025D, порт С - 49026D, РУС - 49027D

BFC0 - BFFF последовательный порт 68В50

регистр статуса - 49088D, регистр данных - 49089D

С000 - FFFF ПЗУ 16К

 

Готовый контроллер

 

Без установленных в панельки чипов, дабы показать расположение блокировочных конденсаторов и 555АП6

 

Спинка контроллера

 

Стартовый экран

 

Архив прошивки с исходниками

 

На главную/Index