Сводный список записей блога

--->>>> Сводный список записей блога <<<<---

24 апреля 2023

Финальная версия прошивки. Работа с программами на SD-карте.

Все статьи по данной игровой консоли - по тегу G-BASIC


Настала пора обновляться. Текущая версия прошивки - 1.0.511. Брать тут.

Обновление большое, важное. И обязательное. Обновление затрагивает как компилятор, так и виртуальную машину. Обновился так же компилятор и отладчик для ПК.

Ранее скомпилированные программы могут работать неправильно. Их нужно повторно скомпилировать в новой версии компилятора. 

В обновлении исправлено несколько старых ошибок, добавлена куча новых :)

Заодно проведен тест времени работы консоли от литиевого аккумулятора емкостью 450 китайских мА*ч.
В режиме TURBO 0 консоль продержалась 4 часа 33 минуты. В режиме TURBO 3 - 3 часа 38 минут. 

Ниже описаны встроенные программы. Так же описан принцип сохранения и поиска программ на SD-карточке.

Встроенные программы доступны, если в консоль не вставлена карта памяти, либо на этой карте нет ни одной программы.

Snake

Старая добрая змейка. Необходимо ползать по полю, поедая вкусности, при этом нельзя себя укусить за хвост и нельзя врезаться в стенку. При поедании вкусностей змея растет. Уровень завершается при достижении змеёй определенной длины.

Кнопки A и B - поворот змеи против и по часовой стрелке.
Стрелки - явное задание направления движения змеи.
S - включение-выключение звуковых эффектов.
P - Пауза/выход/справка.

Перемещение по меню - стрелки вверх-вниз, выбор - А или В.

На первом уровне необходимо съедать вишни, бананы и яблоки.
Как только змея вырастет до определенной длины, происходит переход на следующий уровень.
На всех уровнях, начиная со второго, на игровом поле появляются дырки-телепорты. Увеличивается количество доступных к съедению фруктов.
Но и появляются несъедобные камни. Дырки телепорта и камни иногда меняют свое местоположение случайным образом.
Так же, если жизней у змеи меньше трех, на поле иногда появляется дополнительная жизнь (+1).

Xonix

Старая (1984г) аркада. Игровое поле представляет собой прямоугольник "суши", внутри которого "море". По морю в диагональных направлениях двигаются "морские монстры", по суше - "сухопутный монстр".
Игрок может свободно передвигаться по "суше", где он уязвим для "сухопутного монстра". Выходя в "море", он оставляет за собой след, уязвимый для "морских монстров", при этом в "море" нельзя изменить направление движения игрока на противоположное, можно поворачивать только на 90 градусов в любую сторону, также в "море" нельзя останавливаться.
Игра считается проигранной, если игрока или его след собьёт "сухопутный" или "морской монстр". Так же наступает проигрыш при попытке игрока в "море" изменить направление движения на противоположное или наехать на свой собственный след.
Как только игрок снова оказывается на "суше", его след превращается в новую "сушу". Если при этом в "море" появилась замкнутая область, не содержащая "монстров", то вся эта область также превращается в "сушу".

Проще говоря, управляя игроком, необходимо отсекать куски "моря", превращая их в "сушу", а "монстры" этому процессу мешают.

Управление игроком - кнопки со стрелками.
S - включение/выключение звуковых эффектов
P - Пауза/выход.
Перемещение в меню паузы - стрелки вверх-вниз, выбор - А или В.

Tetris

Старая (1985г) аркадная игра-головоломка. Написана Алексеем Пажитновым, сотрудником ВЦ АН СССР. Игра за 39 лет портирована на огромное количество игровых приставок, консолей, компьютеров по всему миру. За право распространения игры боролись Atari, Nintendo и другие гиганты мировой игровой индустрии....
Цель игры - укладывать в "стакан" размерами 10 х 20 падающие сверху фигурки тетрамино. Полностью заполненные строки уничтожаются, принося игроку очки. 

Управление:
Стрелки влево-вправо сдвигают падающую фигурку влево или вправо. Нажатие стрелки вниз ускоряет падение фигурки, пока кнопка нажата. Ускоренное движение фигурки так же приносит дополнительные очки. 
Кнопка А и стрелка вверх вращают фигурку против часовой стрелки
Кнопка В вращает фигурку по часовой стрелке
Кнопка S - включает и выключает звуковые эффекты
Кнопка P - меню паузы или выхода из игры.
Перемещение в меню паузы - стрелки вверх-вниз, выбор - А или В.

В игре доступны два варианта цветового оформления, выбираемые при запуске - цветные фигурки на черном фоне ил имитация черно-белого ЖК-экрана. 

Вариант оформления выбирается стрелками вверх-вниз. Выбор  - кнопка А или В.



Clock

Просто стрелочные часы.
Выход из программы - по кнопке Р

______________________________________________________________________________

Так же напомню, что нажатие и удержание кнопки Р более 5 секунд завершает работу любой программы.

______________________________________________________________________________

SD-карта

Карту можно вставлять и вынимать даже при включенной консоли. При изъятии карты главное, что бы светодиод активности карты не горел. Изъятие карты при горящем светодиоде активности может привести к порче данных на карте вплоть до сбоя файловой системы.

При построении списка программ консоль обращается к карте. 

Есть 2 режима работы с картой - работа со списком программ из файла и сканирование карты и построение списка программ.

Работа со списком программ из файла.

Если карта доступна, то в первую очередь ищется файл GBasic.list

Это файл со списком программ, доступных для запуска. В файле можно программы разделить по категориям. Тогда, если категорий больше одной, консоль будет сначала отображать список категорий, а при выборе категории - список программ этой категории.

Файл GBasic.list имеет структуру, схожую с ini-файлами.
Точка с запятой указывает на начало комментария.
Пустые строки игнорируются.
В квадратных скобках указываются [ категории ] программ.
Остальные строки считаются ссылками на файлы программ. 
Ссылка должна содержать имя  файла и путь к нему.
Путь должен начинаться обратным слэшем "\" либо буквой диска, двоеточием и обратным слешем. Буква диска не имеет значения и игнорируется.
При загрузке списка файлов наличие этих файлов не проверяется. При попытке запуска несуществующего файла будет выводиться соответствующая ошибка.
После имени файла можно указать до 127 символов описания программы, отделив их от имени файла двоеточием ":". Общее ограничение длины строки с именем файла и описанием - 255 символов.
Если присутствует описание программы - становится доступным действие INFO для данного файла. Так же производится поиска файла с расширением .icon - см. ниже.

Пример такого файла:

Сканирование карты и построение списка программ.

Если файл GBasic.list отсутствует, консоль начинает сканировать карту на предмет файлов с текстом программ (*.bas) и ранее скомпилированных программ (*.bbc).

Сканируется корневой каталог карты памяти и каталоги первого уровня.

Все найденные программы заносятся в общий список, который потом будет отображен на дисплее консоли

Картинки (иконки) для программ.

Если рядом с файлом программы будет лежать файл с таким же именем, но с расширением .icon - консоль это запомнит и при наведении курсора на этот файл в списке будет доступно действие INFO и по нажатию кнопки Вправо консоль попытается показать изображение из этого файла. Изображение должно быть сохранено в формате 16-битного цвета RGB565 (программа конвертации) и иметь размеры не более 220х220 пикселей. 

Запуск программ.

Консоль умеет выполнять только файлы скомпилированных в байт-код программ. А программы на бейсике консоль сначала компилирует в байт-код, который потом выполняется.

При запуске программы консоль анализирует наличие на карте памяти как файла с текстом программы (*.bas), так и скомпилированной в байт-код программы (*.bbc). Если присутствуют оба файла - запускается файл с более поздней датой. 
Если есть только файл с текстом программы либо его дата больше, чем у скомпилированного файла, то сначала производится компиляция программы в байт-код, при этом создается (или заменяется) файл .bbc, а потом этот файл запускается на выполнение.

*Почему bbc? Да все просто, потому что Basic byte-code.

Что будет, если нет карты памяти или на ней нет программ ?

В этом случае консоль отобразит список встроенных программ (см. выше) - три игры и демо-программа стрелочных часов.

______________________________________________________________________________

К текущему моменту у меня подобрался маленький набор программ - три игрушки и несколько демонстрационно-тестовых программ.
Они собраны в один архив, который достаточно распаковать на пустую карту памяти и вставить в консоль.

В архиве присутствуют:

Три игры в категории Games - Змея, Зоникс и Тетрис

В категории Demos & Tests следующие программы:

SoundTest.bas - простой тест звука, стрелками вверх-вниз выбирается громкость, влево-вправо - ноты До-Ми-Соль от 2 до 6 октав. Выход - кнопка Р.

GraphTest.bas - отрисовка градиентов цветов, заливка экрана линиями в цикле и прямоугольниками для скоростей Turbo от 0 до 3, какие то тесты вывода линий, текста, пикселей, мелкого спрайта 16 х 16 пикселей.... Переход к следующему тесту - нажатие любой кнопки. Нажатие Р - досрочный выход из теста.

StarBlink.bas - Просто мигающие разноцветные точки. Выход - Р.

Clock.bas - простые стрелочные часы с секундной стрелкой и выводом даты. Выход - нажатие любой кнопки.

BatteryBench  - Программа теста батарейки. При запуске программа отображает результаты предыдущего теста - режим Turbo от 0 до 3 и время работы программы в часах, минутах и секундах. 
Стрелками вверх-вниз можно выбрать режим запуска теста. Кнопка А или В - запуск теста.
Кнопка Р - выход из программы.
При запуске программа включает соответствующий режим Turbo и начинает рисовать на экране простую анимацию. Параллельно считается и сохраняется время работы программы. На время своей работы программа блокирует автовыключение консоли при отсутствии нажатия кнопок.
Программа работает до нажатия кнопки Р или до завершения работы консоли по разряду батареи.
При следующем запуске программы будет отображено последнее сохраненное время работы и режим Turbo.
Сценарий работы с программой:
1. Зарядить аккумулятор консоли
2. Отключить консоль от зарядного устройства 
3. Запустить программу, выбрать режим и включить его
4. Ждать, пока консоль не отключится по низкому напряжению батареи.
5. Подключить консоль к зарядному устройству и включить ее
6. Запустить программу, посмотреть на время ее работы.
7. При необходимости - зарядить консоль и повторить тест для другого turbo-режима.

______________________________________________________________________________

UPD: Юрий уже успел собрать и даже запилить видосик - тыц!



28 комментариев:

  1. Спасибо.Очень интересно! Есть возможность поэкспериментировать. Все проверю и потестирую.

    ОтветитьУдалить
  2. Залил прошивку и сохранил ваш архив на карте памяти. Все очень интересно.Еще, в течении дня потестирую.Безусловно, часы очень украсили устройство, по приципу, "а чего ж эта штуковина без дела лежит"🙂
    Со звуком , совсем плохо.Но это мои проблемы слуха-это уже не исправить.

    ОтветитьУдалить
  3. Исходники проекта где-то выкладывали?

    ОтветитьУдалить
    Ответы
    1. А для чего?
      Там достаточно всё сложно и развесисто.
      Дело в том, что компилятор - это не первый мой компилятор. До этого была халтурка студенческая где то в 1995-7 годах (точно не помню) - делали для установки скриптовый язык для управления установкой в одном НИИ.
      Оттуда и пошел подход.
      Синтаксический разбор построен на разделении всей строки текста на лексемы и дальнейшей обработке этих лексем.
      Поиска зарезервированных слов, функций и т.д.
      И потом уже конвертация этого всего _чюда_ в машинные команды для виртуальной машины.
      Но одно дело, когда это узкоспециализированный скриптовый язык с кучей ограждений, а другое дело - более-менее простой, но полноценный язык высокого уровня.
      Со своими приколами синтаксиса.
      И иногда я думаю, что не правильней ли было делать последовательный разбор строки и генерацию машинных кодов одновременно. Поскольку трактование следующей лексемы иногда зависит от предыдущей. Например, ERASE - после этого оператора должна стоять переменная массива. А признак переменной-массива в общем случае определяется наличием скобок с индексами после имени переменной.... Вот такой вот бейсик.
      Ну и в результате некоторые случаи, где разбор на лексемы может сработать неверно, приходилось огораживать костылями.
      Исходники получились большие. И с кучей достаточно непрозрачной для стороннего человека логикой. И выкладывать их не вижу смысла - "пионер" в них не разберется. А не-пионеру - ему они не нужны. Поскольку все равно не получится взять и использовать у себя без допиллинга. Опытному человеку проще спросить, как реализовывалась та или иная фишка. И будет достаточно описания алгоритма и/или фрагмента кода.

      Удалить
  4. В основном интересуют исходники игр проекта - Тетрис / Змейка / Хоних - в качестве получения опыта расковырять их сделать карманную игруху на мк. Те исходники что находил - были сложными для повторения.

    ОтветитьУдалить
    Ответы
    1. Игры на васике есть в образе СД карты в этом посте.
      Тетрис на паскале у меня где то был.

      Удалить
  5. Спасибо скачал образ SD карты, но что-то Васик после "C" очень туго воспринимается.

    ОтветитьУдалить
    Ответы
    1. нууу... тетрис могу паскалевский отдать.
      а зоникс - я его сразу на васике писал.
      Основная проблема была - найти нересурсоемкий алгоритм заливки области. И без рекурсии.

      Удалить
    2. Это еще что... вот перепишу тетрис на PL/SQL и можно будет играться в оракловой консоли.... Наверное...
      А по поводу васика - советую прочитать описание его - https://goldenandy.blogspot.com/2023/03/G-BASIC-syntax.html

      Удалить
  6. Андрей у вас 1-2 пустые платы остались? Интересно сделать консоль поюзать.

    ОтветитьУдалить
    Ответы
    1. Приветствую. Да, остались. Могу отправить новой почтой или самовывоз с метро Левка Дебелого. С данным вопросом лучше в телеграмм. @GoldenAndy

      Удалить
  7. Андрей а не могли бы добавить детали в комплект с платами - если есть лишние - кроме дисплея, платы с мк F411 и резюков? На 2 комплекта. На метро Левка Дебелого - в рабочее время? Сейчас телега слетела буду восстанавливать.

    ОтветитьУдалить
    Ответы
    1. Так а что, кроме плат, добавить? там же деталей раз-два - и всё...
      Вибру и слот под карту могу предложить...
      Стабы и кнопки есть на имраде:
      Кнопка SKPMAPE010 или SKPMAME010 (у SKPMAME010 усилие нажатия меньше - 1.6Н против 2.4Н)
      Стабы MCP1702T-3302E/CB - но увы, дорогие.
      р-канальные феты - ну там почти любой низковольтный можно брать, IRLML6302TRPBF на имраде есть. Недорого.
      Пьезозуделки тоже есть. Наверное, лучше брать корпусную, они громче за счет камеры...
      В зависимости от конструкции корпуса можно, например, взять HPA17F - Ø17x6.8 - толстоватая, но должна звучать относительно нормально (я так думаю). Или плоский квадратный HPS13C, но он дороже и, наверное, более тихий...

      Удалить
  8. Ок, спасибо. По схеме не совсем понял, зачем в схеме повышалка 4056 на 5 В, если есть стабы 1702 на 3,3 В - м.б. что запаиваются или 4056 или 2 шт 1702? На крайняк для проверки поставлю 1117-3,3 на платке вместо 1702. Также если остались пустые платы часов / календаря, тоже взял бы.

    ОтветитьУдалить
    Ответы
    1. 4056 - не повышайка, а контроллер заряда аккумулятора. Когда 5 вольт приходят с ЮСБ на плате контроллера, они идут на 4056 для заряда аккума.
      1702 - один включен все время и питает встроенные в МК часы. Там критично собственное потребление. 1702 ест единицы микроампер. 1117 будет жрать миллиамперы и аккумулятор сядет очень быстро.
      Второй стаб используется для питания МК только во включенном состоянии, там, теоретически, можно и 1117 поставить... но все равно, батарейку жалко.
      Лучше поискать малопотребляющие LDO, на том же имраде.
      Плат часов давно нет.
      А на метро - я тут почти все время.

      Удалить
  9. Спасибо, не подскажете - чем отличаются MCP1700 / 1701 / 1702?

    ОтветитьУдалить
  10. Вроде нашёл - МСР1701 входное до 10 В, 1702 - до 13,2 В. Цоколёвка одинаковая, на РКС по 50 грн.

    ОтветитьУдалить
    Ответы
    1. Тогда без разницы. Входное у нас - литий, 4.3 вольта...

      Удалить
  11. Вместо танталов можно ставить smd керамику 47 или 100 мкф?

    ОтветитьУдалить
    Ответы
    1. Да хоть обычные электролиты.... Это ж просто питание.
      Возле LDOшек даташит рекомендует ставить керамику, а в остальных местах пофиг.

      Удалить
  12. MCP1702-3.3 вот сдесь на Али очень приемлемая цена.Стаб очень хороший, взял пару комплектов по 20 шт.
    https://sl.aliexpress.ru/p?key=5eytZqZ

    ОтветитьУдалить
    Ответы
    1. Как то стремно на али брать... Вполне может быть перемаркировка. Как приедет - проверьте, пожалуйста, соответствуют ли стабилизаторы заявленным характеристикам.

      Удалить
  13. Проверял, все соответствует даташит.
    Кроме вашего устройства, стаб стоит еще в одном, все работает хорошо.
    Откровенного обмана на Али стало много меньше, но всё нужно проверять.

    ОтветитьУдалить
    Ответы
    1. Меня в этих стабах интересует, в принципе, только один параметр - собственное потребление без нагрузки. Вы его меряли? Что потребляет сам стабилизатор?

      Удалить
  14. Я особо себя и стабы не мучал.Именно и проверил ,потребляемый ток и напряжение стабилизации.Точно цифры не помню ,но все примерно соответствовало.
    Я эти стабы приметил еще на вашей первой выкладке материалов, заказал и удачно, за пару нелель, они пришли.
    Один стаб сейчас стоит в расширенной версии Тестера Маркуса, там требования повышенные ко всему.

    ОтветитьУдалить
  15. Какие стабы и где заказывали?

    ОтветитьУдалить
    Ответы
    1. MCP1702-3.3
      Я брал на Имраде достаточно давно, еще когда делал вторую версию дозиметра.
      PIN1000 нашел на алишечке... Ссылка на али у него кривая (из приложения вроде нормальные не получаются).
      Нормальная вот: https://www.aliexpress.com/item/32914061491.html - 20 шт $1.16 и $0.41 дешман-доставка или $1.89 стандартная доставка с треком и выбором точки доставки.
      Условно - по 15 центов штука.

      Удалить

======= !!! ВНИМАНИЕ !!! ======================================================================
Гугл умный и боится спама. Поэтому иногда ваши комментарии Гугл отправляет мне на премодерацию. Отправлять или нет - решаю не я, а алгоритмы Гугла. Если ваш комментарий не появился сразу, значит я получу уведомление и опубликую ваш комментарий через некоторое время. Я стараюсь это делать достаточно оперативно.