-
Демонстрация работы сетевого функционала "Hall of Fame" на серии контроллеров AZ, в данном случае используется дисассемблированная версия игры тетрис (точнее пентикс или что-то подобное) в которую интегрировано API Hall of Fame. В данном случае игра общается с сервером, регистрируется, проверяет возможность логона пользователем и если пользователь не найден - предлагает быструю регистрацию. Далее показан процесс регистрации рекорда и получение таблицы рекордов с сервера.
https://www.youtube.com/watch?v=uIXB8GznP8Y
Канал в телеграм
https://t.me/pdp11_az/
-
Демонстрация подключения и работы с сетевым диском в AZБК.
Данный функционал будет реализован во всей линейке контроллеров AZ и позволит использовать репозиторий софта на https://mirrors.pdp-11.ru/
https://youtu.be/ot622Ptu8aU
-
Статус проекта сетевых дисков для AZ*
проект сетевых дисков "получил время" на разработку
и соответственно я хорошо продвинулся в этом направлении
прямо сейчас уже работает демон обслуживающий монтирование R/O любых образов дисков из архива https://mirrors.pdp-11.ru/
максимальное количество одновременно открытых файлов для работы - 20тысяч
демон способен обслужить до 5k запросов в секунду
полный набор команд демона, я еще не реализовал и не прикрутил средства борьбы с DDOS [у меня есть опыт и готовые модули для этого тоже есть]
теперь можно очертить проект сетевых дисков более четко:
1. диски из архива можно монтировать прямо при помощи API
2. максимальная длина пути - 384 символа (самый длинный путь в архиве сейчас 366, соответственно точно хватит )
3. все диски из архива монтируются только R/O режиме
4. пользователи смогут заводить свои персональные зоны с дисками которые можно будет монтировать в монопольном RW режиме (он будет по-умолчанию)
иначе говоря это будут "персональные облака типа one drive" [TODO]
5. для авторизации будет использовать функционал HOF - иначе говоря это будет единая учетка и для рекордов и для своих облачных дисков
6. ограничений на количество ваших AZ контроллеров работающих под одной учеткой не будет.
7. будет реализована полностью сетевая загрузка с сетевых дисков - иначе говоря можно будет вообще не хранить свои образа на карточке [TODO]
https://forum.maxiol.com/index.php?a...t=0#entry58589
-
Статус проекта сетевых дисков для AZ*
1. будет 4 пространства сетевых дисков
N:/ - это архив в текущем виде - те все что угодно можно монтировать
R:/ репозиторий - буду формировать внятный набор дисков - прошу коллег подключаться к этому процессу
P:/ - персональное облако, будет доступно и на запись
но доступ только для себя
S:/ - shared - облако для возможности делится с кем-то дисками и доступом к ним
досутп будет управляемый
————-
по времени реализации
N: и R: - будут сейчас
P: и S: - позднее тк это надо дописать авторизацию и прочее в демоне
ибо сейчас он просто сетевой сервер
-
Прошивка 00017
Прошивка 00017
в прошивке переработано
в прошивке переработано/добавлено
1. работа бита синхронизация экрана
теперь включение синхронизации фиксирует отображаемую страницу и горизонтальный скролл(сдвиг)
стратегия управления вертиклаьным скроллом исключает его дерганье при изменении отображемой страницы "на лету" (те во время отображения) - результат - более удобное получения более качественной картинки при изменении информации
2. работа сети
- сделано корректное отображение и сохранение дат/времени создания файлов втч и внутри образов RT11 c учетом часового пояса (физически время в контроллере считается GMT но учитывается коррекция часового пояса для WEBDAV)
- сделано управляемое TCP window для более оптимальной работы сервисов
- добавлена поддержка сервисов HOF
- добавлен функционал сетевых дисков
расширение функционала монтирования дисков см команды первый блок
команды 011 003 004 014
полноценная поддержка реализована утилитами
пример утилиты AZSMNT - просмотр назначений дисков втч. и сетевых
пример утилиты - AZDIR - просмотр директории локального диска
(сетевые директории в V17 просматривать пока нельзя)
пример утилиты AZMNT
пример утилиты AZUMNT
Сетевые пространства имен получили буквенные наименования
D5=0:/disks/rt11bk.DSK - это локальный диск, так как имя диска 0:
D4=N:/RT11BK.DSK - это сетевой диск, так как имя диска N:
Поддерживаемые в V17 пространства имен:
N: - сетевой диск из архива - те любой образ c https://mirrors.pdp-11.ru/
данный путь считается корнем
соответственно для монтирования диска OVERKIL.IMG
расположенного по пути
https://mirrors.pdp-11.ru/_bk0010-11...ollection/IMG/
надо указать
N:/_bk0010-11-11m/soft/SuperMax_collection/IMG/OVERKIL.IMG
Указать можно как и утилите монтирования, но и в самом AZ.INI
Важно! регистр имеет значение
есть поддежка русских букв КОИ7/КОИ8
Второе реализованное пространство в V17 имен это R: - репозиторий
это будет репозиторий избранного софта
Ограничения:
- максимальная длина пути - 384 символа (самый длинный путь в архиве сейчас 366, соответственно точно хватит )
- все диски из архива (пространство имен N:/) монтируются только R/O режиме
- все диски из репозитория (пространство имен R:/) монтируются только R/O режиме
3. команды
командный режим реализован через HTTP интерфейс
добавлены две команды
CMD.REBOOT - вызывает перезапуска AZБК
CMD.SCREENSHOT - вызывает формирование скриншота на основании дефолтных настроек экрана
результатом команды является файл-скриншота
распаковать его можно на сайте
https://master.pdp-11.ru/screen_unpack/
Прошивка 00017
-
Сетевое API - AZSERVER
редакция от 2025-01-11
Концепция сетевых дисков:
1. Технически это блочный интерфейс к любому файлу расположенному в пространстве имен.
2. На данный момент поддержаны 2 пространства имен N:\ и R:\
3. Пространство N: - сетевой диск из архива - те любой образ c https://mirrors.pdp-11.ru/
данный путь считается корнем
соответственно для монтирования диска OVERKIL.IMG
расположенного по пути
https://mirrors.pdp-11.ru/_bk0010-11...ollection/IMG/
надо указать следующее имя файла
N:/_bk0010-11-11m/soft/SuperMax_collection/IMG/OVERKIL.IMG
4. Форматы запросов и ответов (упакованные структуры) указаны ниже.
Лицензирование
В связи с тем, что сетевое API создается в расчете на все ретроплатформы, API является открытым решением, единственным условием использования которого в своих решениях является обязательное указание
MAXIOL Landisk technology ®
это должно быть указано и в документации на Ваше решение и при использовании данной функции на стороне ретроплатформы.
Данные для подключения:
DNS name - landisk.maxiol.com
TCP Port - 34162
Структуры
Код:
// структура пакета запроса
typedef __packed struct landisk_reqest
{
unsigned int num_block; // номер блока (32 бита)
unsigned short int command; // команда
unsigned char reserved[32]; // зарезервировано
unsigned char data[512]; // данные - если они отправляются
char path[386]; // путь до диска
unsigned short int crc; // CRC команды
} landisk_reqest_t;
при открытии файла блок данных (data) рассматривается как пакет информации
Код:
// структура пакета открытия файла, информационные параметры
typedef __packed struct landisk_reqest_status
{
unsigned long timestamp; // локальное время контроллера (unix-time)
unsigned long uptime; // аптайм в секундах
unsigned long ip_addr; // локальный ip адрес контроллера
unsigned long dns_srv1; // ip адреса DNS-серверов
unsigned long dns_srv2;
unsigned short int tzone; // таймзона в минутах
unsigned short int platform; // номер платформы
unsigned short int controller; // тип контроллера
unsigned short int version; // версия прошивки контроллера
char build[32]; // дата билда прошивки контроллера
char url[64]; // URL производителя контроллера
} landisk_reqest_status_t;
пакет информации настоятельно рекомендуется заполнять полностью
// номер платформы
1 - PDP-11 - БК 10/11M
2 - PDP-11 - остальные - те ДВК Э60 УКНЦ оригинальные машины итд
3 - MSX
если вашей платформы нет в списке - пишите мне
// тип контроллера
1 - AZБК
2 - AZ - для всех остальных PDP-11 машин
3 - Carnivore2+
для добавления в список Вашего контроллера - пишите мне.
Код:
// команды
#define LANDISK_CMD_OPEN 1 // в ответ успешность/ошибка, и если успешно - размер диска
#define LANDISK_CMD_READ 2 // чтение блока
#define LANDISK_CMD_WRITE 3 // запись блока
#define LANDISK_CMD_CLOSE 4 // закрытие файла
#define LANDISK_CMD_OPENDIR 5 // открыть оглавление по указанному пути
#define LANDISK_CMD_READDIR 6 // прочитать одну запись оглавления в буфер
#define LANDISK_CMD_SEARCH_REQ 7 // послать запрос поиска
#define LANDISK_CMD_READ_SREQ 8 // прочитать одну запись результата поиска в буфер
Код:
// структура пакета ответа с данными
typedef __packed struct landisk_answer
{
unsigned short int result; // результат
unsigned char data[512]; // принятые данные
unsigned short int crc; // CRC ответа
} landisk_answer_t;
Код:
// структура пакета ответа статуса файла
typedef __packed struct landisk_answer_status
{
unsigned char fattr; // File attribute
unsigned short int fdate; // Fat date
unsigned short int ftime; // Fat time
unsigned int fsize; // File size
} landisk_answer_status_t;
это стандартный набор информации о файле-образе в FATформате.
Код:
// ответы
#define LANDISK_ANS_OK 0x0000 // команда выполнена успешно
#define LANDISK_ANS_ERROR 0x0001 // флаг ошибки, устанавливается при любой ошибке
#define LANDISK_ANS_ACCESS_DENIED 0x0002 // нет доступа, устанавливается при любой ошибке доступа
#define LANDISK_ANS_NEED_REG 0x0004 // нет доступа - нужна регистрация
#define LANDISK_ANS_RO_ONLY 0x0008 // нет доступа на запись- данный диск только для чтения
#define LANDISK_ANS_NOT_EXISTS 0x0010 // нет данного образа - неверный путь до файла образа или директории
Для расчета CRC используется ф-я
[attachmentid=10855]
Стратегия работы
1. первая команда должна быть открытие файла (LANDISK_CMD_OPEN)
при запросе на открытие надо указать блок параметров (landisk_reqest_status_t)
в ответ будет прислан блок landisk_answer_t но data[512] надо рассматривать как landisk_answer_status_t
2. далее можно посылать команды чтения
3. на данный момент поддержаны команды LANDISK_CMD_OPEN, LANDISK_CMD_READ, LANDISK_CMD_WRITE, LANDISK_CMD_CLOSE
4. В конце работы желательно (но не обязательно) послать команды закрытия дисков.
Ограничения:
1. не более 100 запросов в секунду с одного IP (иначе сработает блок анти-DDOS и забанит данный IP на некоторое время)
2. не более 10ти "висящих" соединений на IP.
ps: актуальную версию смотрите тут https://forum.maxiol.com/index.php?s...ndpost&p=59531
-
Программирование для AZБК
В связи с возникающими вопросами об использовании возможностей AZБК была создана вот эта тема:
Программирование для AZБК
нашел немного времени и восстановил стенд для записи видео с VGA и обновил видео с примерами
Работа с расширенной графикой напрямую - 256ти цветные видеорежимы: работа с регистрами сдвига (скрола)
в этой теме я выложил перепакованное качественно видео с примерами работы с графикой напрямую.
№1. Замостим плиткой 32х32 весь экран 256х256 256цветов
https://www.youtube.com/watch?v=302X33HZP8s
№2. Замостим плиткой 32х32 весь экран 256х256 256цветов и затем заполним рандомными пикселями (цвет и позиция случайны) хочу обратить внимание на качество генератора псевдослучайных чисел в AZБК (и скорость установки точек)
https://www.youtube.com/watch?v=3yyNwyNJ2A8
№3. Используем длинный рулон: видеорежим 256х256 256цветов - отображаемая часть 64кБ
а весь рулон - 128кБ
для демонстрации замостим плиткой первого типа 32х32 первые 64кБ и плиткой второго типа - следующие 64кБ
далее по таймеру будем крутить рулон вверх вниз
https://www.youtube.com/watch?v=c129EnGw5_A
№4. Используем широкий рулон: видеорежим 256х256 256цветов - отображаемая часть 64кБ
а весь рулон - 128кБ
для демонстрации замостим плиткой первого типа 32х32 левый экран и плиткой второго типа - следующие правый
далее по таймеру будем крутить рулон вправо-влевоз
https://www.youtube.com/watch?v=qklXrmmx8mw
№5. Используем длинный и широкий рулон: видеорежим 256х256 256цветов - отображаемая часть 64кБ
а весь экран - 256кБ (512х512).
те у нас в ширину два "экрана" и "в высоту" два - всего 4
для демонстрации замостим плиткой все 4 экрана дабы их отличать;
далее по таймеру будем крутить рулон по горизонтали и вертикали;
https://www.youtube.com/watch?v=GI7IZwhudHg
№6. Сделаем тоже что мы делали с помощью блиттера ранее - см пример (4. Копирование спрайта с восстановлением фона (команды 11 21 и 42)
далее по таймеру будем крутить рулон по горизонтали и вертикали). Визуально шарик движется поверх фона, технически у нас фон на нижнем слое, а шарик на верхнем. Перемещение шарика сделано при помощи регистров скролла по вертикали и по горизонтали. Это хороший пример оптимизации.
https://www.youtube.com/watch?v=EKcauDV2vX4
№7. Сделаем тоже что мы делали с помощью блиттера ранее - см пример (4. Копирование спрайта с восстановлением фона (команды 11 21 и 42)
далее по таймеру будем крутить рулон по горизонтали и вертикали). Визуально шарик движется поверх фона, технически у нас фон на нижнем слое, а шарик на верхнем. Перемещение шарика сделано при помощи регистров скролла по вертикали и по горизонтали. Это хороший пример оптимизации. Теперь мы еще добавим эффект вращения шарика - переключая страницы памяти. Каждый кадр (60fps ) - новое движения шарика и новая фаза его поворота.
https://www.youtube.com/watch?v=uSRcMzKGsIk
-
Программирование для AZБК
Сейчас рассмотрим примеры использования блиттера:
Работа с блиттером
в этой теме я выложил перепакованное качественно видео с примерами работы с графикой напрямую.
№0.Заполнение константой - команда 0.
заполнение экрана разноцветными прямоугольниками - проверка работы команды копирования константы. Каждый прямоугольник рисуется во время гашения экрана (по VSYNC ). Скорость вывода прямоугольников соответствует частоте кадров - 60Hz.
https://www.youtube.com/watch?v=UZeg4Y7PJXk
№1. Копирование спрайта безусловное - команда 11.
производится копирование спрайта хранящегося линейно в прямоугольную позицию в экране. Коррекция палитры не проводилась, соответственно изображение не такое красивое как могло бы быть. В дальнейших примерах это будет исправлено и показано как это делать.
https://www.youtube.com/watch?v=5jJV1t22PxQ
№2. Копирование спрайта c наложением по SRC - команда 21.
производится копирование спрайта хранящегося линейно в позицию в экране с наложением. Наложение идет только по контуру самого спрайта. Коррекция палитры не проводилась, соответственно изображение не такое красивое как могло бы быть. В дальнейших примерах это будет исправлено и показано как это делать.
https://www.youtube.com/watch?v=l9CGig1xeuo
№3. Копирование спрайта безусловное, с анимацией и движением (команды 0 и 11)
сначала тут идет отчистка экрана при помощи ручного запуска блиттера, затем по таймеру VSYNC идет отрисовка спрайта.
https://www.youtube.com/watch?v=nCDjwCS_fcw
№4. Копирование спрайта с восстановлением фона - выполняется пакет команд 11 21 и 42:
сначала фон сохраняется в память, затем отрисовывается шарик, в следющей итерации фон восстанавливается, вычисляется новая позиция шарика, с нее сохраняется фон в память и отрисовывается шарик. Тут уже заметна реальная скорость блиттера - 3я команда по отрисовке немного не успевает выполнится за время гашения экрана и в верхних строках экрана шарик отрисован не весь - он еще не успел отрисоваться.
https://www.youtube.com/watch?v=iz5KS_uauXU
№5. Подкладывание "под фон" (команды 11 33 и 42). Это усложнение примера 4, тут тоже
сначала фон сохраняется в память, затем отрисовывается шарик, в следющей итерации фон восстанавливается, вычисляется новая позиция шарика, с нее сохраняется фон в память и отрисовывается шарик.
Отличие в математике наложения - тут один из кодов цвета фона объявлен как прозрачный и шарик накладывается только на него, остальные коды являются непрозрачными и наложения спрайта не происходит. Пример интересен простотой создания красивого эффекта и возможностью использовать иной код прозрачности.
(напомню - код прозрачности в схеме наложения слоев экрана всегда 0. )
https://www.youtube.com/watch?v=QQiRVQRLySs
№6. Подкладывание под фон (команды 11 33 и 42) + вращение. Это усложнение примера 4, тут тоже
сначала фон сохраняется в память, затем отрисовывается шарик, в следющей итерации фон восстанавливается, вычисляется новая позиция шарика, с нее сохраняется фон в память и отрисовывается шарик.
Отличие в математике наложения - тут один из кодов цвета фона объявлен как прозрачный и шарик накладывается только на него, остальные коды являются непрозрачными и наложения спрайта не происходит. Вращение реализуется переключением спрайта который "подкладывается".
https://www.youtube.com/watch?v=iF1aCJYMdOY
№7. Подкладывание под фон (команды 11 33 и 42) + дрожание экрана - горизонтальный и вертикальные скроллинги. Это усложнение примера 4, тут тоже
сначала фон сохраняется в память, затем отрисовывается шарик, в следющей итерации фон восстанавливается, вычисляется новая позиция шарика, с нее сохраняется фон в память и отрисовывается шарик.
Отличие в математике наложения - тут один из кодов цвета фона объявлен как прозрачный и шарик накладывается только на него, остальные коды являются непрозрачными и наложения спрайта не происходит. Эффект дрожжания экрана реализуется при помощи регистров вертикального и горизонтального скроллинга.
https://www.youtube.com/watch?v=m8WZivzx5lE
№8 Заполнение константой - команда 0, выжимаем максимальную скорость!
Это усложнение примера 0 -заполнение экрана разноцветными прямоугольниками - проверка работы команды копирования константы; Основное отличие от примера 0 команды блиттера выполняются не по кадровому таймеру, а в ручном конвеерном запуске. Как следствие получаем максимальную скорость вывода прямоугольников.
https://www.youtube.com/watch?v=5ieA__Z5HRw
№9 Применение команды 51 - подкладывание под фон (команды 11 33 и 42) + 51ая команда при столкновении с границами экрана. 51ая команда это заполнение константой по контуру спрайта, удобно для отображения столкновений или попаданий в какой-либо объект. В старых играх часто попадание так отмечалось.
https://www.youtube.com/watch?v=CTr25IZp7y0
№10. Подкладывание под фон (команды 11 33 и 42), но с применением координаты Y. Это технический пример использования в команде не адресного смещения, а координатного.
https://www.youtube.com/watch?v=ka6pziq8F6Q
-
-
После начала разработки контроллеров AZ встал вопрос о написании и оформлении документации, за не имением лучшего было принято решение оформлять всё на форуме https://forum.maxiol.com/index.php?showforum=121
С точки зрения удобства это неплохой вариант, хоть и версия IPB у меня без полноценного WYSIWYG-редактора, часть оформления понимает, но не все.
Соответственно я давно хотел найти какой-то нормальный WIKI-движок, но который бы был удобен в работе: иначе говоря, чтобы процесс оформления документации в нем был как в обычном офисе - без всяких мерзких разметок, тегов и прочей гадости (я пробовал движок WikiMedia - жуть, можно умереть прежде чем что-то оформишь нормально).
И вот в очередной раз я решил обратить внимание на решение на яве - XWIKI и на прошлой неделе разобрался с ее установкой на мою систему.
Он нормально работает с Oracle, живет в контейнере томката, без проблем пробрасывается через апач.
Редактор - полноценный WYSIWYG, картинки/файлы/таблицы итд можно вставлять просто из буфера по CRTL+C/V. Очень удобно в работе.
Вот начал писать документацию - к примеру:
https://azwiki.maxiol.com/xwiki/bin/...BE%D0%B2%20AZ/
AZWIKI Контроллеры AZ® для компьютеров на базе PDP-11