Просмотр полной версии : NoNaMe RTS - "за неделю на изичах"
Проект 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...
Ку, посмотрел код, не во всё вникал, но неплохо, не плохо..
Если, я правильно понял, там таблица жирная из минусов, но скорость нормас )
Это меня NEO SPECTRUMAN наставил на путь истинный, ссылаясь на Алона. Про таблицу минусы не догнал немного, если LD, PUSH, то 12288кБ, без атрибутов, плюс байты восстановления стека и прыжок обратно в код программы. Скорость отрисовки фона самая быстрая выбиралась, но минус в том, что к RAM7 вывод спрайтов без буфера не подвязать. Вот если бы в cpu0 можно было разные страницы подключать, один какой-то клон подобное умеет, не помню какой.
Про таблицу минусы не догнал немного, если LD, PUSH, то 12288кБ, без атрибутов, плюс байты восстановления стека и прыжок обратно в код программы.
Я про этот минус и говорю, правда, насчитал поменьше, таблицу, в 192 тайла * 4 (LD & PUSH) = 768 байт.
У меня на тайл уходит 674 такта, и нет такой таблицы жирной в 13кб + можно рисовать в 2 экрана. В любом случае, каждый подход имеет право на жизнь, для каждого своего случая.
У тебя фон около 130000 тактов занимает. В данном случае, подготовка фона столько же занимает. Но потом за фрейм (в половину быстрее) кидает фон в экран, но за счёт 13кБ. Кидать фон могу в любую страницу, только адрес в стек установить. Больше всего раздражает, что нужно страницы щёлкать со спрайтами и тайлами. Этот способ специфичен, бесспорно, используется магия Медноногова.) Но с уровнем развития ZX (камень в огород "Повелителю"), считаю, что нужно использовать 1024кБ, Turbo - 7 или 14Мгц, страницы в cpu0.
В данном случае, подготовка фона столько же занимает
Не каждый фрейм обновляется всё. Имеется буфер в 192 байта, отвечающие за каждый тайл, в который меняются биты, отвечающие что обновлять (бэкграунд, туман и т.п.)
т.е. ~ 15к уходит, если ни чего не меняется в кадре. если тайл требуется перерисовать, тогда плюсуй к 15к на тайл 674 тактов на его обновление и т.д. и т.п.
Deadly, правильно ли понял? Фон рисуется в экран, когда спрайт бежит, то буфер в 192 байта обрабатывается и на основании его идёт рефреш фона, не всего фона? Типа, как у Лорда?
Аблосютли, не знаю как там у великого "Лорда Драгона" сделано, но это нормальная практика, зачем рисовать, то, что не нужно?
У Повелителя похоже тоже самое. Я по удалёнке последние видео смотрел, на 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.
Dart Alver
04.06.2021, 19:50
П.С.: Просьба не переносить тему и активно не чистить флуд и т.п.,...
Ну её наверно правильнее было бы изначально в программировании создавать хотя х.з.
попробуем объединить кладезь данных за многолетия по разработке RTS на ZX Spectrum.
В данном примере используется нулевая страница ОЗУ (RAM0), подключённая вместо ПЗУ d .
Данный пример уже по сути не для спектрума а для клонов 256k и выше.
Из классики только на плюсах есть подмена пзу, но там попутно меняется вся карта сегментов процессора, а из клонов...
У многих (да почти у всех) клонов с доп. памятью есть возможность заменить ПЗУ на ОЗУ.
Скорость отрисовки фона самая быстрая выбиралась, но минус в том, что к RAM7 вывод спрайтов без буфера не подвязать. Вот если бы в cpu0 можно было разные страницы подключать, один какой-то клон подобное умеет, не помню какой.
Ну эва и атм умеют все сегменты менять, профи умеет два сменных окна сегментов (как раз по #4000-#7FFF) + тоже может 0-й сегмент в пзу.
Но сомневаюсь что этим будут часто пользоваться ибо не канон )))
^m00h^, это совсем интересная тема. Особенно про волновой метод в RTS. ) Кто-то Повелителя подколол на начальном этапе. Думаю, что можно воспользоваться алгоритмом с олимпиады по программированию. Найти все маршруты, из одного города в другой. Типа двумерный массив ((3,6),(7,3),(6,4),(x1,x2)), где x1 - это город с которого выходим, x2 - это город куда приходим. Найти все маршрут по городам задачка на несколько строк, города (checkpoint) можно установить сразу, либо в процессе игры генерировать. Как бы виртуальные дороги, юниту немного времени уйдёт досчитать маршрут от ближайшей точки дороги к пункту назначения. В warcraft для этого есть дороги, они и приводят куда нужно. Здесь можно сделать, также дороги невидимые от checkpoint до checkpoint (если их нет в анимации). Этот приём в играх используется, в Settler совсем явно. Но это только набросок для ZX.
В комплекте сорцов от ЧВ идет демонстрация алгоритма поиска пути
WTRACE_D.EXE
там все просто и безо всяких дорог и вейпойнтов.
Вот накидал на скорую руку. 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 на изичах не для спектрума.
Ну что сказать ? Поскольку ваша программа при таком подходе на спектруме всё равно никогда не пойдёт, а сможет пойти только на тех клонах которые имеют как минимум 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 и прочие обзавелись приличными играми под свои особенности. Но хотелось бы чтобы в таком случае хотябы в названии темы была отсылка что эта тема для расширенных возможностей некоторых клонов.
Подскажите, по памяти, пожалуйста.
средняя ~5.5к
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к тактов.
У меня точно так-же с таблицами. И вот тут задумаешься неужели таблицы не есть гуд? Неужели доктор Барс был прав, а Джерри вводил всех в заблуждение?...
75879
Накидал немного всякого, спрайты отображаются по знакоместу по Х. Сорцы позже выложу, т.к. там сейчас каша. Фон, 53 спрайта с музыкой не более 200к тактов, но без пиксельных сдвигов по Х координате.
П.С.: В шапку выложил сборку Totalcmd &Notepad++ &SJAsm &Unreal, с относительными путями, типа, Portable. Прикрутил там минимум. Если есть желание добавить нужные инструменты или подобное, пишите (Некоторые вещи не смог осилить), дополню. Сборка получилась нужная в полевых условиях.
Подскажите, пожалуйста, savelij появляется здесь на форуме? Или его нужно на других ресурсах искать?
Заинтересовался NeoGS, исходники актуальные уже нашёл его, но всё осилить сразу не получается и по-ходу на долго это может затянуться. Может у кого-то есть понимание и наработки использования его сорцов, был бы рад любой помощи!
Подскажите, пожалуйста, savelij появляется здесь на форуме? Или его нужно на других ресурсах искать?
Заинтересовался NeoGS, исходники актуальные уже нашёл его, но всё осилить сразу не получается и по-ходу на долго это может затянуться. Может у кого-то есть понимание и наработки использования его сорцов, был бы рад любой помощи!Он доступен в телеге savelij13, пиши ему в в чате https://t.me/zxevo
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.: Промежуточные исходники, позже, не "причёсывал" ещё. И одному тяжело всё даётся, если что.
Модуль переключения страниц, пока без ATM, описание в исходниках
76262
76669
Проверил здесь мышь. Память выделить под карту, типа, в "куче".
Нужно данные уже подгружать. В идеале хотелось бы с SD (NeoGS) для теста и удобства. Нет ни у кого обёртки под драйвер? Чтение хотя бы. Или альтернатива.
Приветствую!
Появилось недавно время, решил немного продолжить. Перешёл на VS Code. Накидал файл, с более менее понятной структурой. Переписал обёртку для поиска клона (убрал ошибки, с ATM до сих пор не подружил, т.к. эмуляторы изначально код не признают, видно там tr-dos надо как-то подтягивать). Драйвера логические и физические, совместил с переменной (бейсикNN и номер активного экрана).
Накидал модуль mngrRAM, хоть она и маленькая, но в указанной области создаёт таблицу и умеет в этой области выделять память (удалять и т.п. не реализовано), не привязана к адресу и не использует переменные. Версия mngrRAM_0.0.0.4 (старая) отличается, по вызову и сохранению при выходе. В общем думаю пригодится там описание есть.
Есть желание, немного доработать инициализацию. Поиск доп. оборудования, драйвером всяких SD и т.п. Как я понимаю, структурированность и система отнимает много ресурсов разработки. Вопросов много, задам чуть позже...
Исправлены ошибки и недочёты в модулях драйвера. Исправлена логика для DeZog, в конфигурациях присутствует своя разметка памяти, её можно использовать в встроенном дебагере. В main.a80 есть пример использования в режиме эмуляции (переменная Emulator = 1).
Черновик (изменения не прописаны, не структурированы). Добавлена работа с картой. Опционально делается цветной. Прерывание, AY, мышь. Можно двигать WASD, зажать правую (среднюю) кнопку мыши и тоже двигать. В unreal: за место main.lockmouse=MMB, должно быть main.lockmouse=SHIFT ESC. Перемещение за счёт создания нового фона и переброски в экран.
Интересен момент. Если тайл - 32Б, то адресация и вычисления простые, но если +4Б цвета, то как хранить и адресовать - ясности нет. Есть какие-то решения?
В шапку добавлен плеер NeoGS (раздел Файлы). Адаптирован под SJAsm. Изменения не вносились. Автор кода - Вячеслав Савенков (Savelij).
Небольшой тест возможностей NeoGS - Test18032025.zip (http://tebeen.ru/pub/ZX-Spectrum/Test/Test18032025.zip) (без httpS)
Если WIN11, то нужно в свойствах RUN.lnk и unreal\unreal.exe разблокировать доступ... Выставлено 100.000 тиков, как бы, турбо.
Исходники чуть позже...
Выложены исходники работы с NeoGS, проигрывания треков и сэмплов, загрузки файлов. Есть примеры и исходники запроса процедур, сам проигрыватель в бинарнике - пока чистится. Тестовый образ SD прилагается. Имена процедур описаны в local_define.a80 (но не все могут работать, т.к. не проверены).
Можно озвучивать игры и приложения. Будут пожелания, обращайтесь. Файлы mp3 чистить от картинок (прогой mp3tag), не все mp3 проигрываются (типа, голосовые с сайтов TLS), связано с эмулятором или нет - не ясно.
ссылка на NeoMP3 и образ (http://tebeen.ru/pub/ZX-Spectrum/Source/NeoGS/)
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot