Вход

Просмотр полной версии : NoNaMe RTS - "за неделю на изичах"



Biland
04.06.2021, 12:45
Проект NoNaMe.


1. Ориентир процессор Z80, 1МБ, KMouse, NeoGS, в т.ч. периферия SD, Mp3
2. Вспомогательные модули кода без привязки к адресу.
3. Простота их загрузки - обёртка для SD-Card, TR-Dos и т.п.
4. Работа с NeoGS. Проигрывание mp3.
5. Простая работа с памятью, куча, аллокатор.
6. Использовать RAM0 в cpu0.
7. Стандартный граф. движок для менеджера памяти ATM подобных, с избавлением от промежуточных буферов.



Генерация фона:
1. Для генерации фона используется нулевая страница ОЗУ (RAM0), подключённая вместо ПЗУ. В ней генерируется код типа ld bc,NNNN: push bc;, где далее в NNNN по методу "змейка" подставляются данные фона.

2. Добавлено в генерацию фона, отображение атрибутов (опционально). После вывода фона с атрибутами, можно обновлять только экран, если не было скролла.

Минусы:
- фон заранее подготовленный статичный (ничего там не крутится, не вертится);
- в cpu0 подставлять RAM0 не много ZX умеют;
- почти целая страница кода;
- только на весь экран (full screen)



82017 - NeoGS r165, для SJAsm
82016 - Образ раздела FAT, пустой, 1ГБ


to be continue...

Deadly
04.06.2021, 14:58
Ку, посмотрел код, не во всё вникал, но неплохо, не плохо..
Если, я правильно понял, там таблица жирная из минусов, но скорость нормас )

Biland
04.06.2021, 15:19
Это меня NEO SPECTRUMAN наставил на путь истинный, ссылаясь на Алона. Про таблицу минусы не догнал немного, если LD, PUSH, то 12288кБ, без атрибутов, плюс байты восстановления стека и прыжок обратно в код программы. Скорость отрисовки фона самая быстрая выбиралась, но минус в том, что к RAM7 вывод спрайтов без буфера не подвязать. Вот если бы в cpu0 можно было разные страницы подключать, один какой-то клон подобное умеет, не помню какой.

Deadly
04.06.2021, 15:36
Про таблицу минусы не догнал немного, если LD, PUSH, то 12288кБ, без атрибутов, плюс байты восстановления стека и прыжок обратно в код программы.
Я про этот минус и говорю, правда, насчитал поменьше, таблицу, в 192 тайла * 4 (LD & PUSH) = 768 байт.
У меня на тайл уходит 674 такта, и нет такой таблицы жирной в 13кб + можно рисовать в 2 экрана. В любом случае, каждый подход имеет право на жизнь, для каждого своего случая.

Biland
04.06.2021, 16:19
У тебя фон около 130000 тактов занимает. В данном случае, подготовка фона столько же занимает. Но потом за фрейм (в половину быстрее) кидает фон в экран, но за счёт 13кБ. Кидать фон могу в любую страницу, только адрес в стек установить. Больше всего раздражает, что нужно страницы щёлкать со спрайтами и тайлами. Этот способ специфичен, бесспорно, используется магия Медноногова.) Но с уровнем развития ZX (камень в огород "Повелителю"), считаю, что нужно использовать 1024кБ, Turbo - 7 или 14Мгц, страницы в cpu0.

Deadly
04.06.2021, 16:26
В данном случае, подготовка фона столько же занимает
Не каждый фрейм обновляется всё. Имеется буфер в 192 байта, отвечающие за каждый тайл, в который меняются биты, отвечающие что обновлять (бэкграунд, туман и т.п.)
т.е. ~ 15к уходит, если ни чего не меняется в кадре. если тайл требуется перерисовать, тогда плюсуй к 15к на тайл 674 тактов на его обновление и т.д. и т.п.

^m00h^
04.06.2021, 16:37
Интересны алгоритмы ИИ.

Biland
04.06.2021, 17:45
Deadly, правильно ли понял? Фон рисуется в экран, когда спрайт бежит, то буфер в 192 байта обрабатывается и на основании его идёт рефреш фона, не всего фона? Типа, как у Лорда?

Deadly
04.06.2021, 18:00
Аблосютли, не знаю как там у великого "Лорда Драгона" сделано, но это нормальная практика, зачем рисовать, то, что не нужно?

Biland
04.06.2021, 18:30
У Повелителя похоже тоже самое. Я по удалёнке последние видео смотрел, на 3,5МгЦ видно, что при прокручивании экрана, когда на спрайты возвращается происходит торможение, сразу jackal вспомнился с его лесом. А там ещё снаряды, стрелы нужно прикрутить. Как у Медноногова стрелы центрованы по тайлам, либо как в jackal без привязок. Там тоже рефреш долбить будет.

И, вообще, я посчитал, что более 200к тактов нужно будет, для 50 fps.

^m00h^, это совсем интересная тема. Особенно про волновой метод в RTS. ) Кто-то Повелителя подколол на начальном этапе. Думаю, что можно воспользоваться алгоритмом с олимпиады по программированию. Найти все маршруты, из одного города в другой. Типа двумерный массив ((3,6),(7,3),(6,4),(x1,x2)), где x1 - это город с которого выходим, x2 - это город куда приходим. Найти все маршрут по городам задачка на несколько строк, города (checkpoint) можно установить сразу, либо в процессе игры генерировать. Как бы виртуальные дороги, юниту немного времени уйдёт досчитать маршрут от ближайшей точки дороги к пункту назначения. В warcraft для этого есть дороги, они и приводят куда нужно. Здесь можно сделать, также дороги невидимые от checkpoint до checkpoint (если их нет в анимации). Этот приём в играх используется, в Settler совсем явно. Но это только набросок для ZX.

Deadly
04.06.2021, 18:39
Для рендера всего? Мало

Dart Alver
04.06.2021, 19:50
П.С.: Просьба не переносить тему и активно не чистить флуд и т.п.,...
Ну её наверно правильнее было бы изначально в программировании создавать хотя х.з.


попробуем объединить кладезь данных за многолетия по разработке RTS на ZX Spectrum.

В данном примере используется нулевая страница ОЗУ (RAM0), подключённая вместо ПЗУ d .
Данный пример уже по сути не для спектрума а для клонов 256k и выше.
Из классики только на плюсах есть подмена пзу, но там попутно меняется вся карта сегментов процессора, а из клонов...
У многих (да почти у всех) клонов с доп. памятью есть возможность заменить ПЗУ на ОЗУ.


Скорость отрисовки фона самая быстрая выбиралась, но минус в том, что к RAM7 вывод спрайтов без буфера не подвязать. Вот если бы в cpu0 можно было разные страницы подключать, один какой-то клон подобное умеет, не помню какой.
Ну эва и атм умеют все сегменты менять, профи умеет два сменных окна сегментов (как раз по #4000-#7FFF) + тоже может 0-й сегмент в пзу.

Но сомневаюсь что этим будут часто пользоваться ибо не канон )))

jerri
04.06.2021, 21:15
^m00h^, это совсем интересная тема. Особенно про волновой метод в RTS. ) Кто-то Повелителя подколол на начальном этапе. Думаю, что можно воспользоваться алгоритмом с олимпиады по программированию. Найти все маршруты, из одного города в другой. Типа двумерный массив ((3,6),(7,3),(6,4),(x1,x2)), где x1 - это город с которого выходим, x2 - это город куда приходим. Найти все маршрут по городам задачка на несколько строк, города (checkpoint) можно установить сразу, либо в процессе игры генерировать. Как бы виртуальные дороги, юниту немного времени уйдёт досчитать маршрут от ближайшей точки дороги к пункту назначения. В warcraft для этого есть дороги, они и приводят куда нужно. Здесь можно сделать, также дороги невидимые от checkpoint до checkpoint (если их нет в анимации). Этот приём в играх используется, в Settler совсем явно. Но это только набросок для ZX.

В комплекте сорцов от ЧВ идет демонстрация алгоритма поиска пути
WTRACE_D.EXE

там все просто и безо всяких дорог и вейпойнтов.

Biland
08.06.2021, 19:20
Вот накидал на скорую руку. 53 честных юнита 16х16 пикселей (можете не считать, они там накладываются бывают). Два экрана, фон из cpu0 также генерируется. Итого 500.000 тактов где-то. Это из-за того, что процедуру спрайтов взял чужую, без таблиц, для проверки механизма. Вывод одного спрайта гуляет от 6к до 12к тактов.

Какие рекорды вывода спрайта 16х16 со смещением установлены, примерно? Через буфер и напрямую в экран? Подскажите, по памяти, пожалуйста.

Dart Alver
08.06.2021, 20:56
Вот накидал на скорую руку. 53 честных юнита 16х16 пикселей (можете не считать, они там накладываются бывают). Два экрана, фон из cpu0 также генерируется. Итого 500.000 тактов где-то. Это из-за того, что процедуру спрайтов взял чужую, без таблиц, для проверки механизма. Вывод одного спрайта гуляет от 6к до 12к тактов.

Ну что сказать ? Поскольку ваша программа при таком подходе на спектруме всё равно никогда не пойдёт, а сможет пойти только на тех клонах которые имеют как минимум 256K а все они ещё и турборежим имеют, то смысла вам ориентироваться на спековскую частоту нет никакого, используйте турбо, доп. память и другие плюшки и получится ваша RTS на изичах не для спектрума.

Biland
08.06.2021, 21:39
Ну что сказать ? Поскольку ваша программа при таком подходе на спектруме всё равно никогда не пойдёт, а сможет пойти только на тех клонах которые имеют как минимум 256K а все они ещё и турборежим имеют, то смысла вам ориентироваться на спековскую частоту нет никакого, используйте турбо, доп. память и другие плюшки и получится ваша RTS на изичах не для спектрума.

Ответ был "Но с уровнем развития ZX (камень в огород "Повелителю"), считаю, что нужно использовать 1024кБ, Turbo - 7 или 14Мгц, страницы в cpu0.".

Не могу понять "староверов", которые сидят на "XP", "Семёрке", но не на "XT", наверное, долго ждать когда он тест памяти сделает при включении. И кто "спектрум" загнал в определённые рамки? На кого больше ориентироваться на "буржуев" или иных? 128кБ или 48кБ? TR-Dos или TAP, а может IS-Dos? Кто эти люди, которые стандартизируют? По каким критериям? AY где-то тоже вне закона?

Это эксперименты, не более. Способы использовать расширенные возможности ZX, по памяти, частоте процессора и подмены страниц, технологиям, которым уже более 25 лет, при стандартном экране.

А что есть спектрум - Pentagon128 или KAY1024, а может родной "буржуйский"? А Pentagon это разве не "шляпа"? Nemo всё досконально расписал, что это "мусорный мутант", по многим пунктам, с доказательством. Но мне Pentagon128 и Kay1024 оба симпатичны, без разделения. У Kay1024 и его собратьев есть преимущества, так почему бы не использовать их, не реализовать их заложенные возможности?

И я не думаю, что здесь кто-то сидит из под OS Калибри и OS Минует, они занимаю 3-х дюймовую дискету, наверное, там мало инструментов для полноценной работы.

П.С.: Ладно - это всё лирика. Я обозначил, думаю, своё представление о ZX. Подобная практика здесь на постоянной основе, так что думаю не буду больше углубляться во все эти разговоры. Ну и с точки психоэмоциональных реакций индивидуумов (трололо и т.п.) здесь это прописано в негласном Приложении к правилам, это старым посетителям форума давно известно.

Dart Alver
08.06.2021, 22:27
Это эксперименты, не более. Способы использовать расширенные возможности ZX, по памяти, частоте процессора и подмены страниц, технологиям, которым уже более 25 лет, при стандартном экране.

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


У Kay1024 и его собратьев есть преимущества, так почему бы не использовать их, не реализовать их заложенные возможности?

Ну может я слишком раздраженно выразил своё недовольство - извиняюсь. В принципе я ничего не имею против того чтобы Kay, Scorpion, Profi, ATM и прочие обзавелись приличными играми под свои особенности. Но хотелось бы чтобы в таком случае хотябы в названии темы была отсылка что эта тема для расширенных возможностей некоторых клонов.

Deadly
08.06.2021, 23:19
Подскажите, по памяти, пожалуйста.
средняя ~5.5к

Biland
09.06.2021, 08:17
Dart Alver, по разделу понимаете правильно, но конкретика- это RTS, конкретная игра NoNaMe ).

Dart Alver, если не сложно подсказать, как эти клоны принято называть кратко, чтобы многие понимали?

Deadly, блин не мало, рассчитывал на 3к - 5к в пике. Надо лорда подёргать.

DragonsLord
09.06.2021, 12:52
Но с уровнем развития ZX (камень в огород "Повелителю"), считаю, что нужно использовать 1024кБ, Turbo - 7 или 14Мгц, страницы в cpu0.
Камень отклонён. НЕ КАНОН. Игра обязана идти на 3,5МГц без тормозов, обязана использовать не более 128к, и обязана использовать стандартную конфигурацию RAM и ROM, без всяких левацких втыканий в нижний слот непонятно чего.

Если вы нарушаете эти неприложные истины - вы пишите НЕ на Спектрум, а не понятно на что.

Из сказанного прямой вывод: полноскринный рефреш невозможен на стандартном спеке, ибо это будет примерно раз в 5..6 медленнее, чем подход с частичным рефрешем.


блин не мало, рассчитывал на 3к - 5к в пике. Надо лорда подёргать.
Меня дёргать бесполезно, у меня универсальная процедура. Пиши сам на основе этого:
https://zx-pk.ru/threads/27263-vyvod-sprajta-lyuboj-shiriny-s-tochnostyu-do-pikselya.html?p=915730&viewfull=1#post915730
там чистое время для 2х2 заявлено 3328t - без обвязки. Обвязочку сам сделай.

- - - Добавлено - - -


на 3,5МгЦ видно, что при прокручивании экрана, когда на спрайты возвращается происходит торможение
Никакого торможения не происходит, ибо включён нормалайз. На любых тактах и при любом раскладе стабильный fps

DragonsLord
10.06.2021, 12:16
Это из-за того, что процедуру спрайтов взял чужую, без таблиц, для проверки механизма. Вывод одного спрайта гуляет от 6к до 12к тактов.
У меня точно так-же с таблицами. И вот тут задумаешься неужели таблицы не есть гуд? Неужели доктор Барс был прав, а Джерри вводил всех в заблуждение?...

Biland
25.07.2021, 01:18
75879

Накидал немного всякого, спрайты отображаются по знакоместу по Х. Сорцы позже выложу, т.к. там сейчас каша. Фон, 53 спрайта с музыкой не более 200к тактов, но без пиксельных сдвигов по Х координате.

П.С.: В шапку выложил сборку Totalcmd &Notepad++ &SJAsm &Unreal, с относительными путями, типа, Portable. Прикрутил там минимум. Если есть желание добавить нужные инструменты или подобное, пишите (Некоторые вещи не смог осилить), дополню. Сборка получилась нужная в полевых условиях.

Biland
06.08.2021, 20:00
Подскажите, пожалуйста, savelij появляется здесь на форуме? Или его нужно на других ресурсах искать?
Заинтересовался NeoGS, исходники актуальные уже нашёл его, но всё осилить сразу не получается и по-ходу на долго это может затянуться. Может у кого-то есть понимание и наработки использования его сорцов, был бы рад любой помощи!

Rusazar
12.08.2021, 00:16
Подскажите, пожалуйста, savelij появляется здесь на форуме? Или его нужно на других ресурсах искать?
Заинтересовался NeoGS, исходники актуальные уже нашёл его, но всё осилить сразу не получается и по-ходу на долго это может затянуться. Может у кого-то есть понимание и наработки использования его сорцов, был бы рад любой помощи!Он доступен в телеге savelij13, пиши ему в в чате https://t.me/zxevo

Biland
16.08.2021, 01:46
Test.zip (ftp://soft.biland.ru/PUB/ZX-Spectrum/Test/Test.zip)
, либо тоже самое
Test.7z (ftp://soft.biland.ru/PUB/ZX-Spectrum/Test/Test.7z)

NAS с первого раза может не отдать, железяки конфликтуют видимо.

Ещё немного экспериментов. Запуск через RUN.lnk. В Unreal выставлено 50.000 тактов. NeoGS опробован немного. Фон эпилептичный.

P.S.: Промежуточные исходники, позже, не "причёсывал" ещё. И одному тяжело всё даётся, если что.

Biland
23.10.2021, 02:36
Модуль переключения страниц, пока без ATM, описание в исходниках
76262

Biland
15.12.2021, 22:43
76669

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

Нужно данные уже подгружать. В идеале хотелось бы с SD (NeoGS) для теста и удобства. Нет ни у кого обёртки под драйвер? Чтение хотя бы. Или альтернатива.

Biland
17.02.2025, 20:52
Приветствую!
Появилось недавно время, решил немного продолжить. Перешёл на VS Code. Накидал файл, с более менее понятной структурой. Переписал обёртку для поиска клона (убрал ошибки, с ATM до сих пор не подружил, т.к. эмуляторы изначально код не признают, видно там tr-dos надо как-то подтягивать). Драйвера логические и физические, совместил с переменной (бейсикNN и номер активного экрана).

Накидал модуль mngrRAM, хоть она и маленькая, но в указанной области создаёт таблицу и умеет в этой области выделять память (удалять и т.п. не реализовано), не привязана к адресу и не использует переменные. Версия mngrRAM_0.0.0.4 (старая) отличается, по вызову и сохранению при выходе. В общем думаю пригодится там описание есть.

Есть желание, немного доработать инициализацию. Поиск доп. оборудования, драйвером всяких SD и т.п. Как я понимаю, структурированность и система отнимает много ресурсов разработки. Вопросов много, задам чуть позже...

Biland
18.02.2025, 06:17
Исправлены ошибки и недочёты в модулях драйвера. Исправлена логика для DeZog, в конфигурациях присутствует своя разметка памяти, её можно использовать в встроенном дебагере. В main.a80 есть пример использования в режиме эмуляции (переменная Emulator = 1).

Biland
22.02.2025, 20:09
Черновик (изменения не прописаны, не структурированы). Добавлена работа с картой. Опционально делается цветной. Прерывание, AY, мышь. Можно двигать WASD, зажать правую (среднюю) кнопку мыши и тоже двигать. В unreal: за место main.lockmouse=MMB, должно быть main.lockmouse=SHIFT ESC. Перемещение за счёт создания нового фона и переброски в экран.

Интересен момент. Если тайл - 32Б, то адресация и вычисления простые, но если +4Б цвета, то как хранить и адресовать - ясности нет. Есть какие-то решения?

Biland
27.02.2025, 23:33
В шапку добавлен плеер NeoGS (раздел Файлы). Адаптирован под SJAsm. Изменения не вносились. Автор кода - Вячеслав Савенков (Savelij).

Biland
18.03.2025, 00:37
Небольшой тест возможностей NeoGS - Test18032025.zip (http://tebeen.ru/pub/ZX-Spectrum/Test/Test18032025.zip) (без httpS)
Если WIN11, то нужно в свойствах RUN.lnk и unreal\unreal.exe разблокировать доступ... Выставлено 100.000 тиков, как бы, турбо.
Исходники чуть позже...

Biland
25.03.2025, 22:49
Выложены исходники работы с NeoGS, проигрывания треков и сэмплов, загрузки файлов. Есть примеры и исходники запроса процедур, сам проигрыватель в бинарнике - пока чистится. Тестовый образ SD прилагается. Имена процедур описаны в local_define.a80 (но не все могут работать, т.к. не проверены).

Можно озвучивать игры и приложения. Будут пожелания, обращайтесь. Файлы mp3 чистить от картинок (прогой mp3tag), не все mp3 проигрываются (типа, голосовые с сайтов TLS), связано с эмулятором или нет - не ясно.

ссылка на NeoMP3 и образ (http://tebeen.ru/pub/ZX-Spectrum/Source/NeoGS/)