Ретро-компьютер (BASIC) на STM32
UPDATE:
PC приложение (под Линукс):
OK после операций с SD картой:
UPDATE:
Работа с SD-картой:
UPDATE:
Работают SAVE и LOAD Бейсик-программ на SD-карточку. Ниже скриншоты загрузки программы TEST.BAS и трассировка запуска из тестовой UART-консоли:
Еще около 8000 байт во флеш-памяти для разных улучшалок прошивки:
** Programming Finished ** ** Verify Started ** ... verified 55744 bytes in 0.836388s (65.086 KiB/s) ** Verified OK ** ** Resetting Target **
TODO список:
Изменение названия Stm32BASIC на stm32f1BASICDoneРефакторинг кодаDoneПоддержка SD карточкиDone- Скроллинг программы кнопками курсора
- Выкладывание проекта в Гитхаб
- Разработка печатной платы и заказ первой партии плат
--------------------------------- Далее архив -------------------------------
UPDATE:
Подзаточил код stm32BASIC до состояния работы с клавиатурой PS2:
UPDATE:
Кнопочная клавиатура работает. На очереди - SD-карточка
Прогнал тест 8-ферзей на Бейсике, который, напомню, на Arduino-Nano занял 3.4 секунды. Результат на stm32f1: 0.8 секунды или примерно в 10 раз быстрее МК161 (измерял ручным секундомером, не timestamps). Далее под катом старый текст про NodeMCU.
==========================================================
Cей эксперимент задвинут в дальний ящик из-за своеобразного подхода архитектуры esp8266 к работе с памятью. Разбираться, как выравнивать работу с данными разной размерности в памяти мне лень.
Архив --------------------------------------------
Попробовал сбилдить Ардуино-Васик под сабж (в конфигурации Serial Terminal Input), выделив под Васик 32Кб.
Выглядит многообещающе:
Sketch uses 268212 bytes (25%) of program storage space. Maximum is 1044464 bytes. Global variables use 67280 bytes (82%) of dynamic memory, leaving 14640 bytes for local variables. Maximum is 81920 bytes
В общем, надо I2C подзапилить и подключить к дисплею.
UPDATE: Навскидку дисплей от NodeMCU не заработал. Скорее всего, проблема в 3в питании - дисплею надо 5. Либо NodeMCU у меня проблемная, доберусь до осцилла, проверю
UPDATE_2: Дисплей подключился (таки надо 5 вольт ему), Васик стартовал:
Однако при попытке ввести строку Васика с сериал терминала 8266 выпадает в exception:
Fatal exception 9(LoadStoreAlignmentCause): epc1=0x402036f8, epc2=0x00000000, epc3=0x00000000, excvaddr=0x3ffeef3d, depc=0x00000000 Exception (9): epc1=0x402036f8 epc2=0x00000000 epc3=0x00000000 excvaddr=0x3ffeef3d depc=0x00000000 ctx: cont sp: 3fff04e0 end: 3fff0700 offset: 01a0 >>>stack>>> 3fff0680: 0000001f 3ffef438 3fff0e14 402036e0 3fff0690: 40100031 3ffef3f0 00000000 3ffef3fc 3fff06a0: 00000031 3ffef3f0 00000028 40205556 3fff06b0: 00000001 3ffef6d8 40205fb8 3ffef6d8 3fff06c0: 3fffdad0 00000000 3ffeef38 40203943 3fff06d0: 3fffdad0 00000000 3ffeef38 40202706 3fff06e0: feefeffe feefeffe 3ffef6d0 40206004 3fff06f0: feefeffe feefeffe 3ffef6e0 40100108 <<
- Vitasam's blog
- Log in or register to post comments
- 23827 просмотров
Комментарии
круто но зачем бейсик
Permalink
Там же Lua и MicroPython есть. Хотя если нужны BCD операции,
библиотека то уже готовая есть для C++, то может стоит встроить в бейсик
Бейсик
Permalink
Бейсик чтобы вот. Если мне нужен был бы Питон, я взял бы Распберри Пи Зиро. Тот же размер платы.
Из-за чего такой эксепшн может быть?
Предположение
Permalink
Общение с последовательным портом барахлит? Там может быть что-то, зависящее от железки. А Бейсик же универсальный, железки пока не знает.
Можно отладить свой терминал и сравнить с тем, как это делает Бейсик.
Похоже, нашлось
Permalink
Для esp8266 в ардуину написали неплохой декодер exceptions.
Проблема, похоже, связана с архитектурой esp8266:
Выравнивание
Permalink
Придётся, как с предыдущей архитектурой, писать свои функции по чтению и записи из памяти. Раз это C++, можно попробовать перегрузить операции. Но можно ещё изучить компилятор. Возможно, там уже есть опция для эмуляции отсутствия выравнивания.
Скорее всего, компилятор может как-то
Permalink
но мне неохота ковыряться с этим. Переползаю на stm32.
Однако
Permalink
Может проще соорудить транслятор в Lua ?
Зависит от исполнителя
Permalink
Если вы хорошо разбираетесь в lua или другом языке — пишите Бейсик на нём, никто не мешает.
Традиционно Бейсики писались на ассемблере, экономя ресурсы целевой системы. Позже стала востребована переносимость, Бейсики стали писать на Си. Видимо из-за того, что богатая AT&T сильнее распиарила юниксный подход к переносимости, чем Чак Мур фортовский.
Но если программист хорошо знает и свой инструмент, и Бейсик, написать транслятор для него относительно просто. Сложнее программиста мотивировать на работу, при этом её не оплатив — мечта класса эксплуататоров. :-)
А вы всё носитесь со своей идеей фикс, что кому то надо...
Permalink
...что кому то надо вас эксплуатировать. Начните лучше с простой и очевидной мысли, что бейсик на ESP нафиг никому не упёрся (как и Каллисто где либо), исключение составляют такие сообщества как наше, где люди просто радуют друг друга своими достижениями. Причём вообще заявления про эксплуатацию ? Напишете бейсик на Луа, а я им буду алчно пользоваться ? Вам не приходило в голову, что Луа гораздо лучше Бейсика ? :-)
Мыслите сами
Permalink
Мыслите сами и говорите за себя, не-эксплуататор вы наш.
Того же и Вам желаю!
Permalink
Уж большего любителя говорить за других, чем Вы, и не сыскать, скромный Вы наш !
Бейсик
Permalink
Ну, за всех Вы уж тут не говорите. Есть несколько человек, которым Бейсик интересен, и один из них очень хочет, чтобы эксперимент Basic-Nano завершился полноценной печатной платой.
По моему вы невнимательно прочитали, что я написал
Permalink
и зачем то повторяете практически слово в слово, то что я написал. Есть НЕСКОЛЬКО человек, которым Бейсик интересен, кроме НЕСКОЛЬКИХ человек, остальной массе людей оно не особо нужно (т.к. давно есть лучшие альтернативы). Это не умаляет ваших достижений, я лично восхищаюсь каждым вашим отчётом и сделанным устройством! И дай Бог чтобы оно вышло в серию, я бы тоже приобрёл как платформу :)
Да, я не так понял
Permalink
Прошу прощения :)
Вы меня тоже извините за резкость
Permalink
Бейсик это очень хороший язык для начального обучения, у меня есть даже бизнес идея по бейсику на мелком компе.
Ок :)
Permalink
Договорились :)
Про бизнес-идею по Бейсику - кроме как конструктора для детских и школьных кружков, мне ничего в голову не приходит.
SD-карточка заработала на SPI порту 1:
Далее надо собрать в кучу с Бейсиком (придется код клавиатуры перенести на другие GPIO в свете занятости SPI)
SD карта какого объёма?
Permalink
А какая файловая система? FAT16/VFAT/FAT32? Много памяти ест?
Я на 0,5Мб диске МК-161 даже 25% ёмкости не добрал, а на SD карте кроме программ можно целую библиотеку книг хранить :) и читать их потом на ЖК-индикаторе :))
Сайт
SD-карточка
Permalink
SD-карточка сейчас 4 Гб. Ардуино-библиотека стандартная, она поддерживает FAT16 и FAT32, но для экспериментов я форматировал карточку в FAТ16.
На stm32 немного косячно работает, по-сравнению с Ардуино-Нано (тут, к примеру, большая дискуссия). У меня заработало только тогда, когда я занизил скорость SPI шины:
Я, кстати, забыл, почему в МК152-161 не поставили SD-карту, а сделали то, что сделали. В фирмвари места не было?
УЗВМК
Permalink
В узвмк не 256 байт/сектор, а 264, дополнительные 8 байт позволяют отказаться от таблиц разбиения файлов, хотя файлы каталогов остаются, это позволяет упростить файловую систему и машинные затраты на её обслуживание. Думаю, делали, как можно проще.
В бейсик-недокомпе 4Гб для хранения программ... как самолётный ангар для мопеда :) хотя, сейчас в продаже карт памяти менее 512Мб днём с огнём не сыщешь...
Сайт
SD-карта
Permalink
Лет 8 назад неиспользование карты SD в МК-161-/152 было мотивировано нежеланием вступать в соответстувующую ассоциацию производителей и платить за членство 1-2К долларов в год.
Да, припоминаю такое
Permalink
Понять тоже можно, с другой стороны
'Запад' по поводу Форту не комплексует :)
Permalink
Один из демо-роликов.
Mecrisp Forth on STM32 Microcontroller (blue pill)
https://www.youtube.com/watch?v=dvTI3KmcZ7I
P.S. И какие то разработчики его внедряют в свои разработки.
https://github.com/jeelabs/embello/tree/master/explore/1608-forth
и публикуют свой опыт в статьях блога.
А это, даже, не коммерческая Форт-система сделанная физиком.
Наши разработчики, тоже что то публикуют в блогах
Примеры:
https://tuxotronic.org/post/mecrisp-forth/
http://tesla.zabotavdome.ru/forth.html
...
Есть и такая последняя новость http://www.forth.org.ru/news/Eclipse%20debug%20using#0
От отсутствия комплексов к семейной жизни :-)
Permalink
Вообще интересно развитие архитектуры, если за объединяющий язык взять не Си, а Форт. Операционка на Форте, драйверы, графинтерфейс, приложения и компиляторы. Наверняка это помогло бы и развить язык, и принесло новое в компьютерные науки. Да и аппаратные требования стали бы поскромней. Возможно, этот подход выгодней для России.
Поддерживаю!
Permalink
Только на STM32 (и вообще ARM), ESP и прочих "нормальных" архитектурах, куда и зачем тащить эту 51-ую хреновину не ясно.
МК51 не обязательна
Permalink
Поднимать Форт до состояния Юникса (Линукса, Гну) означает переносимость. Нижний уровень относительно небольшой и ограничен — сотня-другая примитивов и форт-ассемблер. Основной труд, как в Гну-Линуксе, это разработка API и мощные программные пакеты вроде Emacs, GIMP, GCC, GNOME, bash и т.д. Просто их исходный код будет не на переносимом Си, а на переносимом Форте. После появления хороших компиляторов Си можно будет что-то и из гнушного мира заимствовать.
Нижний же уровень в такой системе взаимозаменяем. Собственно, на это Форт и был нацелен изначально. Ещё до того, как AT&T протолкнула ту же самую идею со своим Си. Написанное на форт-системе для 8051 будет востребовано на STM32 и наоборот.
Войны архитектур не должны особо задевать Форт-систему. Наоборот, если что задышит и заползает на 8051, на STM32 вообще летать будет. Как программы для МК-61 летают на МК-161. Начальная разработка для слабых систем создаёт запас прочности, их ограничения заставляют бережней относиться к ресурсам.
Убедительно!
Permalink
Приятно такое читать, я всеми руками за! Как будет время хочу в этой истории изучить вопрос оптимизирующего кодогенератора (прямо на борту пмк), а также эффективного управления памятью, тут вам и Дейкстра и другие материалы в изобилии.
А уж поверх и бейсик и что угодно быстро и приятно будет накатываться. Надо создать типа Forth CLR машину.
Оптимизация
Permalink
Каллисто-2 сама по себе будет оптимизацией по времени Каллисто Классик. Причём на уровне алгоритмов, как завещал Михаил Пухов. Остальные ресурсы исчерпаны, код уже вылизан до блеска.
Для разработчиков в Каллисто-2 будет введена команда ;– Это обычная ; и подсказка компилятору, что здесь можно оптимизировать хвостовую рекурсию. В исходном коде Каллисто 1.0 я использовал этот вид оптимизации вручную.
Помня вашу любовь к оптимизации, посмотрел на реализацию знаменитого оптимизатора СПФ. Каллисто-2 будет работать на МК-161, там такое не реализовать даже при переходе на уровень камня. Если для отечественного ПМК будет разработана достойная аппаратная платформа (STM32 или отечественный форт-процессор), полностью использовать эти наработки станет возможным лишь при переходе на процедурный шитый код. Это существенная встряска транслятора, которая потребует полного расставания с гарвардской архитектурой и повлияет на часть языка, связанную с компиляцией и словарём. Практического смысла двигаться в этом направлении нет, хотя в теории препятствия отсутствуют.
Типичная подмена понятий
Permalink
Я тоже мог бы разразиться никак не связанными выдержками о том как "Запад" не комплексует по поводу Python или Lua, или C++, да даже ассемблер бы сгодился.
Зачем вы рассказываете про Forth и его успехи, совершенно не ясно! Я где то сказал, что Mecrisp Forth on STM32 или другие серьёзные реализации не нужны ???
Успокойтесь, никто на ваш Forth не покушается, и вообще я всегда говорил, что на HP была и есть уникальная Forth образная система, которую бы надо соорудить на новой платформе тоже. Но Каллисто на МК-161 к Форту не причисляйте, оно там и умрёт на МК. Если что то будет сделано аля RPL, то явно на другой платформе и реализации Форта. Поэтому я и сказал, что Каллисто - это местное достижение, но в масштабах того вашего "Запада" оно не нужно никому (как и МК-1XX), если смотреть правде в глаза, и не кривить душой.
Местная система
Permalink
Каллисто и не делалась для Запада. Хотя она и способна повлиять на развитие Форта (примерно как colorForth на неё), основная ценность Каллисто для тех, кто увлекался советскими ПМК. Преемственность технологий.
Примерно из этих соображений выбрана и МК-161. Пока STM32 в стадии эксперимента, МК-161 выпускается. Пусть по недружелюбной цене, пусть с НОДовскими тараканами — но система уже доступна в наших Чебурнетах. Подоспеет STM32 в серийном исполнении, уже отлаженную Каллисто перенесём туда относительно легко. Может автор ЭКВМ 2.0 будет даже ближе по идеологии, ко мне или Арбинаде — сразу приятней работать будет. :-)
Cписок разных Бейсиков
Permalink
http://basic.mindteq.com/index.php?i=full
может пригодится
Вот ещё проект Бейсика, если не было
Permalink
http://www.cqham.ru/tbcgroup/basint_manual.htm
Он целочисленный
Permalink
насколько я понял:
Тот, что сейчас в stm32, float
Смысла прикручивать что-то другое пока не вижу
Похоже, с Бейсиком и SD-картой не влезаю в stm32f103
Permalink
Похоже, с Бейсиком и SD-картой не влезаю в stm32f103 (это просто подключена SD библиотека с файловой системой, функции чтения/записи еще не написаны):
SPI Flash vs SD?
Permalink
Может есть смысл заменить SD карту микросхемой SPI Flash, например 25-й серии есть кристаллы 4, 8 и 16 МБ?
Вот, статейка про микросхему из УЗВМК
Сайт
Нет, хочу именно SD
Permalink
в первую очередь для обмена файлами с компьютером.
Вообще, размер прошивки поражает (много чего тянется за собой в ардуинских библиотеках). Я думал, влезет в 64 КБ. Такие бы ресурсы (72 МГц, 64 КБ ПЗУ) да во времена "Спектрума"...
В общем, challenge accepted :) Либо переползу из Ардуины на чистый GCC и останусь на нынешней stm32 (20КБ ОЗУ, 64КБ флеш), либо переползу на cortexM3 помощнее (64KB ОЗУ 512KB флеш), платка рядом валяется без дела.
Чистота
Permalink
Чистота - залог здоровья. Голосую за переползание на чистый GCC, чтобы не тянуть за собой наследство.
Обязательно!
Permalink
Обязательно буду переползать на "чистый" GCC. Хотя бы ради памяти предков, которым 64 КБ ПЗУ показалось бы роскошью :)
Тут пример, как реализована ардуинская функция записи в GPIO digitalWrite(). Цитаты:
Ардуино IDE и вся инфраструктура вокруг удобны, безусловно, но за удобства надо платить
Оптимизация
Permalink
Российская платка на миландрокортексе для выводов битов в порты использует штатную функцию GPIO_DigitalWrite(), которая выполняется за 0,5мкс (~40 команд), а внутри неё происходит проверка на обращение к несуществующим контактам, и в дальнейшем вызов функции GPIO_SET(), которая выполняется за 0,11 мкс (~9 команд) и выводит бит в порт. Чтобы не переделывать софт, можно повырезать из библиотек всё лишнее, например, из GPIO_DigitalWrite() вырезать всё, кроме вызова GPIO_SET().
Кстати, да, в NetBeans используется GCC с оптимизацией О2, который нагло режет пустые циклы.
Сайт
Оптимизация
Permalink
Я именно так и собираюсь сделать - взять за основу ардуинские библиотеки, вытащить их в тот же каталалог проекта и вырезать все лишнее. Так я уже сделал с I2C LCD библиотекой, на очереди - GPIO, I2C и SPI.
SD карточка работает
Permalink
На грани влезания прошивки в stm32f103 заработали команды SAVE "filename", LOAD "filename" (команда DIR еще в разработке):


1. Cохранить программу TEST1 в файл TEST1.BAS:
2. Cохранить программу TEST2 в файл TEST2.BAS:
3. Список файлов на SD-карточке:
4. Загрузить программу TEST1 из файла и запустить:
5. Загрузить программу TEST2 из файла и запустить:
Неплохо
Permalink
Поздравляю! Отличная интеграция с компом.
Интеграция с компом
Permalink
Спасибо! Ну, при наличии SD-карточки со стандартной файловой системой интеграция с компом идет "из коробки" :)
Подумалось, что надо будет потом написать оффлайн-конвертер (хотя бы на Питоне) для декодирования файлов .BAS в читаемый текст, и обратно.
Чтение BAS
Permalink
Во многих Бейсиках такой конвертор встроен в транслятор. Для получения текста, читаемого человеком, надо использовать команду SAVE "FILE",A
В этом Бейсике такого нет
Permalink
Да и неохота тратить драгоценную флеш-память прошивки на то, что можно сделать на компе
На стороне транслятора
Permalink
Дело в том, что нужный код в трансляторе уже есть. Это команда LIST с перенаправлением вывода в файл. Конечно, можно сделать такое перенаправрение на стороне десктопа.
LIST
Permalink
Да, LIST команда есть, можно ее использовать для этих целей. Но Бейсик придется допилить немного, а сейчас это практически невозможно - места для прошивки осталось байт 100
Зачем?
Permalink
Ведь на компе можно блокнот настроить на чтение *.BAS ну или написать какой-нибудь BAS2TXT.BAT, который будет выполнять команду REN *.BAS *.TXT :)
Сайт
Именно так
Permalink
А второй скрипт будет конвертить .TXT в .BAS, если вдруг понадобится конвертировать листинг программы в файл на SD карточке
Формат BAS
Permalink
Это если Бейсик использует текстовый формат. Некоторые Бейсики просто скидывают на диск область памяти, где хранится программа. В этом случае ключевые слова, такие как PRINT, кодируются 1-2 байтами.
Формат BAS
Permalink
файл .BAS это просто "слепок" буфера памяти Бейсика. PC конвертор .BAS -> .TXT может парсить хидер-файл исходника Бейсика для того, чтобы всегда иметь последний список токенов.
Есть нюанс
Permalink
В теории всё так. На практике там несколько подводных камней, вроде кодирования числовых и строковых констант. Если Бейсик компилируется под десктоп, может быть достаточно простого LOAD:LIST с переназначением вывода.
Бейсик под PC
Permalink
А это даже еще лучше вариант. PC хост у меня опробован в билде под Винду (под Линукс еще нет). Но это потом, второй или третий приоритет
А как с Андроидом?
Permalink
обстоят перспективы :)
Андроид
Permalink
Настало время небольшого дисклаймера :) - сей эксперимент с Бейсиком на платке с экранчиком не планировался расти ни во что мобильное. Только железные кнопки с экраном, только хардкор :)
PC хост и тот только для того, чтобы сам Бейсик отлаживать было удобнее.
Но проект на Гитхабе, поэтому все, кто хочет поковырять - добро пожаловать.
stm32f103: Arduino vs GCC
Permalink
Допилил клавиатурный тест Бейсик-железки на GCC. Разница в размерах прошивок между Arduino toolchain и GCC toolchain (на основе libopencm3 lowlevel Open-Source library for ARM cortex MCUs):
Arduino: 15528 байт
GCC: 2092 байт
GCC прошивка меньше Ардуинской в 7.4 раза.
Поздравляю!
Permalink
Поздравляю, я знал что ардуинокомпилятор плохо оптимизирует программу, но таких результатов я не ожидал! Думаю, ардуинокомпилятор сперва С++ портирует на Java, а его уже компилирует в машинный код.
Кстати, а как GCC по быстродействию по сравнении с ардуинокомпилятором? У меня выходило минимум в полтора раза, но я думаю тоже в разы быстрее работать будет.
Сайт
Спасибо.
Permalink
Нет, в Ардуине не через java, там просто много чего подкдючено. Один Serial класс чего стоит.
Быстродействие интересно померять. Как только перенесу Бэйсик под GCC, прогоню 8 ферзей
LCD драйвер на С
Permalink
Понемногу перепиливаю ардуинский I2C LCD драйвер на "чистый" С. Больше половины функционала уже работает (stm32 GCC toolchain).
Размер прошивки с драйвером дисплея пока радует (3024 байт):
PC хост Бейсика под Win & Lin
Permalink
Бейсик переписался с "плюсов" на чистый Си. В процессе переписывания Бейсика допилил кроссплатформенный РС хост (проект под Code Blocks):


Секунды?
Permalink
Это секунды или миллисекунды? Не думаешь допилить Бейсик, убрав номера срок и введя метки? :) Должно быть несложно, если транслятор толково написан.
Это секунды
Permalink
Это секунды - сколько приложение проработало. Но это сам Code Blocks меряет.
Бейсик уже переписан из "плюсов" на чистый Си. На большее пока я не готов :) - и так надо допиливать - в "железяке" еще не работает.
И, опять же, ретро-фактор исчезнет, если убрать нумерацию :)
P.S. Хотя транслятор, в целом, написан неплохо. Вот
причесанный "чистый Си" вариант(under construction). (Про фигурные скобки в однострочных условиях if(a < 0) a = 0; и циклах - мне нравится такой coding convention).STM32F103C8T6 + ILI9341 = Spectrum48
Permalink
Spectrum-48 против пачки сигарет, каша из топора или что может STM32F103C8T6+video(update)
https://habr.com/post/412325/
Контроллер ускорен до 112 Мгц, Ресурс батарейки 50ч
P.S. Видео https://youtu.be/n4u6VNxCTdA
Спекбук
Permalink
Давно уже время от времени всплывают обсуждения спектрума с ЖК экраном, оказывается сделали-таки! Можно спекбук собирать:) Идея видеопамять как своп на спектруме меня весьма удивила:) Миландровцы на опытах свои кортексы для счётчиков с 36МГц разгоняли до 90, так что ничего удивительного :) Интересно на нём Wolfenstein 2004 будет работать?
Сайт
Гитхаб сделал бесплатные приватные репозитории
Permalink
Гитхаб сделал бесплатные приватные репозитории.
Отлично! Буду переносить туда stm32BASIC из Гитлаба (пока еще не готов открывать в открытый доступ)
Доперли
Permalink
Доперли, наконец-то, на сурсфордже это изначально было. Покупка Микрософта на них позитивно влияет.
Однозначно позитивно влияет
Permalink
Хотя сейчас на них скорее, Gitlab давил - у него чуть ли не более удобный функционал и 5 человек в команде приватного бесплатного репозитория.
Заработала PS2 клавиатура
Permalink
Заработала PS2 клавиатура.
Приехали ч/б 20х4 дисплеи с отражением
Permalink
Приехали ч/б 20х4 дисплеи с отражением. Это без подсветки, с настольной лампой:

Поздравляю!
Permalink
А с этими ЖК индикаторами нет задержек в отображении символов? Смотрятся явно лучше старых синих :)
Сайт
Спасибо!
Permalink
Не, тут все очень адекватно. И да, мне сильно больше такой экран нравится, по сравнению с синим
Действительно лучше
Permalink
Шрифты намного лучше читаются. Хотя после МК-161 такие широкие точки и буква «i» выглядят очень необычно.
Конечно, моноширинные экраны программировать привычней. Мне пришлось многому переучиваться, делая Каллисто для пропорциональной командной строки. Но результат того стоит. Физический размер экрана ПМК крайне мал. Трюк с разной шириной символов позволяет втиснуть больше информации, причём с улучшением читаемости. Здесь я на стороне Новосибирска, хотя в 2007 принятое ими решение было не таким очевидным.
Шрифты
Permalink
Если удастся закончить stm32f1BASIC. то я планирую перебраться с Бэйсиком на 320x240 графический экран, скорее всего на более мощный STM32F103RET6.
Почти МК-161
Permalink
Только высота индикатора в два раза меньше и шрифт моноширинный. Ну и импорт, конечно.
Увы, не графический
Permalink
Увы, не графический. А насчет импорта - вот у МЭЛТА почти один в один, это кто производит, "Ангстрем"? В нем прошит русский знакогенератор - это, конечно, плюс
Так и МК161 "идеологически не очень чистая", если про импорт :)
Максимально чистая
Permalink
МК-161 — наиболее чистый русский ПМК, из современных. Отсутствие в «Электронике» более мощных финтифлюшек вполне объяснимо отсутствием русских аналогов. Сделать МК-161 ещё более чистокровным — от цен ещё сильней взвоем.
Альтернативы на Ардуино и других иностранных платках — значительно менее отечественные и вдохновляют меньше. Преимущества таких самоделок перед HP Prime обьяснить сложнее. Отечественностью пожертвовали, и всё равно рыночных высот не достигли.
"Чистый" ПМК
Permalink
Ну, если взять что-то вроде К1986ВЕ92QI и вышеупомянутый МЭЛТ дисплей, то stm32f1BASIC будет 100% отечественным. Или наличие "нерусского" ARM-GCC подточит чистоту? :)
К1986ВЕ92QI
Permalink
Мне импортные системы команд не по нраву. Форт-процессор был бы круче.
Но музыку заказывает тот, кто платит. Если отечественные разрабочики решат использовать К1986ВЕ92QI, как им запретишь? Чтобы выпустить не маниловские замки, а готовый продукт, часто приходится идти на компромиссы.
Это наше
Permalink
Да, КБ145ВГ6 Ангстрем делает. А вот мэлтовские символьные ЖКИ с управлением по SPI уже с импортными кристаллами идут.
Сайт
Заработали SAVE и LOAD на SD-карточку
Permalink
Заработали SAVE и LOAD на SD-карточку.
Видео работы с SD картой (8 ферзей)
Permalink
Видео работы stm32f1BASIC с SD картой (8 ферзей):
Ok
Permalink
Почему-то нет Ok. Не видно, когда программа засэйвилась или загрузилась.
Да, ОК нужны - добавил
Permalink
Добавил ОК в работу с SD картой.
Еще порядка 7900 байт во флеш-памяти остается для улучшалок:
Русский язык
Permalink
А что с русским языком? Знакогенератор, клавиатура… советую сделать кодировку, как в МК-161 (cp866). Может потом помочь с переносом Каллисто. Ну или Бейсика на МК-161, если прошивку вскроем.
Русский язык
Permalink
Этот экран, что у меня, без русских символов в прошивке. Поэтому никак. МЭЛТ-овский экран покупать - дороговато и неудобно логистически.
Почему именно cp866, а не win1251?
Cp 866
Permalink
Для совместимости с ЭКВМ. Почему в Новосибирске выбрали кодировку ДОС — могу только догадываться.
В своё время cp866 была распространена. Под неё больше текстов было набрано, чем под MSX и КОИ-8. Винда, конечно, добавила неразберихи. Но если двигаться дальше, имхо надо UTF-8 или сразу 16-битный Юникод. Даже для проекта российского (не советского) ПМК потребуется несколько национальных алфавитов, помимо русского. Не говоря даже о научных обозначениях.
Схема МК-161
Permalink
Как-то раз ЗонаТеХе нашёл схему калькулятора, вот ссылка на скачанный в прошлом году файл. Это версия схемы с микроконтроллером в панельке.
Сайт
Спасибо
Permalink
Спасибо. То, что нужно. Теперь нужны специалисты по 8051 — какие сигналы генерируются контроллером автоматически, а какие надо дёргать вручную через P2 и др. Ещё нужны схемы клавиатуры и индикатора.
Основные сигналы обычные 51-м
Permalink
Аппаратный интерфейс к внешней памяти
ALE - для защёлкивания младших линий данных/адреса
P3.6 (WR) - запись данных
P3.7 (RD) - чтение данных
P2.7 (CS) - старшую линию адреса A15 применили для селектора разных микросхем.
OE - принудительно подтянули к 5В (т.к. используют A15)
Шины данных/адреса согласно выводам из описания на микросхему (при беглом взгляде)
P4.0 ... P4.3 управляются вручную или смотреть их спецификацию в описании.
RST - штатная линия прерывания
RX, TX - уточнить по пинам контроллера, но должны совпасть
Другие линии портов P1.1 ..P1.7 P3.0 ..P3.5 - общего назначения
P.S. Остальная логика работы с внешними микросхемами, согласно их описанию.
Примерно так, Есть контроллеры AVR с таким интерфейсом к памяти как у 51-го Atmega162 ... Atmega128 ...
но можно через переходник подключить любой на выбор (например STM32 с 5-ти вольтовыми пинами)
51-й этот вроде пятивольтовый.А прошивка с него не считывается программатором? (хотя смысла наверное нет в ней)
С таким количеством микросхем и ключей (да и сам контроллер не экономичный) + Индикатор ... интересно какой ток потребления при штатном напряжении питания?
Возможно контроллер nuvoton W78E516d как аналог применим вместо штатного. Стоят мало, поддержаны компиляторами и имеют режим самопрограммирования. Документацию на них (nuvoton 51-e вроде даже кто то переводит).
Наработки
Permalink
Очдавно этим занимался. Вот основные наработки:
https://vk.com/topic-10838600_33160857
https://pmk.arbinada.com/ru/node/1245
https://pmk.arbinada.com/ru/node/1247
Сейчас я занимаюсь оптимизацией Каллисто на СПФ, поверх языка МК. Но мне очень интересен вопрос встраивания Каллисто в прошивку. Есть МК-161 для опытов, пара W77LE516P и программатор. Не лень загружать двоичные образы и пробовать их на «железке». Главное — получить точки на MT–12864J и научиться опрашивать клавиатуру ЭКВМ. Впрочем, для начала можно оживить машинку через COM-порт, управляя самодельной прошивкой с соседней МК-161 вот этим терминалом:
https://pmk.arbinada.com/ru/node/1331
«А прошивка с него не считывается программатором?» — Нет. В W77LE516P есть бит защиты. Видимо, с его помощью считывание заводской прошивки запрещено. Результат, afair, FF FF …
Имхо, мои попытки были весьма наивными. Возможно, я вручную дёргал те сигналы, которые микроконтроллер выдаёт самостоятельно, выполняя команды обращения к внешней памяти. В любом случае успех был достигнут только в прошивке W77LE516P. Написать код, работающий внутри МК-161, пока не удалось.
Купил пару микросхем W78E516D-PG (Nuvoton)
Permalink
и переходник PLCC-> DIP40 в местном магазине, теперь разобраться как их заливать через встроенный загрузчик и требуемую обвязку
и можно создавать какую то прошивку для Каллисто :)
Может быть развести схему подобную МК-161 (152)
P.S. На Github много кода при поиске по 8051, Эту архитектуру, похоже, до сих пор изучают в учебных курсах.
Как я понял МТ12864J сделан на совместимом контроллере дисплея KS0108 (2-a контроллерa для 128x64) Библиотечка для данного контроллера http://en.radzio.dxp.pl/ks0108/ (может ещё надо учесть временные параметры при пересылке данных дисплею согласно документации произволителя МЭЛТ)
Ещё какая то статья по часам с дисплеем от МЭЛТ https://xakep.ru/2014/09/10/hardware-clock/
Загрузчик
Permalink
Загрузчик — важная тема.
Железо
Permalink
Если делать альтернативное МК161 железо, то стоит ли оставаться на 8051?
Новый ПМК
Permalink
Первая задача — отладить Каллисто внутри МК-161. Макет должен по возможности эмулировать новосибирскую схему.
Если доводить свой ПМК до производства, мы не ограничены 8051. Мне бы хотелось полностью отечественный процессор. Пишут, что во время бума FPGA была волна разработки процессоров с отечественной системой команд. Но мне не удалось выяснить, что с той эпохи осталось в камне — так, чтобы потребление было скромным.
В идеале схема нового ПМК должна уметь «спать». Как между нажатиями клавиш, так и между включениями. Возможно, хорошая идея будет работать с пониженным быстродействием, включая режим «турбо» лишь при необходимости. Длительные вычисления, когда требуются, могут проводиться в режиме «турбо» с выключенным индикатором и звуковой сигнализацией по окончанию.
CY7C68013A-56PVXC 8051 контроллер с 16Kb для программ
Permalink
Программа во внутренне ОЗУ данного контроллера загружается или с/в 24с128 I2C микросхемы
или по USB каналу контроллера (почти вариант по дизайну Arduino) штаттным прошивальшиком.
Контроллер используется, чаще всего, во всевозможных логических анализаторов (Saleae Logic, USBee, ...) и их клонов
Открытый проект логического анализатора https://sigrok.org поддерживает много девайсов с этим контроллером
https://sigrok.org/wiki/Fx2lafw
Начал экспериментировать с этим контроллером (платa от LCSOFT) информация по нему полная.
P.S. Можно им снимать (логическим анализатором на этом контроллере) ньюансы обмена сигналами в MK-161 (у кого есть данный калькулятор)
Предполагаю запустить в рамках CY7C68013A вариант Форт (возможно и с кросс компиляцией)
В линейке CY7C68013 есть и более полные контроллеры (100 ... ногие) с интерфейсами к памяти.
Зачем?
Permalink
Можно и так. Но зачем, если у меня есть W77LE516P с программатором?
Проблема не запустить что-нибудь внутри МК-161. Это не проблема. Проблема написать код, который хотя бы пищит пищалкой, для начала. А потом нужны опрос клавиатуры и вывод точки.
Что на CY7C68013A писать, что на W77LE516P. Одинаково.
Вариант 2
Permalink
Ещё можно начать с RS-232. Поток я могу генерировать и отображать на соседнем МК-161, пользуясь 161eForth.
Первый нативный Форт на МК-161 может вообще не обращаться к консоли и работать через последовательный порт. Пока кто-нибудь, путём экспериментов, не напишет таки BIOS.
Вывод на MT12864 с сайта МЭЛТ
Permalink
Сопоставить прозвонкой цепей подключениe дисплея для МК-161
Permalink
и указано, что в МК-161 есть отличия (какие?)
P.S. Теоретически сначала можно код и в симуляторе, типа протеус проверить для 8051 и индикатора т.к. пока у меня нет интереса в этом индикаторе. :) (а собранный бинарный файл на чьём то железе)
Интересно, что для 8051 есть и Паскаль http://turbo51.com/
Бинарный файл
Permalink
Вот здесь была похожая схема с кодом, работающим на эмуляторе:
https://pmk.arbinada.com/ru/comment/8418#comment-8418
Но она не была доведена до бинарника, который я мог бы проверить в МК-161. Также схема подключения была взята из МК-152 и говорят, что в МК-161 она немножко другая. Можно запланировать встречу в Скайпе. К ней я могу подготовить сохранённые схемы МК-161 (схему платы индикатора пока не нашёл), мультитестер и другие инструменты. Или просто передать мне кучу бинарников, которые я буду загружать в W77 и проверять их работу на железе.
Один из вариантов для бинарников — попробовать оживить RS-232. Там вариантов подключения меньше. Потом загрузить в камень интерактивную программу на основе кода МЭЛТ, передавая ей по терминалу разные варианты подключения индикатора. Если сразу не нащупаем, можно найти нужный вариант автоматическим перебором под видеокамерой.
О, мое творение :)
Permalink
Но т.к МК-ххх у меня нет и не планировал покупать - то естественно далее приведенного кода смысла дергаться не было.
Меня не покидает иногда "дурная"мысль - все таки развести плату с кнопками, STM32, SDCard, выведеными наружу интерфесами RS232/485 и несколькими IO и вот таким индикатором c сенсорной панелью: https://www.buydisplay.com/default/2-8-inch-128x64-graphic-module-serial...
Пусть пока просто плату. По отдельности у меня есть наработки на все это. Код симулятора МК-61 тоже Сергей Вакуленко написал. Расширение для МК-161 у меня работает в контроллерах.
Время - ну можно выкроить.
www.avl.by