Важная информация

User Tag List

Страница 1 из 15 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 147

Тема: Теория: почему 128к игры такие убогие

  1. #1
    Member
    Регистрация
    10.07.2009
    Адрес
    Санкт-Петербург
    Сообщений
    121
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Теория: почему 128к игры такие убогие

    Disclaimer:
    Особенно полезно читать всем любителям пентагонов и ненавистникам фирменных машин.
    Так же надо вдумчиво читать железячникам. Как не свистоперделки, а весьма тривиальная вещь может сильно облегчить жизнь программисту.


    Вы когда-нибудь задумывались, почему 128k игры такие убогие ? Нет, серъёзно. Они качественно не отличаются от 48к. (Возможно есть несколько исключений. Кстати - кроме ЧВ какие ?)
    Очень практиковалась лишь частичная поддержка 128к в виде AY музыки и запихиванию подгружаемых уровней в верхнюю память. Почему частичная ? Да потому что графический код был одинаков и работал по старым принципам. Очень редко использовался второй экран. Практически никогда не использовались мощные прекалькуляции для ускорения.

    Фактически, внешняя память только как РАМ-диск для ресурсов. С одной стороны это можно объяснить наличием армии 48k-only машин, и желанием фирм срубить побольше бабла на продажах.

    Но! Были ведь 128к-only игры! Для них аргумент про бабло теряет смысл.
    Почему же в этих играх не заметно особого улучшения качества ? Только чуть больше арта. Причём зачастую не игрового, а в виде картинок между уровнями. (Например Chase H.Q.2, Robocop2). Иногда 128-only игра состояла из пачки мини-игр, каждая из которых по-отдельности ничем особенным не выделялась (BTTF3).

    Начав писать свой собственный движок игры я нашёл ответ. Он очень прост - дело в жёстко прибитых номерах банок памяти. И всего одном окне page-инга. Даже в NES с её, по сути, 32кб адресного пространства для кода/данных, банки памяти можно было переключать в обоих 16кб окнах.

    Если использовать два экрана - то данные для отрисовки можно брать только из нижней памяти. А из-за того что банки нижней памяти жёстко прибиты, да ещё вместе с бесполезным экраном, получается свободными всего 9.25кб медленной и 16кб быстрой памяти. Всего ~25кб. Этого ничтожно мало.

    Поэтому выходов остаётся немного:
    1) Оставить page-ing для данных и пытаться рисовать всё в один экран, жертвуя качественной картинкой и получая артефакты в виде tear-инга и/или мерцания.
    2) Использовать два экрана, но серъёзно усечь данные, жертвуя либо качеством либо скоростью, либо и тем и другим, чтобы уместить отрисовку кадра в нижней памяти.
    3) организовать в нижней памяти кеш, и динамически подкачивать туда данные из верхней памяти.
    Это тормозно, потому что временные затраты сопоставимы с генерацией данных. Похожий подход, кстати, применяляся в 48k играх (например Zynaps, Robocop1, только данные не подкачивались а как раз генерились в кеш).
    4) САМЫЙ РАСПРОСТРАНЁННЫЙ ВАРИАНТ: Забить, оставив отрисовку для 48к. Память юзать под рамдиск. Ну и музыки добавить.

    Ещё раз: причина плохой поддержки расширенной до 128кб памяти заключается в отвратительной организации переключения банок. И, как следствие, малом количестве нижней памяти.

    Варианты решения "с паяльником" отметаем и не рассматривем принципиально. Напаять можно и чёрта в ступе.

    • Частично проблему можно решить в некоторых советских клонах.
      Из-за желания сделать CP/M совместимую машину делали возможность включения RAM вместо ROM, что моментально увеличивало свободную нижнюю память ещё на 16кб до ~41кб.
      Это ATM1, Profi, Scorpion.
    • Немного по другому проблему можно решить в +3/+2A/+2B. В специальном режиме "ALLRAM" всё память замещалась RAM страницами.
      Причём из 4-х возможных наборов два особенно удачны: в области 4000-7FFF можно получить обе экранные страницы, 5 и 7.
    • Ну и совсем идеально проблема решается в ATM2.
      Благодаря уникальному менеджеру памяти, позволяющему включить любую страницу, хоть RAM хоть ROM в любом из 4-х окон адресного пространства.


    К сожалению кроме МикроАРТ никто больше до менджера памяти не додумался. Хотя идея лежит на поверхности и очевидна любому толковому АСМ-разрабочику. Кроме этого АТМ-менеджер умеет всего одним битом заменить один набор страниц на другой. В частности эта фича используется в элегантной хардварной реализации переключения 128к-48к ROM. Да-да, в АТМ2 бит D3 порта 7FFD переключает набор страниц менеджера памяти. И если наборы отличаются только номером ПЗУ, то получим поведение как на обычном 128к спектруме.


    Рассмотрим мой случай. Для отрисовки каждого кадра мне необходимо, в зависимости от X позиции скроллинга, иметь один из прескроллированных тайловых наборов (4шт по 8кб). А также прескроллированные спрайты (порядка 9-16кб).
    Это достаточно крупные величины для спектрума. И даже замена ROM в окне 0000-3FFF на страницу RAM не помогает (сомневающиеся могут пересчитать самостоятельно).

    В АТМ2 всё отлично. А учитывая его безвейтовость, турбу и палитру - это абсолютный лидер по качеству картинки и по скорости отрисовки. И ещё запас прочности остаётся.

    В +3/+2A/+2B все данные для отрисовки кадра умещаются в RAM благодаря возможности переключать экраны в 4000-7FFF. Хотя грань возможностей уже близка.

    В классическом 128, даже с RAM вместо ROM, приходится извращаться. Мешает прибитая 5-ая страница.
    Либо копировать в динамический кеш, либо организовывать вырвиглазную отрисовку в один экран, рисуя часть линий фона и тут же пересекающие их кусочки спрайтов (как в Stormlord).
    Получается медленее, гораздо сложнее, и добавляет артефакты в виде tear-инга и (редко) мерцания. Всё, приплыли, силёнок не хватает.

    Получается парадоксальный вывод: даже Пентагон, с его безвейтовостью и длинным интом СЛИВАЕТ по быстродействию фирменному +3/+2A/+2B с медленной памятью.


    Так что не демками едиными... Да и демки лишь следствие несовместимости из-за глючного INT-а (не буду развивать эту тему, все и так в курсе).

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,552
    Спасибо Благодарностей отдано 
    1,216
    Спасибо Благодарностей получено 
    1,752
    Поблагодарили
    681 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Толль вышел на тропу войны. Во всем виноват Чубайс... Ой, т.е. банки памяти) А написано в лучших традициях Алоне-кодера)

  4. #3
    Member
    Регистрация
    10.07.2009
    Адрес
    Санкт-Петербург
    Сообщений
    121
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Толль вышел на тропу войны. Во всем виноват Чубайс... Ой, т.е. банки памяти) А написано в лучших традициях Алоне-кодера)
    Когда по-теме сказать нечего начинается навешивание ярлыков и прочий оффтопик. Ай-ай-ай, обидели пентагон. А возразить нечем, потому что все аргументы железные. На самом деле это грустно, потому что в моём случае поддержка всего отличного от АТМ и +3 становится настоящей занозой в заднице. Поддержка в несколько раз сложнее основого кода. Абсурд! Накипело, вот и решил высказаться.

  5. #4
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,552
    Спасибо Благодарностей отдано 
    1,216
    Спасибо Благодарностей получено 
    1,752
    Поблагодарили
    681 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Screw Посмотреть сообщение
    Когда по-теме сказать нечего начинается навешивание ярлыков и прочий оффтопик. Ай-ай-ай, обидели пентагон.
    Я не согласен с вами. Страницы 128 спектрума может сделаны и не лучшим образом, но, на мой взгляд, никаких принципиальных проблем для создания игр не несли. Отсутствие игр более высокого класса, заточеных именно под 128кб - это точно не их вина. Основной парк машин - это 48кб. Какой смысл делать игру только под 128? Коммерчески это малооправдано. Тогда единственный вариант 48/128. А это, извините, только тюнинг, в той или иной степени, что и видим в играх. Например, в Dizzy5 - это AY-музыка, дополнительная графика, анимация и т.д.

  6. #5
    Member
    Регистрация
    10.07.2009
    Адрес
    Санкт-Петербург
    Сообщений
    121
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Во-первых: почему на Вы ? Давай на "Ты", как принятно в интернете. В некоторых кругах обращение на "Вы" даже считается оскорблением оппонента.

    Цитата Сообщение от Titus Посмотреть сообщение
    Я не согласен с вами. Страницы 128 спектрума может сделаны и не лучшим образом, но, на мой взгляд, никаких принципиальных проблем для создания игр не несли.
    Прочти, пожалуйста, мой первый пост внимательно. Там детально расписаны именно ПРИНЦИПИАЛЬНЫЕ проблемы.

    Цитата Сообщение от Titus Посмотреть сообщение
    Какой смысл делать игру только под 128? Коммерчески это малооправдано.
    Нет, ты точно споришь даже не потрудившись почитать о чём. Этот момент я тоже осветил, и нисколько не спорю с 48/128.

  7. #6
    Guru Аватар для ZEman
    Регистрация
    28.10.2005
    Адрес
    Омск
    Сообщений
    2,052
    Спасибо Благодарностей отдано 
    113
    Спасибо Благодарностей получено 
    34
    Поблагодарили
    23 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Titus, именно так, подавляющее большинство пользователей спеки имели у себя 48к, 128к были мало распостранены у нас в Омске пользователей 128к можно было чуть-ли не польцам рук пересчитать, зато 48к был практически у всех.
    разумеется при этом было невыгодно делать или продавать только для 128к спеки игры.

  8. #7
    Member
    Регистрация
    10.07.2009
    Адрес
    Санкт-Петербург
    Сообщений
    121
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZEman Посмотреть сообщение
    Titus, именно так, подавляющее большинство пользователей спеки имели у себя 48к,
    Я с этим не спорю, как и не спорю с большей коммерческой выгодой от 48/128 релизов. Но были ведь 128-only игры. К ним аргумент "выгоды" не применим. И всё-таки они юзали расширенную память весьма примитивно.

    Цитата Сообщение от ZEman Посмотреть сообщение
    128к были мало распостранены у нас в Омске
    Цитата Сообщение от ZEman Посмотреть сообщение
    разумеется при этом было невыгодно делать или продавать только 128к спеки.
    Во-первых причём тут ваш омск ? Омские пользователи не делали никакой погоды в общей картине.
    Во-вторых: причём тут выгода для разработчиков игр ? От пиратства разработчики не получали ни копейки. А выгода пиратов-барыг абсолютно неинтересна - она никак не влияет на качество софта.

  9. #8
    Master Аватар для siril
    Регистрация
    01.02.2005
    Адрес
    perm/ru
    Сообщений
    520
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ZEman, именно! На пользователей Омска производители игр и ориентировались =)

    Screw - прав, если делать быструю/оптимизированную/красивую выкидку на экран, кэш - не вариант (а иначе придётся из верхних страниц по #c000 данные скопировать в память #4000-bfff, потом по тем же адресам #c000 врубить нужную страницу экрана, и уже потом вывести всё на него. слишком много накладных расходов.)

    Если хотя-бы можно было второй экран врубать в #4000 - это бы устранило накладные расходы на кэш, в конце концов процедуры выброса графики можно продублировать по всем страницам, если нужно. Screw прав, 128k игры не стали качественно новым рывком именно по причине неоптимальной работы с банками экрана (не в ту область маппятся).
    oisee.

  10. #9
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,552
    Спасибо Благодарностей отдано 
    1,216
    Спасибо Благодарностей получено 
    1,752
    Поблагодарили
    681 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Товарищи, где вы видели игры, в которых одновременно на текущем экране используется вся графика и вся карта? Имхо, проблема мгновенного доступа сразу ко всем банкам памяти весьма надуманная.
    Последний раз редактировалось Titus; 10.10.2011 в 14:07.

  11. #10
    Member
    Регистрация
    10.07.2009
    Адрес
    Санкт-Петербург
    Сообщений
    121
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Товарищи, где вы видели игры, в которых одновременно на текущем экране используется вся графика и вся карта?
    На одном экране или в одной локации ? У меня в одной локации UP TO 51 тайл размерами 32х32 пикселя. При этом они идентичны оригиналу с NES. Что в прескроллированном виде даёт ровно 8кб. А всего таких тайлов больше 230. Тайловые карты, если считать экранами, дают почти 500 экранов (сравним со скромными 105 в Dizzy5)

    Если их подготавливтаь динамически по ходу скролла - будет тормозно. У меня же 25fps почти во весь экран (на АТМ2 во весь).

    Цитата Сообщение от Titus Посмотреть сообщение
    Отсюда проблема мгновенного доступа сразу ко всем банкам памяти весьма надуманная.
    Предложи мне эффективное решение для моего случая, я даже пиво поставлю.

Страница 1 из 15 12345 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Игры от Opera Soft для 128к
    от Slider в разделе Игры
    Ответов: 172
    Последнее: 29.03.2013, 14:42
  2. Бот для игры в "Морской бой": история, теория, практика
    от Barmaley_m в разделе Программирование
    Ответов: 37
    Последнее: 25.01.2012, 11:09
  3. Почему глючат две игры?
    от Slider в разделе Игры
    Ответов: 7
    Последнее: 27.06.2007, 23:39
  4. Ответов: 22
    Последнее: 21.03.2007, 00:16
  5. Теория
    от Sonic в разделе Несортированное железо
    Ответов: 16
    Последнее: 04.07.2005, 09:58

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •