PDA

Просмотр полной версии : Интернет дали!



Hammer
11.04.2024, 23:03
Приветики!

Специально для криворуких типа меня, я попробовал сделать загрузчик программ в РК через Интернет.

Это когда очень хочется дописать игру, но девайс для загрузки с SD-карты собрать не получается, программаторы не подходят, да и ещё последний в доме мультиметр сдох... Магнитофонный вход конечно выручает, но меееедленно...

Мой вариант максимально простой. На основе ESP32C3. Состоит он из куска макетной платы, разъёма, ESP32C3 и 10-ти резисторов, но можно и без них, если очень хочется. Да и разъём можно заменить пучком проводов :v2_dizzy_roll:

Устройство работает через параллельный порт по команде "R". Слушаем младший бит адреса (PB0), и старший (PC7) бит адреса. Если старший низкий, значит началась передача данных. Если младший изменился, значит в порт ESP32C3 (выводы 0-7) надо выдать очередной байт загруженной программы.

Чтобы не было проблем с хитрыми компиляторами, всё написано в Arduino IDE. А так же есть один PHP файл, если вы хотите разместить загрузчик у себя на сервере, а если не хотите, то можно использовать для тестов временный (https://vtub.me/86rk/upload.php). После загрузки файла на сайте, вы увидите, с какими параметрами использовать команду "R". Затем включаете РК, девайс присасывается к WiFi. Если светодиод на ESP32C3 перестал мигать, значит можно вводить команду "R". Бац, программа загружена!

Вариантов развития такого картриджа много. Можно его и без интернета использовать, как RAM диск. На данный момент к нему пишется программная оболочка с красивостями и использованием файловой системы МК. Но! В одно лицо очень тяжело отлавливать баги. Поэтому предлагаю желающим повторить схему. Она простая:

0 через резистор 1к PA0
1 через резистор 1к PA1
2 через резистор 1к PA2
3 через резистор 1к PA3
4 через резистор 1к PA4
5 через резистор 1к PA5
6 через резистор 1к PA6
7 через резистор 1к PA7

10 через резистор 1к PB0
20 через резистор 1к PC6
21 через резистор 1к PC7

Питание подавать через диод, чтобы во время прошивки РК не пытался запуститься.

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

В настройках ESP32C3 надо выставить 160 мГц. Работает и на 80 мГц, но проскакивают ошибки.

Если кто-то озаботится отрисовкой платы, будет вообще хорошо т.к. меня такой способ загрузки вполне устраивает. Купил бы несколько плат. Пожелания: ESP32C3 должна быть повёрнута мордой к юзеру, USB шнур для прошивки втыкать с правой стороны. Выход с питанием на i2c для подключения экрана или джойстиков. Очень хочется wii nunchuk задействовать.

Код и фотки: 80647

80641

80642

Hammer
12.11.2024, 20:55
Апдейт по проекту!

Теперь девайс после включения мигает светодиодом, пока не подключится к вайфаю, потом запускает локальный вебсервер по адресу: http://radio-86rk.local/

Там вы увидите форму для загрузки файлов. После загрузки своего файла вы увидите с какими параметрами вызывать директиву R.

Если программа стартует с нулевого адреса, можно использовать команду R,7FFF - программа загрузится с автозапуском.

Если сразу после включения вызвать директиву R,7FFF - загрузится дисковая операционная система "МИР", сокращённое рабочее название "PEACE-DOS". В данном случае операционка ничего не делает. Уже написано несколько версий этой системы, есть поддержка I2C ногодрыгом и другие фишки, но релизить пока не готов. В этой версии предполагается, что операционка будет давать команды WiFi девайсу и забирать запрошенную информацию.

Пока можно смело вместо PEACE-DOS положить, например, свою любимую игру, в исходнике это легко сделать.

Буду рад отзывам. Лично я SD-приводом практически перестал пользоваться за ненадобностью.

81553

https://zx-pk.ru/attachment.php?attachmentid=81554&d=1731433835

cy6
12.11.2024, 22:39
использовать команду R,7FFF
Занимательный диапазон адресов.
Как раз в системную область, видео-ОЗУ и стек. :v2_dizzy_indy:

Hammer
12.11.2024, 23:08
Именно так и есть, в результате затирания стека при выходе из подпрограммы происходит переход в начало памяти.

Игры в которые я играю, и которые я сам пишу, к этому относятся вполне лояльно.

В любом случае, после загрузки файла вы увидите правильный вариант директивы R - запускайте удобным вам способом.

https://zx-pk.ru/attachment.php?attachmentid=81558&d=1731442022

Забыл написать, есть один известный глюк. Существует версия Монитора, в котором из кода директивы R вырезано обслуживание ROM диска. С этой версией Монитора девайс работать не будет.

Всем рекомендую брать Монитор из дистрибутива EMU-80.

cy6
13.11.2024, 11:56
в результате затирания стека при выходе из подпрограммы происходит переход в начало памяти
Происходит переход по адресу, считанного из указателя стека. ноль там будет или нет.

Даже если бы было так, переменные Монитора примут случайные значения, синхра поедет (если попадут байты > 80h).
Стандарт конечного адреса, это 75FFh, в конфигурации без РК ДОС.

Ведущий_специалист
13.11.2024, 12:17
Забыл написать, есть один известный глюк. Существует версия Монитора, в котором из кода директивы R вырезано обслуживание ROM диска. С этой версией Монитора девайс работать не будет.
Всем рекомендую брать Монитор из дистрибутива EMU-80.

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

Hammer
13.11.2024, 12:30
Происходит переход по адресу, считанного из указателя стека. ноль там будет или нет.

Абсолютно верно!


Даже если бы было так, переменные Монитора примут случайные значения, синхра поедет (если попадут байты > 80h).

Они примут случайные значения только если вы сами в исходнике сделаете генерацию случайных значений. А можете туда поместить дамп нужных вам переменных Монитора.

Я туда пробовал картинку вставлять, но она очень быстро исчезает. Была бы видеопамять в начальных адресах, было бы очень красиво!

А можете использовать директиву R с другими аргументами, не затирая ничего из того, что вам не хочется затирать.

Очень всё гибко и удобно по принципу работы ROM диска!

Alikberov
18.11.2024, 11:27
Если программа стартует с нулевого адреса, можно использовать команду R,7FFF - программа загрузится с автозапуском.Значит «R1,0» или «R1,» так и не отладилось?

Hammer
18.11.2024, 11:56
Значит «R1,0» или «R1,» так и не отладилось?

Я пока до этого просто не дошёл.

vyachik
23.11.2024, 15:36
Так че там? на пальмире будет работать?

Ведущий_специалист
28.11.2024, 18:10
Если надо - конечно же будет. пара байт в мониторе добавить.

Hammer
28.11.2024, 18:24
Пока можно не торопиться, проект в глубокой доработке. Ускорил прерывания, добился двухсторонней связи с РК. Но увяз в битве за скорость порта ESP32C3.

Pyk
29.11.2024, 00:48
Так че там? на пальмире будет работать?
Если уже сейчас актуально, могу сделать исправленную сборку Монитора Пальмиры.

Hammer
14.12.2024, 17:57
Новая версия прошивки, немного изменена схема железки - на один резистор меньше стало!

Выводы ESP32C3:

0 через резистор 1к PA0
1 через резистор 1к PA1
2 через резистор 1к PA2
3 через резистор 1к PA3
4 через резистор 1к PA4
5 через резистор 1к PA5
6 через резистор 1к PA6
7 через резистор 1к PA7

20 через резистор 1к PB0
21 через резистор 1к PC7

Питание через диод, чтобы девайс при подключении USB разъёма не пытался запустить РК.

Девайс после включения мигает светодиодом, пока не подхватит прописанный в исходнике WiFi, потом запускает локальный вебсервер по адресу: http://radio-86rk.local/

Там вы увидите форму для загрузки файлов. После загрузки своего файла вы увидите с какими параметрами вызывать директиву R.

https://zx-pk.ru/attachment.php?attachmentid=81558&d=1731442022

Если программа стартует с нулевого адреса, можно использовать команду R,7FFF - программа загрузится с автозапуском.

Если после включения и соединения с сетью ничего не грузить, а сразу выполнить директиву R,7FFF - загрузится утилита, показывающая уровень сигнала WiFi. Выход из утилиты - АР2. Значение не обновляется в рилтайме, хотите проверить уровень сигнала ещё раз, значит придётся снова выполнить команду R,7FFF.

https://zx-pk.ru/attachment.php?attachmentid=81698&d=1734185977

Чтобы проверить себя и повторяемость схемы, спаял второй девайс, всё работает, плата максимально компактная:

https://zx-pk.ru/attachment.php?attachmentid=81695&d=1734185817

https://zx-pk.ru/attachment.php?attachmentid=81696&d=1734185838

https://zx-pk.ru/attachment.php?attachmentid=81697&d=1734185851

Исходник скетча для Arduino IDE и исходник утилиты: 81699

Если не происходит подключения к WiFi: - закомментируйте строчку "WiFi.setTxPower(WIFI_POWER_8_5dBm);". Дело в том, что есть старые версии ESP32C3, у которых ошибка в схеме антенны. В новых модулях это исправлено. Но мне попались как раз старые модули с ошибкой.

Проект разделяется на две части. Это сегодняшний вариант, максимально стабильный, настраиваемый, эмулирующий ROM-диск. Второй вариант, это с поддержкой CLI. Почему так? CLI задумывался в первую очередь, как инструмент для настройки девайса через терминал РК. Но я совсем забыл, что в РК нет маленьких буковок...

Само ESP32C3 тоже наполнено сюрпризами. Порт не успевает отдавать данные ППА, поэтому данные в порт надо засылать заранее до следующего считывания ППА. Ещё ПДП тоже вносит дёрганность в передачу данных. А ещё ВВ55 может висеть на адресе отличном от $A000... Окончательно запутал меня тот факт, что разные входы ESP32C3 с разной скоростью (приоритетом???) обрабатывают прерывания. В результате чётко работающий CLI вообще не захотел работать при изменении коммутации. Буду переделывать.

Тем не менее, остался свободным порт I2C, и ещё одна линия порта GPIO. Можно задействовать для чего-нибудь. Ну и утилитка будет дорабатываться по результатам тестирования!

Ведущий_специалист
16.12.2024, 22:31
Проект разделяется на две части. Это сегодняшний вариант, максимально стабильный, настраиваемый, эмулирующий ROM-диск. Второй вариант, это с поддержкой CLI. Почему так? CLI задумывался в первую очередь, как инструмент для настройки девайса через терминал РК. Но я совсем забыл, что в РК нет маленьких буковок...

Ну юзеру всеравно нужно хотя бы выводить список ссид и пусть делает CLI.SETSSID и тд.. Обратная связь с модулем нужна как ни крути.

Hammer
16.12.2024, 22:42
Обратная связь с модулем нужна как ни крути.

Я и написал, что буду переделывать. Но в отдельной версии.

Ведущий_специалист
16.12.2024, 23:01
Я и написал, что буду переделывать. Но в отдельной версии.

А пароль от ссид вводить.... хексом )))

Hammer
16.12.2024, 23:28
1. Есть вариант прописать несколько SSID/паролей, а ESP сама выберет к чему подключаться. Прописать например домашний роутер, и мобилу в режиме роутера, я так тоже делал.

2. Можно запускать ESP в режиме точки доступа, как роутер, и заходить в него на сервисную страницу, менять пароль через вэб-интерфейс.

Надо пока понять, что безглючнее.

Hammer
17.12.2024, 11:38
3. Если не использовать интернет, а мы его пока и так не используем, можно просто переводить ESP в режим точки доступа, а потом к ней подключаться с компа и точно так же заливать программы.

Hammer
08.01.2025, 12:29
Переписал немного утилиту. Пока тестирую.

Неожиданно удобная фича обнаружилась. У меня стандартный Монитор из дистрибутива Emu80, изменённым я чёт больше не доверяю. Но на плате стоит ВИ53 и теперь ещё ИР27 для регулировки амплитуды звука. При включении ВИ53 разумеется не сбрасывается и гудит.

Дописал в утилиту инициализацию дополнительных фич. Очень удобно, если нечем перепрошить ПЗУ и вообще переписывать код Монитора не хочется.