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

User Tag List

Показано с 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
    Размещение рекламы на форуме способствует его дальнейшему развитию

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

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

Эту тему просматривают: 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

Ваши права

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