PDA

Просмотр полной версии : ОС для ZS GMX



izzx
16.11.2024, 20:10
Делаю многозадачную ОС для Scorpion GMX. Рабочее название ZOS или OSZ.
https://github.com/izzx-git/OSZ
На облаке в папке OSZ:
https://drive.google.com/drive/folders/19-O-MY2XkgRUmUUZ98xZ83juCuaBe32I?usp=sharing

Первый ролик:

https://youtu.be/QjW9sqKQdbQ

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

Из описания:
Поддерживается SMUC и ZC, FAT32 (то, что умеет монитор).
Прошивка нужна свежая от LW/PLM, версии примерно 40 и выше.
Одновременно может быть запущено до 8 процессов,
открыто до 8 файлов.
Используется ОЗУ 2 Мб.

Запуск:
Скопировать папку "OSZ" на диск FAT32 и запустить файл hobeta "os.$c"
через навигатор или автозапуск.
Или запустить образ дискеты OS.TRD.

Управление:
Ss + Enter - Переключение задач
Cs + 1 - Rus/Lat
Cs + 2 - CapsLock

В планах:
Поддержка TR-DOS дисков (сейчас только FAT).
Монтирование TR-DOS образов и запуск программ.
Возврат в ОС по кнопке сброс.
Портирование приложений (уже работает Moon Rabbit).
Монопольный режим
Работа процессов реального времени (каждое прерывание). Например, плеер AY (уже есть).
Многозадачная работа с сетью через ESP.
Удобная работа с большими объёмами информации в памяти (>2 страниц).
Удалённый терминал
Сетевые папки
Поддержка мыши


------------------------------------
Информация для программиста.
Системные вызовы описаны в "os_defs.asm".
Система использует вызовы теневого монитора для работы с дисками.
Система находится в странице 0, вместо ПЗУ.
Страницы 1-4, 6 - зарезервированы для монопольного режима одного приложения.
Обычные процессы используют окна памяти #8000 и #c000.
Каждому процессу даётся 4 страницы и можно запрашивать дополнительные.
Две страницы под буфер экрана. Экран по умолчанию расширенный 640*200.
Используется аппаратный скрол экрана.
В консоль процессы могут выводить текст в любое время.
Получать коды нажатых клавиш может только процесс в фокусе.
Планируется монопольный режим для одного приложения, которому будет доступна
память от #4000 и страницы 0-7.
Доступ к открытым файлам по их ID имеет только тот процесс, который их открыл.
Но нет защиты от того, что этот же файл откроет другой процесс.
Процесс имеет доступ только к своим страницам памяти,
а также к видео страницам 5, 7, 39, 3a.

Процессам рекомендуется:
использовать системные вызовы ОС

Процессам не рекомендуется:
Менять прерывания
Менять адрес стека
Переключать страницы памяти напрямую
Обращаться к дискам напрямую или через монитор

В теневой монитор по кнопке выходить можно, но после файловых операций в нём
и возврата в систему может что-то пойти не так.


Использован код авторства:
LW/PLM (опрос клавиатуры и др.)
S.V.Bulba (pt плеер)
Kulich (radio)
Nihirash (Moon Rabbit)
и прочие библиотеки/куски кода, какие удалось найти ).
Источник вдохновения NedoOS (Alone Coder).

izzx
12.12.2024, 17:20
Пару недель думал как сделать в режиме многозадачности работу с модемчиком ESP. Решил, что это безнадёжное дело.
Так то сокеты, или соединения, до 5 штук оно умеет, и даже работает вроде. Но валит в одну кучу свои ответы типа OK, Ready, не указывая про какое соединение идёт речь. Не понятно как их отсортировать.
Отправляешь пакет, ждёшь сообщение SEND ОК. А вместо этого приходит очередной пакет для другого сокета..
К тому же буфер для отправки и приёма всего один. Памяти мало. Сложна.

В общем, сейчас вполне работают с сетью два приложения, но в порядке очереди. Через системные вызовы, конечно.

izzx
07.02.2025, 18:42
Для проверки как будет работать приложение в графическом режиме, написал тетрис.
Пришлось дорабатывать очередь задач, чтобы не мельтешили спрайты. Сделал так, чтобы приложение в фокусе выполнялось первым после прерывания.
Но при этом после него все остальные процессы тоже выполнялись.
Тетрис получился не особо динамичным, но играть можно.


https://youtu.be/7VA6qHZBYZ0

izzx
27.05.2025, 19:22
Ещё добавил пару приложений:
Update - обновляет ОС с сервера через интернет.
ArtView - показывает картинки с сайта zxart.
Можно одновременно слушать AY музыку с инета и смотреть картинки. Когда ещё такое было через ESP?
На самом деле приложения качают файлики в порядке живой очереди, но это детали.
Теперь три самых главных приложения есть (ещё radio).
Спасибо Kulich и LW. А так же тестерам-добровольцам.
https://github.com/izzx-git/OSZ/tree/main/Release

izzx
24.07.2025, 11:55
С помощью добрых людей частично портировал плеер GP. Вернее его версию из одной игры.
Только часть для проигрывания OPL до версии 3. То есть, поддержана карта BomgeMoon.
На сколько правильно теперь играет точно не скажу, надо проверять на реале. Я пока запускал только в эмуле.

https://pic.maxiol.com/thumbs2/1753344826.1442387099.sshot000000.png (https://pic.maxiol.com/?v=1753344826.1442387099.sshot000000.png&dp=2)

Играет пока только файлы VGM. Но можно эти файлы сделать из VGZ, распаковав обычным архиватором.
Вот тут их больше тыщи штук одним файлом можно скачать:
https://opl.wafflenet.com

ЗЫ. На мунсаунде наверное тоже должно заиграть.

upd. Проверили на двух реальных компах. Пока что работает, после корректировки плеера. И порт на карте надо сделать двойной (#24-27, #C4-C7). Спасибо Alex, тестировал это всё несколько дней.
https://zx-pk.ru/threads/36279-bomgemoon-opl3-zvukovaya-karta-dlya-nemobus.html?p=1216840&viewfull=1#post1216840

upd2. Всё-таки добавил поддержку VGZ. Хорошо, что памяти с запасом, всего лишь одна-две композиции не влезает из тех, что мне попадались.
486 HEART ON FIRE.vgz - в распакованном виде почти 3 мега.

izzx
11.10.2025, 19:11
Вот ещё видео как играет бомжемун:


https://youtu.be/tACSuEH3uyA

Кстати пока что возможно перекрытие буфера приёма ESP и адреса распаковщика файла VGZ. Распаковщик работает в монопольном режиме и занимает адреса начиная с #4000. Если в это время какой-то процесс качает что-то из инета, возможен конфликт. Потом подумаю как решить вопрос.

Mick
11.10.2025, 19:53
Вот ещё видео как играет бомжемун:

youtube как бы заблокирован. Так что мало кто может посмотреть твои ролики.

izzx
11.10.2025, 20:20
youtube как бы заблокирован
об этом я не подумал.
А вчера ко мне подошёл знакомый с телефоном и говорит: а что я не могу ролик на телефоне посмотреть? Он оказался вообще не в курсе, что юпуп заблокирован.

Вот сюда ещё ролик положил:
https://drive.google.com/drive/folders/15vwULcwdgUnjB-CxX0_Aw0ZtqripoXVy