
Процессор 6502 существует более 40 лет и до сих пор используется в ряде встроенных систем. Компания WDC продолжает выпускать 65C02 и периферийные микросхемы серии 65Cxx. Автор обнаружил, что теперь они доступны и в корпусах PLCC и QFP, но эти варианты микросхем используются редко. Микросхемы же в DIP-корпусах более недоступны, поскольку спрос со стороны одних лишь самодельщиков слишком мал. Автор решил сделать самый маленький одноплатник на 6502, какой толь��о сможет. Не исключено, что самый маленький из известных самодельных одноплатников на этом процессоре (несамодельные бывают и меньше, например, Тамагочи). В результате получилось устройство, к которому можно при желании разработать наручный корпус с ремешком. Дисплей взят от Nokia 5110, написана оболочка с красивым интерфейсом, и получились, возможно, единственные смарт-часы на 6502.
В часах установлены: процессор 65C02 с тактовой частотой в 8 МГц, микросхема 65C22, управляющая ЖКИ и опрашивающая кнопки на плате и внешнюю клавиатуру, дисплей от Nokia 5110 (84х48 пикселей), 32 кБ статического ОЗУ, 16 кБ ПЗУ в адресном пространстве. Напряжение питания — 3,3 В.
И самое главное: в качестве док-станции к разъёму на плате можно подключать матрицу клавиатуры от Commodore 64, получая что-то похожее на Seiko UC-2000 (обзор на Хабре):

Схема и топология печатной платы составлены в KiCad. Размеры двусторонней платы — 3х1,5 дюйма. Все компоненты — SMD, кроме PLCC-панельки, а также разъёмов для клавиатуры и ЖКИ.


Топология на иллюстрации — не в масштабе. Внешний вид платы до сборки:


После:


Архив (схема, платы, прошивка, и т.п.)
На часах можно запускать несколько встроенных приложений. Одно из них, G'Mon (Generic Monitor), представляет собой основной инструмент разработки и отладки. Он позволяет просматривать и редактировать содержимое памяти отдельными ячейками и фрагментами, переходить к программам, заполнять участки ОЗУ заданным байтом, перемещать фрагменты по адресному пространству. Версия монитора, применённая в часах — упрощённая, чтобы кроме неё в ПЗУ поместился EhBasic. Он туда едва влез, осталось всего ~100 свободных байт. Интерпретатор переделан таким образом, что его удалось объединить с ядром. Оно, в свою очередь, содержит все подпрограммы инициализации, работы с внешними интерфейсами, а также взаимосвязи всего имеющегося ПО. И ещё одно приложение — основное меню.
Значительный объём ядра занимает код, взаимодействующий с ЖКИ от Nokia 5110 по программно реализованному протоколу SPI через 6522. Подпрограммы WriteBYTE и Command отправляют на ЖКИ, соответственно, графические данные и команды. Поскольку аппаратного текстового режима нет, написаны процедуры отправки на экран символов. Знакогенератор хранится в ПЗУ и представлен двумя таблицами поиска: одна для старшего байта, другая — для младшего. Вместе они указывают на абсолютное положение начального байта знака в ПЗУ. Подпрограмму Write следует запускать после записи ASCII-кода в аккумулятор процессора, при этом он также используется в качестве координаты X для таблиц поиска. Подпрограмма вначале записывает ASCII-код в буфер экрана в памяти. Затем она ищет данные соответствующего тайла и устанавливает на него указатель. Выведя на дисплей 8 последовательных байт от указателя, она вызывает подпрограмму CCheck. Та программно проверяет положение курсора, и если экран заполнен, вызывает подпрограмму Scroll, смещающую изображение на одну текстовую строку. Поскольку чтение из контроллера ЖКИ автор не реализовал, текст индексируется согласно положению курсора и записывается в буфер в памяти. Подпрограмма Scroll выводит на экран три нижние строки из буфера в три верхние строки на ЖКИ, затем нижнюю строку заполняет пробелами. Оставшаяся подпрограмма для работы с ЖКИ — CReturn. Она ищет черех таблицу поиска начальное положение следующей строки, и если текущая строка — не нижняя, увеличивает положение курсора на единицу. Если строка нижняя — вызывает процедуру Scroll, и лишь затем завершается.
Клавиатура опрашивается через 6522 подпрограммой GetKey. Она считывает матрицу клавиатуры построчно и записывает байты в память. Если какие-либо биты оказываются нулевыми, она через таблицу поиска определяет ASCII-код нажатой клавиши. В основном код не содержит циклов, чтобы работать максимально быстро. Подпрограммы для преобразования заданных бит в индексы не используют таблиц поиска, но в результате код получился довольно крупным и малоэффективным.
Видео:
Автор больше не работает над этой прошивкой, он переключился на другие проекты. Он надеется, что код пригодится желающим управлять ЖКИ от Nokia 5110 с одноплатника на 6502. Соответствующие подпрограммы легко поддаются переносу в другое ПО. Важнейшими из них являются Write, Write_NS, Command, WriteBYTE, LCDInit, LCDClear, CCheck, CCheck_NS, CReturn, Scroll и SETCursor. Другие полезные подпрограммы — LCDHome и WriteBMP. В памяти необходимо разместить переменные LCDCursor, GTmp, GTmp5 и GTmp6, а также таблицу Screen длиной 84 байта. Помимо них, необходимы таблицы поиска CRTbl, CTableX и CTableY, а также растровые изображения Char и Char2 со всеми тайлами.
Если вы хотите создать другие наборы тайлов, используйте шаблоны из папки Assets. В GIMP экспортируйте растровое изображение в файл .data в формате RGB (не RGBX). На файл .pal внимание не обращайте, а файл .data поместите в папку BitConvert из архива. Запустите Convert.sh имяфайла.data для получения файла FONT.bin, который и будет набором тайлов.