"Аюша" - контроллер-компьютер на процессоре 6502 |
Успех заново возрождённого компьютера
"ЮТ-88", любовь к процессору 6502,
которому очень не повезло в нашей стране, необходимость наличия программируемого
контроллера для различных целей и просто желание попаять, привело к созданию
этого проекта. Сразу оговорим несколько вопросов, дабы к ним более не
возвращаться.
1. Зачем плодить ещё одну схему, коих и так достаточно? Ответ - хотелось что-то
создать с нуля. Ну почти с нуля. Как в железном плане, так и в программном.
2. Почему 6502? Ответ - большинство подобных схем построено на процессорах 8080,
Z80, PIC/Atmel-контроллерах и прочих ардуинах, а 6502 как-то в наших краях не
особо известен. Однокристалки и ардуины - это в каком-то смысле скучно, 8080
требует трёх напряжений питания, Z80... ну просто не хочется. Делать плату типа
Maximite также нет интереса, ибо это вещь в себе, не имеющая возможностей к
расширению.
Как процессор, 6502 наголову превосходит любой восьмибитник, несмотря на низкую
тактовую частоту. Он имеет 258 регистров памяти (конечно, 256 из них - внешние)
и простую систему команд. Микропроцессорный комплект 65хх настолько мощный и
универсальный, что 580-я серия смотрится тупо убогой.
Конечно, 6502 несколько необычен с точки зрения современного программиста. Он
имеет страничную адресацию памяти, порты ввода/вывода, отражённые на память (а
не в отдельном адресном поле, как в 8080 и Z80), некоторые ограничения в
применении команд переходов, но лёгкость программирования и множество
наработанных программ превалируют. Да, мы пролетаем
мимо СР/М, но так ли это важно?
3. Зачем ещё один комп без софта? Ответ - софта на 6502 более чем достаточно.
Плюс планируемая схема должна работать под управлением обычного Бейсика, что,
согласитесь, гораздо удобнее, нежели использование Си-подобных языков и
Ассемблера. Скорость работы? Достаточная для большинства возможных приложений.
4. Если нужен управляющий контроллер, почему бы не взять *дуину/Малину? Ответ -
давайте сразу определимся с вашей ориентацией. Если вам хочется сразу подёргать
пины или поморгать светодиодиком, то можете закрыть эту страницу и покупать
собранный контроллер. Мне же интересно знать не только софт, но и железо, на
котором он работает.
Оговорюсь, что контроллер собирался из "подножного корма", что было в
запасниках. Поэтому прошу относится к нему не как к окончательной конструкции, а
как к сборнику идей, воплощённых в железе. Поэтому схема может внешне казаться
сырой, некоторые моменты решены "в лоб", кое-что вылезло при сборке и наладке,
следовательно на таких моментах я буду отдельно акцентировать внимание.
Соответственно и печатной платы не разрабатывалось, а просто использовалась макетка.
Вот на этом и закончим дискуссию.
В качестве основы была использована схема простого компьютера Гранта Сирла (https://searle.x10host.com/6502/Simple6502.html).
Однако в опубликованном виде эта схема, равно как и различные одночиповые
поделки типа Максимайта, годна разве что только "на поиграться", более ни на что
полезное схема не годится. То есть для пользы дела контроллер не только должен
общаться с внешним миром посредством терминала, но и ощущать его и пытаться этим
миром управлять. Значит к простой схеме необходимо добавить какие-то порты
ввода-вывода. Это те же самые пины и светодиодики.
Далее, оригинальная схема не блещет экономией памяти, имея упрощённый декодер
устройств ввода-вывода. Да, это недостаток процессора, о чём упоминалось выше,
значит немного усложним декодер (это как раз и вылезло боком при настройке).
Заодно и памяти добавим.
Возникало желание собрать контроллер как из кубиков, из нескольких частей, дабы
иметь возможность сразу использовать собранное и добавлять что-то новое по мере
необходимости. Но, с одной стороны вид полупустой макетки, с другой стороны
желание сразу получить что-то полезное, заставило более тщательно проработать
всю концепцию.
Итак, сборка контроллера будет происходить в несколько этапов.
1. Начальный блок. Имеет процессор, 47К ОЗУ, 16К ПЗУ, асинхронный порт, декодер
адресов, порт ввода-вывода и трёхканальный таймер. На этом этапе можно не только
протестировать блок с помощью терминальной программы и поиграться со встроенным
Бейсиком, но уже и подключить контроллер к чему-либо, написав управляющую
программу, или использовать в качестве звукового генератора.
На этом этапе проектирования пришлось подумать о выборе чипа портов
ввода-вывода. Выбор был широк: 580ВВ55, 6522 и AY-3-8910. Сначала склонялся к
последнему, ибо получаем два порта плюс навороченный звуковой генератор. Но
сложность программирования генератора и невозможность использования его для
целей, к примеру, синхронизации высокочастотного синтезатора, заставила временно
его отставить в сторону. Чип 6522 просто сказка, это и два параллельных порта, и
таймер, и последовательная передача данных, и софта под него просто немеряно..,
но со всем этим богатством необходимо долго разбираться, плюс к началу сборки
этих чипов у меня ещё не было в наличии. Пришлось также учесть, что если кто-то
и решит собрать этот проект для себя, то такого красавца, как 6522, под руками
отечественного пользователя может и не оказаться. Посему остановился на кондовом
580ВВ55, получив три порта ввода-вывода с простейшим вариантом программирования
оных. Таймер был компенсирован таким же кондовым 580ВИ53, разведённым с учётом
возможного каскадирования счётчиков (цели могут быть в дальнейшем разные).
2. Второй этап. Подключение внешнего дисплея и клавиатуры. Можно просто собрать
терминальный клиент на двух AVR'ках дабы забыть о подключении к "нормальному"
компьютеру для программирования контроллера, но, если контроллер планируется
перевести из статуса "контроллер" в статус "компьютер", лучше использовать
контроллер 6538 для видеовывода на обычный PAL'овский телевизор и 6522 в
качестве контроллера матричной клавиатуры или PIC/AVR-переходники для
ASCII-клавиатуры. Будем иметь псевдографический экран, полностью совместимый с
игровой приставкой "Денди". А дополнив собранное AY-3-8910 можно получить
нормальную игровую машинку конца 80-х. Хотя, если планируется всего лишь
отвязать котроллер от внешнего "программатора", то можно использовать одно/двухстрочные
ЖКИ-дисплеи и клавиатуру из малого числа клавиш (сделан внешний терминал с
кассетным интерфейсом).
Вопрос сохранения/ввода данных пока обдумывается. Можно вспомнить о кассетном
магнитофоне (сделано), можно собрать SPI65-девайс для подключения SD/MMC-карт. Но уже на
первом этапе загружать и сохранять программы в текстовом виде возможно через
терминал.
Таким образом, от обычного контроллера вполне возможно дойти до нормального
компьютера начала 90-х годов, с лёгкостью портируя на него множество известных
игровых и прикладных программ.
1. 6502 SBC - описание схемы и фото собранного экземпляра (обновлено 25.10.14)
3. Модификация узла выборки ОЗУ
4. Модификация узла СОМ-порта для скорости 300 Бод
5. 300 Бод терминал и кассетный интерфейс (обновлено 26.08.14)
6. ASCII - клавиатура (обновлено 10.08.14)
8. Программное обеспечение - встроенное и утилиты (обновлено 30.04.2015)
Небольшое видео процесса загрузки программы на "Аюшу" и работа с ней (конвертация
HEX в DEC и обратно):
http://www.youtube.com/watch?v=E2U7gbjzMpI
Ссылки к прочтению.
2. http://wilsonminesco.com/6502primer/65tutor_intro.html
3. http://www.obelisk.demon.co.uk/6502/index.html
4. http://pscd.ru/info/2183-programmirovanie-processora-6502-programming-the-6502.html
5. http://www.emuverse.ru/wiki/MOS_Technology_6502
6. http://www.emuverse.ru/downloads/datasheets/processors/6502/UM6502.pdf
7. http://www.emuverse.ru/downloads/datasheets/processors/6502/W6502S.pdf
8. http://www.atariarchives.org/mlb/
9. http://zx.pk.ru/showthread.php?t=23276 - обсуждение данной схемы.
10. http://www.nedopc.org/forum/viewtopic.php?t=10721 - обсуждение схемы на ином форуме
11. Статья на Хабре с описанием контроллера
12. Статья на Хабре с описанием терминала
13. Конкурсная статья на Полигоне Призраков
Powered by WebRing.