You are here
stm32basic, почти МК85 с клавиатурой PS/2
После поисков форм-фактора и удобства работы с клавиатурой в разных экспериментах stm32basic выкристаллизовался в идею использования старой PS/2 клавиатуры как самым удобным устройством ввода из тех, что доступны "из помойки".
Данное железо получило официальное название V1.0 (Breadboard Edition), проект выложен на Гитхабе.
Пока из готовых к использования программ на Гитхабе лежит лишь NQUEENS.BAS, причем в версии с 1 циклом. Для прогона 100 циклов надо сделать изменения, далее цитата из Гитхаба:
...Copy file to the card and load the program, e.g.:
LOAD "NQUEENS"NQUEENS.BAS is a progam used for Calculator Speed Benchmark using the N-Queens Problem. The stm32basic is quite fast for measuring it visually with just one loop. It is better to run e.g. 100 lops and then divide the time by 100. One can modify the code on NQUEENS.BAS as following:
45 <- delete line 45 DIM A(9) 12 DIM A(9) 15 FOR X=0 to 100 205 NEXT XRunning of such modified program takes about 69 sec on my system, it gives 0.69 sec. In the above Benchmark list the stm32basic comes between those models:
- 0.770 ClassPad 300+ CPLua 0.8 / Bytecode / Fast Mode x1.4 (29.5->59 MHz) - 0.673 FX-9860GII-2 C.Basic 2.37 / Integer Mode
- Vitasam's blog
- Log in or register to post comments
- Просмотров 9892
Комментарии
Добавление функции ABS() в Бейсик
Только что добавил в stm32basic функцию
из backlog-списка. Выше в тесте вместо ABS() были
. Результат: 0.56 сек вместо 0.69 сек.
Поздравляю
Поздравляю! В SB4, кстати, можно добавлять в Бейсик функции средствами самого языка. Причём есть возможность при необходимости делать меняющееся число параметров, как у printf(). И даже несколько возвращаемых значений.
Спасибо!
Спасибо!
Но, похоже, уперся в ограничения объема флеш-памяти в STM32F103C8T6 "синей таблетки" - объем бинарника уже впритык. Многое из backlog-списка не влезет, хотя удалось добавить
Поэтому оставлю stm32basic V1.0 как сейчас, и буду потихоньку переползать на V2.0 - платка на STM32F103RET6 (RAM: 64K, FLASH: 512K) c TFT экраном 320x240, поддержку TFT экрана 320х240 на ILI9341 чипе с уважаемым Astranome потихоньку допилили:

Список классики и нетленки для наполнения Basic библиотечки?
Что можно перенести в BASIC-библиотечку stm32basic из классического и нетленного?
Пока там лежит только классический N-QUEENS.
Стартрек
Самая классика, конечно, Стартрек. В электронном виде у меня его нет, но должен гуглиться.
Где-то по сусекам могу наскрести Тетрис, который я делал с учениками во Дворце пионеров. Он, правда, на QBasic’е. Так что придётся деградировать исходник до номеров строк и GOSUB’ов.
К самому QBasic’у было несколько игр, прямо в дистрибутиве MS-DOS’а. Всё это, в теории, может вызвать проблемы с авторскими правами. С другой стороны, может во FreeDOS’е есть что-то полезное по Бейсику. Давно в нём не копался.
Классика
Да, Стартрек это классика. Но все это в железо HW 1.0 не влезет, с его экраном 20x4.
Надо что-то калькуляторно-мелкое.
Сборник игр на Бейсике
Поищи вот такую книгу:
https://en.wikipedia.org/wiki/BASIC_Computer_Games
Она выдержала много изданий, программы оттуда переводили на более современные Бейсики и другие языки. Вот первая попавшаяся ссылка из этой статьи на Википедии:
https://www.atariarchives.org/basicgames/
В этой книге много игр, причём именно для такого антикварного чуда с номерами строк. А вот и pdf’ку нагуглил:
https://annarchive.com/files/Basic_Computer_Games_Microcomputer_Edition.pdf
О, спасибо за книгу!
Качнул PDF-ку. Будет интересно что-то набить из этого
Без проблем
Есть ещё отечественные книги по Бейсику. Более 300 прикладных программ на Бейсике эпохи нумерованных строк, видимо как развитие справочника по ПМК, есть в:
Дьяконов В. П. Справочник по алгоритмам и программам на языке бейсик для персональных ЭВМ: Справочник. — М.: Наука. Гл. ред. физ.-мат. лит., 1987. — 240 с., тираж 300 000 экз., ББК 22.18 Д93 УДК 519.6(083), ИБ № 32350, Д 1702070000—126 / 053(02)-87 48-87
Да, профессор последовательно писал «бейсик» с маленькой буквы.
Игра Awari
В той ПДФ-ке, похоже, нашлась игра, которая влезает в экран 20х4 :)
Оператор DATA
Что в данном случае делает оператор DATA в строке 10?

Обнуление
Помогает обнулить N в строке 15. Но может и ещё что-то значить, в зависимости от остального текста программы.
Понятно :)
Ну, и в stm32basic нет пока DATA оператора.
Запустил в PC-Basic:
Добавил в Backlog-список:
DATA в XXI веке
Можно переписать программу без DATA, это всего лишь оператор присваивания. Можно эмулировать READ, считывая значения DATA из большого массива. Но самое интересное, это как операторы READ, DATA и RESTORE развивались и какие они сейчас. Вот здесь описание READ, DATA и RESTORE в SB4, на английском:
https://sup4.smilebasic.com/en/doku.php?id=reference:Other
Самое мощное там почти не упоминается. Сейчас READ может считать из DATA целый массив. Очень удобно для инициализации массивов. Но в «Калахе» наверняка всё проще.
Да, можно и без DATA обойтись
Но цель в stm32basic - быть как можно ближе к "классикам", чтобы можно было старые программы переносить без переделки.
Спасибо за ссылку, отличный reference
В классике
В классике были только RESTORE и RESTORE с номером строки. Номер строки был числом, вычислять его было нельзя. Никаких RESTORE PUSH/POP. Никаких меток, слотов и совместно исполняющихся программ.
Для инициализации массива из DATA приходилось писать цикл.
баги в программе
Еше то удовольствие продираться через BASIC в наше время.
И еще там похоже баги.
Вот кто может сказать, глядя в листинг игры AWARI, где в строке 230 должен находиться оператор NEXT I? В листинге его нет. PC-BASIC ругается на строку 230
Строка 235
Это не баги, а очень извращённый код. Видимо, ради оптимизации в условиях крайне ограниченных ресурсов. Строку 235 можно заменить на NEXT I:RETURN
Конечно, если PC-BASIC не позволяет выход из цикла с помощью RETURN, строку 230 надо будет переписать чуть похитрей. Можно вообще раскрыть FOR…NEXT (в том числе в строках 215-220) с помощью двух присваиваний, сравнения и условного перехода.
Возможно, PC-BASIC ещё корёжит от того, что новый цикл по переменной I начинается без явного завершения предыдущего цикла по той же переменной. Неявный GOTO в строке 215 аварийно выходит из предыдущего цикла. Хорошим стилем программирования всё это не назовёшь, но в те дикие времена все строили из себя суперменов и как только не извращались.
Код, мягко говоря, ужасный
По нынешним меркам страшно представить, что в то время так писали и промышленные вещи.
С заменой строки 235 программа заработала, но ход игры отличается от тестового примера из книги. Вот первые два шага из книги:

А вот первые два шага в PC-BASIC:
Если у кого есть желание понять, что за ерунда происходит, то вот текст AWARI2.BAS, скопипастить в текстовый файл с таким же именем, и можно загружать в PC-BASIC:
Строка 880
В начале строки 850 лишний пробел. В строке 7 после COMPUTING два пробела. В строке 500 в кавычках 3 пробела, а не 4. В строке 520 в первом PRINT два лишних пробела.
В строке 880, на мой взгляд, всёж Q>=D.
880я строка!
880я строка, конечно же, косяк! Теперь тестовый пример прошел:

Спасибо! Есть работающая игра для портирования на stm32basic HW 1.0
Правда, она особо никому не нужна, так как автор почему-то в качестве примера опубликовал выигрышный вариант прохождения :D
P.S. Обнаружил, что в stm32basic нет экспоненциального оператора "^", надо добавить, чтобы руками не писать возведение в степень.
Коллекция программ к PC-BASIC
На Гитхабе нашлась неплохая коллекция софта для PC-BASIC-а.
Например, подраздел Sky And Telescope.
stm32basic HW 2.0
stm32basic HW 2.0, подключение дисплея 320x240 через шину SPI:


Далее ожидается I2C клавиатура с алиэкспресса
Как Вам такой контроллер для калькуляторного железа?
Платы на данном контроллере:
Например в "Чип и Дип"
https://www.chipdip.ru/product/nucleo-h745zi-q-stm
или на Ali https://www.aliexpress.com/item/4000835323680.html
P.S. Думаю, что для Semico данное железо за пределами сохранения "непорочности" их синусов в МК-161 :)
Контроллер хороший, спору нет
но пока немножко перебор как по цене (35 евро), так и по мощности.
Я остановился на следующем железе:
Я думаю, весь комплект будет дешевле той платы на STM32H745.
На Thingiverse выложили 3D модель корпуса этой клавиатуры
На Thingiverse выложили 3D модель корпуса этой M5STACK клавиатуры. Выглядит, вроде, неплохо:

В новом чипе побольше памяти для BASIC-а
В новом чипе побольше памяти для BASIC-а:
