KIM Uno - a 6502 KIM-1 Computer on Arduino

MOS Technology / Commodore / Apple II / NES etc.

Moderator: Lavr

User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

KIM Uno - a 6502 KIM-1 Computer on Arduino

Post by Lavr »

В общем как-то оно так случилось, что по совокупности факторов меня зацепил один очень интересный проект:
KIM Uno - a 6502 KIM-1 Computer on Arduino
KIM_Uno.gif
Этому проекту уже примерно около 4-х лет, насколько я понял, и он успел уже широко распростаниться, причем
есть уже и клоны, и разные модификации:

KIM Uno - a 6502 KIM-1 Computer on Arduino
https://www.instructables.com/id/KIM-Un ... n-Arduino/

KIM Uno - a 6502 KIM-1 Computer on Arduino
https://create.arduino.cc/projecthub/ob ... ino-e5c82c

KIM Uno - a modern KIM-1 clone
http://obsolescence.wixsite.com/obsoles ... mary-c1uuh

А тут так вышло, что я на неделе был в магазине Радиодетали, и пока в очереди стоял, разглядывал на витрине
эти самые Ардуины и всякую шнягу к ним. Почему-то отложилась в голове цена Ардуины-мини - 250 рублей,
а на следующий день я поинтересовался на работе, кто пользует Ардуины, и мне сказали, что это совсем божеская
цена, с доставкой из Китая к нам обходится где-то в 230 р.

Второй очень приятный момент был, что проект работает на любой Ардуине, причем без кнопок и индикаторов.
Он дублирует управление и вывод через COM-порт, то есть результат можно увидеть сразу! :kruto:

Ну и в-третьих, мне почему-то очень захотелось увидеть вживую эти самые текстовые шахматы! :lol:

В общем, купил я себе 2 Ардуины: мини и нано, сутки у меня ушло, чтобы почитать сайты по Ардуине, поскольку
я хотел себе Arduino IDE поставить на оба ноутбука - под Windows 98 и Windows 7.

И вот что получилось в итоге, хотя шаманить и исполнить пляску с бубнами пришлось как под Windows 98, так и под Windows 7.
KIM_Uno-0024.jpg
Я, честно говоря, не поклонник Ардуин, так что пока шаманил, мнение моё о них именилось даже в более
худшую сторону:
тестовый код Blink - поморгать светодиодом с интервалом 1 сек на их С++ занимает аж 1414 байт :exclaim: :o
Но... пришлось признать - зато это быстро. 8)

 КОД Blink

Code: Select all

/*
 * Blink
 *
 * The basic Arduino example.  Turns on an LED on for one second,
 * then off for one second, and so on...  
 *
 * http://www.arduino.cc/en/Tutorial/Blink
 */

int ledPin = 13;                // LED connected to digital pin 13

void setup()                    // run once, when the sketch starts
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
}

void loop()                     // run over and over again
{
  digitalWrite(ledPin, HIGH);   // sets the LED on
  delay(1000);                  // waits for a second
  digitalWrite(ledPin, LOW);    // sets the LED off
  delay(1000);                  // waits for a second
}

Кто захочет повторить, прилагаю ту прошивку, которую я проверил сам:
KIMUNO_IDE16.zip
Для того, чтобы было понятно, как работать с таким KIM Uno - желательно скачать его мануал:
https://halckemy.s3.amazonaws.com/uploa ... l%20v2.pdf

В этом мануале пишут, что полезно иметь и оригинальный мануал от KIM-1 Computer: :wink:
https://archive.org/details/KIM-1_Users_Manual

Ну а кто не хочет ничего этого делать - можно посмотреть видео про KIM Uno:

KIM Uno: a KIM-1 replica: https://www.youtube.com/watch?v=vyhMJKvCXgA

Building The KIM Uno Kit (KIM-1 Emulator): https://www.youtube.com/watch?v=G9FZrAwcUCE
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 & Microchess

Post by Lavr »

В общем-то, мне хотелось-таки сделать этот KIM Uno как автономный проект на батарейках.
Тут основная прелесть в том, что Atmega в Arduino работает в широком диапазоне питающих
напряжений, схемотехника очень проста - индикаторы, резисторы, кнопки и ничего лишнего.
А в ПЗУ этого KIM-1 Computer зашиты приятные вещи, кроме микрошахмат - собственно сам
монитор KIM-1 (говорят, что не хуже, чем более знаменитый Woz Monitor), также там есть
дизассемблер, мощный калькулятор для чисел с плавающей точкой, и еще кой какие утилиты.

Поэтому я сразу приобрел и 25 кнопок типа ПКН (у нас они по 10 р.) и два блока 7-сегментных
индикаторов я тоже приобрел (по 90 р. они у нас).
KIM_Uno-0025.jpg
Но случилась засада такая, что в проекте нужны индикаторы с общим анодом, а у нас есть
только с общим катодом в наличии, а с общим анодом - надо ждать под заказ. :-?

Я вообще очень ждать не люблю, поэтому взял блоки с общим катодом с той мыслью, что можно
пропатчить подпрограмму сканирования индикатора и кнопок, и уж совсем накрайняк - поставить
управляющие транзисторы, которые перевернут всё как надо для индикатора с общим катодом.
Правда, при этом теряется вся прелесть проекта - добавятся 14 транзисторов и еще 14 резисторов.

В общем я решил для начала посмотреть, как это впишется в схему KIM Uno на Arduino, для чего
схему чутка перерисовал, чтобы более понятно разобраться в алгоритме сканирования:

 CXEMA KIM Uno на Arduino
KIM_Uno-Arduino-Pro-Mini-sch.gif

После отрисовки стало понятно "что всё совсем непонятно"... :o

По крайней мере, обычно опрос нажатия клавиш происходит во время перебора знакомест индикатора,
но по этой схеме такой алгоритм никак не вырисовывался... :osad:

Выяснилось, что алгоритм автора несколько оригинален - он разделил эти два процесса, что несколько
странно: индикаторы подсвечиваются отдельно, потом порты быстро переключаются и отдельно
сканируются кнопки на предмет их нажатия.
Я не знаю, чего автор хотел таким трюком достичь - может ему библиотеки Ардуины не позволяли,
или это продиктовано индикатором с общим анодом (к "0" тянут сегменты, а не знакоместа), но
как-то я не очень был рад этому трюку - я делал такую задачу на К580ВМ80 + К580ВВ55 на частоте
2 МГц и на PIC16F84 на частоте 4 МГц, и знаю, что порой весьма непросто вписаться во времЯнки,
чтобы индикаторы заметно не моргали... Видимо, 16 (или 8 ) МГц Atmega здесь спасают. :-?

Также оказалось, что и на западе не у всех под рукой 7-сегментные индикаторы с общим анодом,
поэтому многие начали решать эту проблему изменением алгоритма сканирования, и выяснилось, что
оригинальный алгоритм не очень-то поддается правке. Всё-таки код на С++ и библиотеках Arduino IDE.
На ассемблере, я думаю, было бы проще...

В приложении - как некий Scott Lawrence разрешил для себя эту проблему, несколько изменив саму
схемотехнику подключения как индикатора, так и кнопок к KIM Uno.
KIM-Uno common-cathode.zip
И если погуглить - можно найти на GitHub библиотеку к Arduino IDE для индикаторов с общим катодом.
Я себе скачал код, но прямой ссылки не сохранил, к сожалению.
Есть только название: KIM Uno Common Cathode LED logic. И на GitHub таких проектов я нашел два.


P.S. Да, и забыл я сказать, что в качестве терминальной программы под Windows 7 я использовал
PuTTY.exe, поскольку под Windows 7 своих терминалок нет, Гипертерминал - уволили.
PuTTY есть в русской версии, я её пробовал - она хуже под Windows 7, лучше её старая
англоязычная версия - PuTTY-0.60.
Вобще терминалок много, но мне хотелось два качества: чтобы терминал открывался во весь
экран и не отсвечивал ничем лишним, и чтобы были настройки шрифта, и цвета фона и шрифта:
я хотел крупный зеленый моноширинный шрифт на черном фоне. PuTTY так умеет.
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 & Microchess

Post by Lavr »

Lavr wrote:Я не знаю, чего автор хотел таким трюком достичь...
Похоже, автор просто старался максимально приблизиться к схемотехнике оригинального KIM-1.
umf36.gif
У него как раз матрица клавиш опрашивается через 3 строки, см. KIM-1 - User Manual

И индикаторы 7-сегментного дисплея в KIM-1 используются с общим анодом:
umf35.gif

P.S. Кстати, документация на KIM-1 в хорошем html-качестве есть здесь: http://users.telenet.be/kim1-6502/
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 & Microchess

Post by Lavr »

Презабавные вещи вдруг узнаешь при попытке работы с винтажной техникой! :o

Этот самый KIM-1 в оригинале (да и его реплика KIM-Uno) умел работать в двух режимах:
Мode1: со своими 24 кнопками и семисегментными индикаторами;
Мode2: с внешним SERIAL TELEPRINTER (по инструкции так называется).

В Мode1 функционал весьма прост и ограничивается служебными кнопками - это я быстро проверил.

Перешел в Мode2. А там по мануалу, то надо нажать клавишу [LF] - Line Feed, то еще более странную
клавишу [RUB OUT]. :roll:
Ну и где мне их нажать? :lol:

Поискал по интернету... типовой SERIAL TELEPRINTER для KIM-1 в то время был вот такой ящичек:
Teletype ASR-33
asr33_2.jpg
Он же - без "верхней одежды":
asr33_5.jpg
Так вот у него клавиши [LF] и [RUB OUT] в наличии были:
Teletype_ASR-33.jpg
И расположены удобно - кучкой рядышком. Вот в мануале KIM-1 всё на них и завязано... Нажмите
[RUB OUT]... потом [CR]... а если надо вернуться назад - [LF]... :o

Ну с [RUB OUT] я быстро разобрался: в нынешних клавиатурах - это [Backspace].
Rubber is the British English word for eraser.
А вот [LF] на современных клавиатурах больше нет. :osad:
Но если очень надо, то это - только [Ctrl]+[J]. Кстати, [Ctrl]+[М] - это [CR].
А еще есть [Ctrl]+[G] - это BEL...
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 & Microchess

Post by Lavr »

В общем не так всё тривиально при работе с этим самым KIM-UNO, и чтобы никто не ковырялся
в Интернете или в разных мануалах при повторении этой конструкции, я решил сделать небольшую
справку на русском, которая должна все основные манипуляции с KIM-UNO прояснить.

На рисунке показаны: стандартная клавиатура отладочной платы оригинального KIM-1, соответствующая
ей раскладка клавиатуры KIM-UNO и карта памяти KIM-UNO с загруженными программами в ПЗУ.
KIM_kbd_mem.gif
Клавиатура включает в себя в общей сложности 23 клавиши, также имеется один движковый переключатель [SST].
В зависимости от выполняемой программы, клавиши KIM-UNO имеют разное назначение, и оно указано в соответствующих цветовых полях, на которые разделено поле клавиши.
KIM_kbd_MON.gif
Как KIM-1, так и KIM-UNO могут работать в двух режимах: Mode 1 и Mode 2.

Mode 1: работа с 23-мя клавишами пульта и с семисегментным дисплеем. KIM-UNO также дублирует
вывод на семисегментный дисплей через последовательный интерфейс терминалу. KIM-UNO может в
этом режиме принимать команды с клавиатуры терминала, при этом соблюдается соответствие нажатия
клавиш терминала клавишам KIM, как указано в таблице:
[AD] — Ctrl-A, [DA] — Ctrl-D, [PC] — Ctrl-P, [RS] — Ctrl-R, [GO] — Ctrl-G, [ST] — Ctrl-S,
SST ON/OFF — ']'/'['
(на терминале выдается сообщение).

Mode 2: работа под управлением клавиатуры терминала, и вывод данных — только на терминал.

Переключение между режимами Mode 1 и Mode 2 в KIM-UNO осуществляет клавиша [Tab].
Переключение возможно в любой момент.
KIM_kbd_TTY.gif
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

KIM Uno в Proteus

Post by Lavr »

Lavr wrote:Также оказалось, что и на западе не у всех под рукой 7-сегментные индикаторы с общим анодом,
...
В приложении - как некий Scott Lawrence разрешил для себя эту проблему, несколько изменив саму
схемотехнику подключения как индикатора, так и кнопок к KIM Uno.
KIM-Uno common-cathode.zip
При более скурпулёзном анализе оригинального текста обслуживания 7-сегментного индикатора
с общим анодом, и программно-аппаратного решения, от Scott Lawrence выяснилось, что его метод
несколько не совсем удачный, о чем он и сам пишет, что индикатор у него "несколько помаргивает".

Я посмотрел, что ничего сверхъестественного в их кодах на С++ нет, поэтому, видимо, надо самому попробовать
написать подпрограмму сканирования клавиатуры и индикатора, тем более, что я это делал многократно,
правда, под ассемблером К580ВМ80 на 2 МГц.

Image

Но тут выяснилась пренеприятнейшая вещь: этa самая хваленая и кроссплатформенная Arduino IDE,
как оказалось, не имеет собственного отладчика. :o А отлаживать свою программу на форумах Arduino
советуют, посылая в интересующих точках данные по RS-232 интерфейсу, и останавливая программу
на ожидание символа от RS-232 интерфейса! :roll:
В общем, почти как в древнем ВАСИКЕ, только в нём было PRINT... , а в Arduino - Print.Serial( ... ). :-?

Но что можно отладить через Print.Serial( ... ), если обслуживание клавиатуры и динамическая индикация -
задачи чисто аппаратные, причем в реальном времени? :-?

Я "пошуршал" по интернету и выяснил, что народ подобные вещи приспособился решать через Proteus.
Есть библиотеки Proteus позволяющие моделировать аппаратные проекты на Arduino, причем
для этого даже не понадобилось писать DLL-библиотеку, модели Arduino используют родную AVR2.DLL,
поддерживающую ATMega168, ATMega328 etc.

Собственно, эти модели Arduino в Proteus - не более, чем красивая обёртка вокруг AVR2.DLL. :lol:
Arduino-Library-For-Proteus.zip
Но запустить проект Arduino они помогают, хотя и на самих моделях ATMega168, ATMega328 можно
это сделать, но придется муторно пересчитывать выводы портов - Arduino использует нумерацию
выводов по своей платке.

В общем для начала я решил проблему индикатора с общим катодом, не трогая пока исходный код, следующим
образом - введя инверторы (можно ввести транзисторы, но это не принципиально):
Duino3.gif
К моему глубочайшему удивлению, под Proteus 7.7 работает просто замечательно! (под Windows 7, Intel Atom 1.8 ГГц.)
К удивлению - поскольку Proteus все огрехи в процедурах динамической индикации показывает
весьма "откровенно", поскольку он медленный, и то, что не видно глазом обычно, под Proteus-ом видать... :wink:
Значит автор KIM Uno написал обслуживание клавиатуры и динамическую индикацию весьма грамотно!

Здесь файлы проекта KIM Uno под Proteus:
Duino3.zip
В общем, есть теперь у меня хорошая связка: компилятор C++ от Arduino IDE и аппаратный отладчик - Proteus ISIS.
(Кстати говоря, насколько я понял, разбираясь со всем этим хозяйством: так называемая кроссплатформенная
Arduino IDE, написанная на "жабе", это фактически - тоже "обёртка" вокруг WinAVR - он в пакете есть.)

Что ж... продолжим наши программно-аппаратные игры, благо теперь есть с чем... :wink:
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: KIM Uno - a 6502 KIM-1 Computer on Arduino

Post by Lavr »

Lavr wrote:я хотел себе Arduino IDE поставить на оба ноутбука - под Windows 98 и Windows 7.
...
...шаманить и исполнить пляску с бубнами пришлось как под Windows 98, так и под Windows 7.
Несколько слов про "шаманство" и "пляску с бубнами" в связи с установкой Arduino IDE, поскольку смотрю я -
многие сейчас наступают на одни и те же грабли, на которые и я наступил в процессе...

Эту самую Arduino IDE обычно можно взять здесь: https://www.arduino.cc/en/Main/OldSoftwareReleases
Там весьма много версий этого пакета по следующей причине: разные версии по-разному стабильно
или нестабильно работают под разными ОС, поэтому есть возможность подобрать себе подходящую -
это во-первых.

Под Windows 7 я поставил себе arduino-1.6.7, и глюков пока не наблюдал. Хотя пишут, что arduino-1.6.5
более стабильная версия, но сейчас уже и arduino-1.8.х в ходу, поэтому я просто остановился на том, что
работает у меня нормально.

Во-вторых, в каждом пакете Arduino IDE есть свои драйверы для USB -> RS-232 для прошивки плат Arduino.
И вот в этой ситуации, бывает, что приходится вытаскивать драйверы для более новой версии Arduino IDE из
более старой версии.

Под Windows 98 я остановился на версии arduino-1.0.5, хотя она явно сделана для Windows ХР,
и некоторые не столь важные вещи у нее не срабатывают. К примеру, свой HTML-HELP Arduino IDE вызывает
через CMD.EXE, а в Windows 98 его нет. :wink:
Но HTML-HELP можно и самому браузером посмотреть, а компилирует версия arduino-1.0.5 вполне нормально,
к тому же имеет русскоязычную локализацию. А драйверы меня не беспокоят, поскольку на ноутбуке под
Windows 98 у меня есть реальный, физический, настоящий COM-порт.

Ну и последнее, возможно, самое главное... Большинство дистрибутивов Arduino IDE можно скачать в двух вариантах:
1. Вариант с инсталляцией;
2. Вариант - распаковать архив в папку и начинать работать.

Я обычно предпочитаю 2-й вариант, но в варианте с инсталляцией есть опция - установить сразу драйвер
USB -> RS-232. Поэтому для Windows 7 я решил сразу драйвер этот установить.
И вот тут случился самый интересный фокус, к которому я был в принципе готов, но всё же он мне удовольствие
несколько испортил... :-?

Когда я подключил свою Arduino Nano к ноутбуку под Windows 7, то оказалось, что он её не видит. :o
20000000.gif
И вместо прошивки KIM Uno и экспериментов с ним пришлось вернуться к драйверам, хотя я свято был
уверен, что драйверы-то USB -> RS-232 я уже установил из дистрибутива Arduino IDE! :roll:

Оказывается (и я об этом заранее знал), в Россию в основном поступают китайские Arduinо, а наши
китайские друзья установили в них свои микросхемы преобразователя USB -> RS-232 - CH340G.
А для этой ИС необходим другой драйвер USB -> RS-232.
Но и это еще не всё... может быть и совсем другая микросхема, и тогда драйверы на неё надо искать
на сайте производителя, или частым бреднем гугля прошаривать интернет.

Здесь советуют посмотреть на надписи на этой самой ИС (если они есть :wink: )... на моей платке я нашел
маркировку 340H720 и решил, что, возможно, драйверы USB -> RS-232 для CH340G подойдут.
Они и подошли...
DRIVER-CH340G.rar
DRIVER-CH340G.zip
Драйвер в архивах один и тот же, но устанавливается по-разному.

Подробнее об этом можно прочитать здесь: Драйвер для arduino CH340G
You do not have the required permissions to view the files attached to this post.
iLavr