nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 23 Sep 2018 15:55



Reply to topic  [ 7 posts ] 
KIM Uno - a 6502 KIM-1 Computer on Arduino 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
В общем как-то оно так случилось, что по совокупности факторов меня зацепил один очень интересный проект:
KIM Uno - a 6502 KIM-1 Computer on Arduino
Attachment:
KIM_Uno.gif
KIM_Uno.gif [ 111.21 KiB | Viewed 468 times ]
Этому проекту уже примерно около 4-х лет, насколько я понял, и он успел уже широко распростаниться, причем
есть уже и клоны, и разные модификации:

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

KIM Uno - a 6502 KIM-1 Computer on Arduino
https://create.arduino.cc/projecthub/obsolescence/kim-uno-a-6502-kim-1-computer-on-arduino-e5c82c

KIM Uno - a modern KIM-1 clone
http://obsolescence.wixsite.com/obsolescence/kim-uno-summary-c1uuh

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

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

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

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

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

 КОД Blink
Code:
/*
 * 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
}

Кто захочет повторить, прилагаю ту прошивку, которую я проверил сам:
Attachment:
KIMUNO_IDE16.zip [33.27 KiB]
Downloaded 13 times

Для того, чтобы было понятно, как работать с таким KIM Uno - желательно скачать его мануал:
https://halckemy.s3.amazonaws.com/uploads/pdf_file/file/150943/KIM%20Uno%20Manual%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

_________________
iLavr


31 Aug 2018 23:23
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
В общем-то, мне хотелось-таки сделать этот KIM Uno как автономный проект на батарейках.
Тут основная прелесть в том, что Atmega в Arduino работает в широком диапазоне питающих
напряжений, схемотехника очень проста - индикаторы, резисторы, кнопки и ничего лишнего.
А в ПЗУ этого KIM-1 Computer зашиты приятные вещи, кроме микрошахмат - собственно сам
монитор KIM-1 (говорят, что не хуже, чем более знаменитый Woz Monitor), также там есть
дизассемблер, мощный калькулятор для чисел с плавающей точкой, и еще кой какие утилиты.

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

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

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

 CXEMA KIM Uno на Arduino
Attachment:
KIM_Uno-Arduino-Pro-Mini-sch.gif
KIM_Uno-Arduino-Pro-Mini-sch.gif [ 165.34 KiB | Viewed 447 times ]
После отрисовки стало понятно "что всё совсем непонятно"... :o

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

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

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

В приложении - как некий Scott Lawrence разрешил для себя эту проблему, несколько изменив саму
схемотехнику подключения как индикатора, так и кнопок к KIM Uno.
Attachment:
KIM-Uno common-cathode.zip [121.67 KiB]
Downloaded 10 times

И если погуглить - можно найти на 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 так умеет.

_________________
iLavr


01 Sep 2018 07:58
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Я не знаю, чего автор хотел таким трюком достичь...

Похоже, автор просто старался максимально приблизиться к схемотехнике оригинального KIM-1.
Attachment:
umf36.gif
umf36.gif [ 15.1 KiB | Viewed 431 times ]

У него как раз матрица клавиш опрашивается через 3 строки, см. KIM-1 - User Manual

И индикаторы 7-сегментного дисплея в KIM-1 используются с общим анодом:
Attachment:
umf35.gif
umf35.gif [ 26.36 KiB | Viewed 431 times ]



P.S. Кстати, документация на KIM-1 в хорошем html-качестве есть здесь: http://users.telenet.be/kim1-6502/

_________________
iLavr


01 Sep 2018 15:55
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Презабавные вещи вдруг узнаешь при попытке работы с винтажной техникой! :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
Attachment:
asr33_2.jpg
asr33_2.jpg [ 43.05 KiB | Viewed 424 times ]

Он же - без "верхней одежды":
Attachment:
asr33_5.jpg
asr33_5.jpg [ 56.55 KiB | Viewed 424 times ]

Так вот у него клавиши [LF] и [RUB OUT] в наличии были:
Attachment:
Teletype_ASR-33.jpg
Teletype_ASR-33.jpg [ 38.72 KiB | Viewed 424 times ]

И расположены удобно - кучкой рядышком. Вот в мануале KIM-1 всё на них и завязано... Нажмите
[RUB OUT]... потом [CR]... а если надо вернуться назад - [LF]... :o

Ну с [RUB OUT] я быстро разобрался: в нынешних клавиатурах - это [Backspace].
Quote:
Rubber is the British English word for eraser.

А вот [LF] на современных клавиатурах больше нет. :osad:
Но если очень надо, то это - только [Ctrl]+[J]. Кстати, [Ctrl]+[М] - это [CR].
А еще есть [Ctrl]+[G] - это BEL...

_________________
iLavr


01 Sep 2018 21:04
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
В общем не так всё тривиально при работе с этим самым KIM-UNO, и чтобы никто не ковырялся
в Интернете или в разных мануалах при повторении этой конструкции, я решил сделать небольшую
справку на русском, которая должна все основные манипуляции с KIM-UNO прояснить.

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

Как 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].
Переключение возможно в любой момент.
Attachment:
KIM_kbd_TTY.gif
KIM_kbd_TTY.gif [ 22.63 KiB | Viewed 403 times ]

_________________
iLavr


02 Sep 2018 12:21
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
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:
Attachment:
Arduino-Library-For-Proteus.zip [4.9 KiB]
Downloaded 7 times

Но запустить проект Arduino они помогают, хотя и на самих моделях ATMega168, ATMega328 можно
это сделать, но придется муторно пересчитывать выводы портов - Arduino использует нумерацию
выводов по своей платке.

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

Здесь файлы проекта KIM Uno под Proteus:
Attachment:
Duino3.zip [102.34 KiB]
Downloaded 10 times

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

Что ж... продолжим наши программно-аппаратные игры, благо теперь есть с чем... :wink:

_________________
iLavr


07 Sep 2018 00:39
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
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
Attachment:
20000000.gif
20000000.gif [ 43.05 KiB | Viewed 317 times ]

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

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

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

Подробнее об этом можно прочитать здесь: Драйвер для arduino CH340G

_________________
iLavr


07 Sep 2018 10:20
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 7 posts ] 

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.