Удаление в знак протеста против действий MM
Вид для печати
Удаление в знак протеста против действий MM
nzeemin, мега-респект за проделанную работу! Всю кропотливость и трудоёмкость переноса игры с одной ретро-платформы на другую, совсем непохожую на неё, поймёт только наверно тот, кто занимался чем-либо подобным. Помню, огромное впечатление произвела рекомпиляция игр MSX для DOS, была такая тема.
Меня даже слегка огорчает, что параллельно на этих глубоких знаниях про устройство игры не делается порт HWYENC на каком-либо языке высокого уровня для гр.библиотеки SDL, которая даёт выход практически на все "большие" платформы.
Позволь пожелать дальнейших успехов, я с большим интересом читаю эту тему.
Также интересуюсь планами на будущее, есть ли мысли портировать ещё игры на УК-НЦ? Может можно как-то задействовать для этой работы собранный Vslav'ом компилятор Си для PDP-11 (+ низкоуровневые подпрограммы на асме ессно).
Oleg N. Cher, спасибо за поддержку!
Понять бы ещё зачем. Ремейки игры уже давно есть.
Сначала этот порт надо доделать, дальше посмотрим что будет.Цитата:
Также интересуюсь планами на будущее, есть ли мысли портировать ещё игры на УК-НЦ? Может можно как-то задействовать для этой работы собранный Vslav'ом компилятор Си для PDP-11 (+ низкоуровневые подпрограммы на асме ессно).
Как тут поможет компилятор Си, во всяком случае в моей работе, я пока не очень вижу.
Исправлена главная ошибка с начальной анимацией.
Доделана индикация Power и движения Lasertron, сделано стирание убитых Vortons с индикатора.
Осталось доделать:
- Анимация beyond Zone 0 при завершении игры
- Режим паузы
- Возможность завершения игры с выходом в меню
- Title screen: при выводе надписи-заглавия проверять клавиатуру, быстро заканчивать если было нажатие
результат запуска последней сборки игры в RT-11 v5.4G
на ЖД УК-НЦ в эмуляторе, как видно на картинке ругани
на недостаток памяти нет, но стартовый экран трапнулся,
как только цвет переключился с жёлтого)
картинка
hobot, похоже что при заходе в программу изменения цветов не хватило стека, он залез на код и испортил его.
В следующей версии увеличу стек.
В этой версии:
- Стек увеличен
- Режим паузы по нажатию Ctrl+P, возврат по любой клавише
- Выход из текущей игры по нажатию Ctrl+C
Осталось доделать анимацию в конце игры.
Вывод алгоритма игры из горы циферок и условностей ретро-платформы на алгоритм в наглядном виде на ЯВУ. Для его последующего изучения будущими поколениями. Хотя конечно вопрос философский. Ну а ещё - как молитва богу кроссплатформенности. ;-)
Если игра, например, логическая, и памяти хватает. Если покажу игру на Обероне, оттранслированную в Си, прикинете насколько её трудно будет перетащить на УК-НЦ?
Или ещё можно брать сырой вывод Си-компилятора для черновика на асме, потом вручную дооптимизировать.
Никита, такой вопрос. Какова причина невозможности сделать деревья зелёным цветом?
http://i.piccy_.info/i9/25f2cfb93781...670/HWYENC.png
В заставке порта на УК-НЦ есть зелёный цвет. Не подумайте, что придираюсь, просто интересно насколько этот момент принципиален. (Кстати, как более правильно: УК-НЦ или УКНЦ?)
Собираетесь ли делать звук?
Сделано некое подобие финальной анимации.
В этой версии уже сделано всё что собирался сделать. (Вообще удивляюсь что я до этого момента дошёл.)
Пока дальнейших улучшений не планирую, разве что баги исправить если таковые найдутся.
Итого, отличия порта от оригинала:
- Более слабая графика в плане цветов
- Медленнее примерно в 1,5 раза (и вряд ли получится сколько-нибудь прилично ускорить, если не переделывать на вывод экрана через ПП)
- Нет звука
- Финальная анимация упрощена
- Нет обновления High Score и таблицы рекордов
https://img-fotki.yandex.ru/get/9495...c189b_orig.png
- - - Updated - - -
Можно сделать, но конечно возиться надо, уже не хочу. И ещё на некоторых УКНЦ они будут красными -- на части машин отличается цвет как RGB/GRB.
Это холивар.Цитата:
(Кстати, как более правильно: УК-НЦ или УКНЦ?)
Нет. Опять же можно, но возни реально много.Цитата:
Собираетесь ли делать звук?
Звук на УКНЦ делается через периферийный процессор. Это нужно туда отправить свою программу через канал обмена между процессорами и обращаться к ней из ЦП сделай то сделай это. Пока у меня мало наработок на эту тему, соответственно, времени уйдёт много.
Так, тут пошли финальные титры.
Спасибо всем кто поддерживал в ходе портирования, без вашей поддержки я бы давно на это забил.
Особая благодарность hobot за проверку на реале.
Инструменты которые использовал:
- skoolkit-5.4 на начальном этапе для декомпиляции оригинальной игры, разобраться что к чему, из полученного HTML потом копировал по кусочкам исходный код для Z80.
- EmuZWin и его отладчик, для того чтобы понять как работает оригинал, и для параллельной отладки.
- UKNCBTL, специально для этого порта сделал вьювер спрайтов и несколько доделал отладчик.
- Visual Studio 2013 для работы над UKNCBTL и для написания на C# небольшой утилиты SpriteRotate с целью подготовки спрайтов и прочих массивов, взятых из дампа оригинала.
- Эмулятор RT11 для консоли Windows от Patron, постоянно использую для компиляции и линковки.
- EmuStudio от Titus для тестирования.
В целом затраты времени -- примерно человеко-месяц, плюс-минус дни.
- - - Updated - - -
Финальная сцена:
https://img-fotki.yandex.ru/get/9629...9290e_orig.png
Вот ещё один порт той же игры, на PMD 85, завершён в 2016 году:
https://pmd85.borik.net/wiki/Highway_Encounter
Проблемы те же -- скорость примерно в 2 раза ниже.
версию 62 перетащу на живую машинку обязательно!
Огромная благодарность, nzeemin, что не бросает УК-НЦ без игровых релизов, но , что самое главное!, выбирает хитовые (вроде lode runner) или остроумные проекты (вроде HWE). Данный релиз стал очень приятным сюрпризом для всех пользователей УК-НЦ.
По поводу вылета до увеличени стека - подтверждаю теперь полёт нормальный !!!
картинка из UKNCBTL запуск с ЖД под RT-11 v5.4G
Good game :redface:
- - - Добавлено - - -
http://zx-pk.ru/threads/27621-hwyenc...l=1#post946446
вариант версии 62 с заставкой на игровом форуме
https://www.old-games.ru/forum/threa...5#post-1446225
@nzeemin,
вопрос в связи с данным релизом :
не ошибусь если с БК0010 проще портировать (поскольку ассемблер родственный УК-НЦ),
хотя время ушло примерно столько же ?
Конечно с БК проще портировать, изменяется только способ вывода на экран, и ещё биты в спрайтах повёрнуты в другую сторону.
На портирование с ZX Spectrum времени уходит намного больше, раза в полтора-два.
Полученный HWYENC имеет смысл портировать дальше уже только на более быструю машину, например, Немигу -- но там же пользователей практически нет.
Удаление в знак протеста против действий MM
Пара замечаньечков к игре:
Скальный ландшафт желательно инвертировать, т.к. из-за отсутствия атрибутной раскраски, видна ступенчатая состыковка с остальным ландшафтов.
А вообще, хорошо игру бы раскрасить, хотя бы сделать 2 битплана, а не один.
Кстати, на моем эмуле она работает быстро, как на спектруме) В данном случае ускоренная работа эмулятора скомпенсировала несколько замедленный относительно спектрума движок)
Удаление в знак протеста против действий MM
Голосуем! Даешь 2 битплана (4 цвета). А еще лучше 3 битплана (8 цветов)!
И пятилетку за 3 года.
Удаление в знак протеста против действий MM
Удаление в знак протеста против действий MM
и много ли вы видели исходников УК-НЦ игр? все "вменяемые" написанные не школьниками на бейсике игры для УК-НЦ работают настолько быстро, насколько быстро позволяет платформа.
Есть ещё пример порта игры про рыцаря с MSX и пакеты "игрушка-1 и 2" от ИТО, где со скоростью более чем всё в порядке, а родные проекты заведомо "без претензий".
Словом действительно не понятно, что вы имели в виду???
- - - Добавлено - - -
да вот этот жанр на УК-НЦ совсем не представлен (ну кроме логических настольных и карточных).
Что меня лично огорчает, самому писать с нуля был опыт "ИГРА ТУРКИ 1.0", к сожалению печальная участь постигла проект - 1. он так и не дорос до написания ИИ (можно было играть против живого соперника),
2. размер исполняемого файла был максимального для запуска объёма;
как выход были планы игру с ИИ делать отдельным файлом с отдельными ресурсами.
Сейчас даже доказательств существования игры у меня нет, графика была там очень самобытная (спрайты 2-х цветные)
вся разработка шла на живой УК-НЦ (редактор спрайтов и ПО).
- - - Добавлено - - -
может быть про игры лучше в теме "обсуждение про игры" обсуждать?
спасибо.
Удаление в знак протеста против действий MM
Думаю, что ввиду малочисленности программистов пишущих под УКНЦ, а так же сложности ее архитектуры, процент профессиональных оптимизирующих кодеров там был минимален.
Но думаю, что оптимальные кодерские работы были. Взять хотя бы те же игры, приведенные Hobot'ом, типа Рыцаря.
macro-11 есть такой язык.
На Си писалось конечно, но в большинстве случаев авторы явно указывали об этом
и почти всегда это были не игры ) (* за редким исключением!)
И что значит "на старом", а на каком Си они по вашему под RT-11 должны были писать,
особенно в те года?
Чаще писали на Фортране (совсем старые проекты), Дековском (РафОС) Бейсике и
связке Паскаль + макровставки.
Ув. доктор - тут по поводу этих игр есть мнение, что на самом деле - там в качестве загрузчика
что вроде MSX эмулятора, а основная часть кода портированных игр практически без изменений
работала - отсюда и плавность картинки и прочие радости, но вот сам геймплей рыцаря немного
отличается от MSX , однако это не значит, что писали с нуля. Порт есть порт. Вспомни какая плавная
анимация у Арканоида?
SPION.SAV - не оптимально написан? (Первый игровой проект от Высотина П. "проба пера"!),
кстати говоря эксклюзив - такой шпион только на УК-НЦ (если ошибаюсь поправляйте).
Ай да про игрушки трепаться в тему "Обсуждаем игрушки!" товарищи ) Это будет правильней )
(да увлеклись всё же!!! последняя ссылка и пост по теме уполз за горизонт
http://zx-pk.ru/threads/27621-hwyenc...l=1#post946442)
Удаление в знак протеста против действий MM
При портировании с Z80 несколько проблем:
1) неоптимальный доступ к памяти, потому что на исходном процессоре адресация в основном байтовая или словная невыровненному адресу. Особенно это печально при байтовой записи в память: разработчики процессора ВМ2 решили не делать цикл DATAOB и MOVB вместо одного цикла доступа к шине делает два (DATAI - modify byte - DATAO). Накладные расходы при загрузке байта в регистр (знаковое расширение, что решается, например, комбинацией CLR Rn/BISB src, Rn). Тут же чтение/запись слова по невырвненному адресу (MOVB ea -> SWAB -> MOVB ea+1): особенно печальна запись -- из-за отсутствия DATAOB на шине будет четыре цикла вместо двух + плюс фетчинг и декодинг трёх-четырёх команд вместо одной.
2) косвенная адресация при обращении к видеобуферу и такие же проблемы с байтовой адресацией.
3) команды блочного копирования LDIR сотоварищи
Z80 реально фетчит и декодирует каждый раз (пока BC != 0) LDIR и затем выполняет два шинных цикла, то есть LDIR выглядит для исполнительно устройства как (READ BUS <fetch LDIR>, <decode/exec LDIR>, READ BUS, WRITE BUS) x N.
если заменять это просто на
то это будет неоптимально и с точки зрения доступа к памяти (отстутствие цикла DATAOB) и с точки зрения выполнения: каждый раз выполняется ещё и SOB, который по времени составляет приблизительно треть от MOVB. Тут поможет аккуратный loop unrolling и, если заведомо известно выравнивание адресов или возможность его изменить, замена MOVB на MOV.Код:MOVB (Rs)+, (Rd)+
SOB Rc, . - 2
Например, тупое
Даст прирост процентов на 20 (в зависимости от ситуации). Если ещё на x2 unroll'ить, то ещё 10-15% можно отыграть, x8 unroll даст почти 1.5 раза прироста по сравнению с x1. А если есть возможность заменить на MOV (Rs)+, (Rd)+ то почти в два раза сразу.Код:; Rc = Rc / 2
1$:
MOVB (Rs)+, (Rd)+
MOVB (Rs)+, (Rd)+
SOB Rc, 1$
Никита проделал офигительный объём работы, стоит ему отлить памятник только потому, что оно вообще работает. Дело то за малым: берём исходники и модифицируем код, чтобы логика осталась прежней, а код был оптимален с точки зрения целевого процессора. =)
Нельзя не привязываться к архитектуре, если речь идет о конкретно эмуляции Z80 на PDP11.
И она будет как минимум в 5-10 раз медленнее, чем реальный Z80.
Если же делать рекомпиляцию, причем грамотную, то там можно добиться где-то 1/2 скорости Z80.
Ну а потом если пройтись по этому ручками, то для некоторых игр можно и получить скорость аналогичную Z80.
Никита, а вот демка демонстрирует кучу цветов (визуально даже больше 8). Она использует ПП?
По поводу деревьев другого цвета. Где-то тут на форуме встречал высказывание hobot'а в таком духе, что 90% УКНЦ-шек имеют вывод GRB, около 3% RGB, остальные монохром (у нас в школе как раз были монохром). Думаю, хорошо было бы сделать в меню игры выбор GRB/RGB, притом GRB по умолчанию, как более часто встречающийся. Ну и цветные деревья. А ещё - стилизовать под Спектрум цвета в игровой статистике POWER/SCORE, TIME/HIGH. Думаю, 3-х цветов (жёлтый, красный, зелёный) для этого вполне достаточно, можно не выходить на ПП.
(там не только деревья другим цветом, всё обстоит несколько сложнее, чем я думал)
http://i.piccy_.info/i9/b01433679e0d...70/HWYENC2.png
Ещё мечтаю, что когда-нить Никита выключит надпись ЛАТ на экране =) Ну, чтобы уж совсем!
Если память мне не отказывает (укоризненно смотрю в ТО), то добраться до плана 0 из ЦП напрямую невозможно.
Вообще на УКНЦ ограничение -- 8 цветов на одну строку, полный набор цветов намного больше, см. соответствующую тему.
Реально же, во многих машинах даже 8 основных цветов сделаны неправильно, в значительной части перепутаны красный и зелёный.
(И опять же, задать свой набор цветов в каждой строке можно только через ПП -- в его памяти лежит display list.)
По этим причинам я принёс в жертву ту цветовую схему которая мне лично казалась красивой (зелёное игровое поле), чтобы на всех трёх вариантах машин (RGB, GRB, BW) смотрелось более-менее ОК.
Это значит, что при выборе схемы нужно патчить код примерно в 5-6 местах.Цитата:
Думаю, хорошо было бы сделать в меню игры выбор GRB/RGB, притом GRB по умолчанию, как более часто встречающийся. Ну и цветные деревья.
Можно, но не особо интересно.
В целом, я уже потратил на этот проект времени минимум в 1,5 раза больше чем собирался, время кончилось.
Код открыт, где лежит известно, любой может взять и доработать как хочется.
- - - Updated - - -
Анализ очень правильный.
Проблема скорости игры во многом это проблема байтовых обращений к памяти. Например:
- Первый и второй "теневые" экраны разнесены друг от друга на нечётное количество байт. Поэтому копировать первый во второй пословно не получится.
- Несколько словных значений в записях объектов выровнены по нечётному адресу -- запись и чтение вместо одной команды делаются за 4-5 команд.
Также лучшей оптимизации можно достичь за счёт индексного доступа к полям объектов. Например, при анализе столкновений обращение к одной записи делается через IX+nn, а ко второй через HL -- и переведено на MACRO11 также, чтобы сделать нормально нужно ооочень аккуратно всё порефакторить.
Удаление в знак протеста против действий MM
Мы в общем тоже так думали. Тут на форуме есть утилита TSPAL.SAV от Titus.
Но опять же, нельзя полагаться что на всех экземплярах УКНЦ это правильно распаяно, скорее всего нет.
https://raw.githubusercontent.com/nz.../test16_01.bmp
http://zx-pk.ru/threads/20686-mnogo-...na-uknts!.html -- тема про цвета
http://zx-pk.ru/threads/20686-mnogo-...l=1#post570009 -- всего 53 уникальных цвета
Удаление в знак протеста против действий MM
Удаление в знак протеста против действий MM