Настройка 3D для PPC и 68K

Материал из Amiga wikipedia
Перейти к: навигация, поиск


Настройка 3D для PowerPC и 680x0 на классических амига.

Содержание

Введение

С появлением первых PPC процессоров, возникла необходимость в запуске части приложений на PPC процессоре. Для этого необходимо наличии в памяти "ядра" которое обеспечивало бы выполнение этого кода. Для классических амиг с операционной системой 3.x таких ядер существует два: PowerUP и WarOS.

Для больного полного и детального изучения можно посетить этот сайт http://powerup.amigaworld.de/index.php?lang=en , на котором на английском и немецком описано и показано все от самого начала до конца развития этих надстроек. Есть фотографии прототипов ппц акселераторов (так и не увидевших свет), описания протоколов, warpos, powerup, видеокарт bvision и cybervision и соответственно весь необходимый софт (такой как драйвера, сами надстройки (warpos/powerup), девелоперские архивы и тд).

Можно сказать, что все надстройки над классической os3.x призванные каким-то образом прикрутить использование второго (ppc) процессора (сначала через PowerUP, а затем через WarpOS) в целом могут быть использованы только для математики. Т.к. операционная система как работала на 68k, там и работает. Конкретных изменений можно наблюдать только на примере кодирования и декодирования каких-либо данных (как например сжатие mp3, проигрывание видео которое нужно распаковывать и тд). В отношении к demoscene ppc использовался в основном для 2х нужд:

  1. декодирования и проигрывания музыки (через WarpOS варианты mpega.library)
  2. математически подсчеты вершин.

Оба этих варианта могут быть реализованы и на 68к, как например проигрывать уже распакованную музыку (что разумеется увеличит ее в размере от 2мегабайта до например 70ти), или же на этапе загрузи распаковывать mp3 через 68к вариант mpega.library (ну или же писать свой депакер, что тоже вариант). Вся же математика может быть реализована в виде статических таблиц (как делалось много лет назад на 286-386 pc компьютерах), что опять же, увеличит размер.

Одно из самых проблемных мест в отношении одновременного использования 68к и ppc процессоров, это переключение контекстов. Например, когда программист (или непосредственно уже готовая программа), обращается к функциями powerpc.library происходит переключение контекстов которое затормаживает выполнение программы. То есть если допустим мы хотим быстро чередовать 68k/ppc вызовы, то это сильно нагрузит всю систему целиком.

что такое PowerUP

PowerUP это первая попытка использовать PPC процессор на классической 68k амиге с os3.x (вторая попытка это WarpOS (WarpUP)). Сделана эта попытка была фирмой которая произвела на свет первые ppc карты для классических амиг - Phase5. PowerUP со стороны пользователя, это всего лишь одна библиотека - ppc.library. И phase5 поместили эту библиотеку в память акселератора. К сожалению библиотека имела (и имеет) 2 больших минуса - много ошибок, и изначально не грамотная организация самого способа работы с процессорами и осью (но т.к. они были своего рода первопроходцами, поэтому на это можно закрыть глаза).

PowerUP позволяет запускать только ELF бинарники. Что изначально было не совсем правильно, плодить разные исполняемые файлы (в то время как в WarpOS затем поддержали один единственный классический формат исполяемых файлов - Amiga HUNK).

что такое WarpOS

WarpOS (иногда называема WarpUP) - надстройка на классической os3.x которая пыталась использовать по возможности ресурсы ppc процессора и избежать тех ошибок и проблем которые были в PowerUP. WarpOS зделана фирмой Haage and PArthner (те самые что зделали и warp3d, и stormmesa и много других более-менее серьезных проектов). Со стороны пользователя, WarpOS это всего лишь 3 библиотеки:

  1. powerpc.library - основная библиотека с стороны пользователей и программистов. Это сердце WarpOS, и WarpOS содержится в powerpc.library. Все функции WarpOS производятся путем вызова процедур через эту библиотеку, и она содержи код функций для процессоров 68k и для PowerPC.
  2. warp.library - это хардварный интерфейс для доступа к PowerPC. Эта библиотека работает напрямую с аппаратурой, ее функции специально не описаны, т.к. кодеры которые хотят что-то делать, должны использовать powerpc.library.
  3. warpHW.library - это низкоуровневый драйвер для WarpUp-HAL. В папке 'hwdrivers' есть подробная документация и примеры, которые позволяют любому написать WarpUp драйвер для нового PPC железа. Для каждого типа железа есть своя warpHW.library. Необходимо, что бы использовалась именно правильная версия warpHW.library. Проверить это можно с помощью утилиты GetDriverInfo' (в папке 'tools') которая напишет, для какого именно оборудования подходит данный драйвер.

Также в документации кроме возможных проблемы, плюсов и минусов использования WarpOS описаны и все переменные (Env:PowerPC) отвечающие за некоторую настройку WarpOS.

что такое Warpd3d

Основные моменты касающиеся warp3d взяты из статьи Anny в электронном журнале "the vague 1" http://vague.lorraine-design.com/the_vague_1.html (/coding/coding with warp3d).

Итак, что такое Warp3d? Warp3d на амиге, это тоже самое что DirectX 5.0 (именно 5.0, не выше) для Windows, или тоже самое что и Rave для Macos. Другими словами это низкоуровневые 3D API. Это просто рендер, без всяких высокоуровневых 3d операций. То есть нечто типа девственного d3d для win32. Этот рендер (имеется ввиду warp3d) предоставляет нам возможности использовать прозрачности, туман, текстурный маппинг, масштабирование и т.д. и т.п. (почитать о всех возможностях можно в War3d_Devel.guide из девелоперского архива).

Haage-partner - это та компания которая сделала первую версию Warp3d (и последнюю тоже, но нужно сказать что например Warp3d для медиаторов был адаптирован Hyperion). Для amigaos 4.x и morphos warp3d был адаптирован теми кто эти оси делал. Для aos4 это Hyperion, а для Morphos это morphos developer team.

Warp3d драйвер был написан для нескольких видеокарт, но наиболее распространенные это blizzardvizion/cybervision для классических амиг (базирующиеся на чипе permedia2) и позже с появлением таких расширителей как mediator, grex и prometheus - voodoo3. Для современных амиг (a1,sam,pegasos,efika) чаще всего используется все также старые voodoo карты, и более современные Radeon'ы.

Для всех этих карт на амиге есть warp3d драйвера, но к сожалению сказать их реализация не идентична. Например можно обсудить такую особенность как цветовые ключи (ColorKey). Цветовые ключи позволяют программисту обозначить какие-то цвета в текстуре и делать с этими цветами определенные действия пока происходит рендеринг. Самая распространенная практика использования цветовых ключей - это создание прозрачности (нечто типа alpha testing без определенного alpha значения). Warp3d имеет для этого определенную функцию: W3D_SetChromaTestBounds. Эта функция позволяет установить нужный диапазон цветов (определенные как 32х битные ARGB значения). Если например мы ставим нижнее значение в 0x00010101 и верхнее значение в 0xFFFFFFFF, плюс mode в W3D_CHROMATEST_INCLUSIVE, то все тексели которые не черные будут показаны. (т.е. прозрачны). Но к сожалению, эта фича работает только на voodoo3/b(c)vision картах, на классических машинах, и на voodoo3 на a1 машинах. Но не работает на Morphos , WinUAE (для winuae эмулятор warp3d зовется quarktex) и на A1 с радеонами. Это необходимо учитывать, когда создаются приложения Warp3d, и необходимо, чтобы это работало везде одинакого.

Другое различие, это то, что Permedia2 чип (b/c-vision карты) может иметь только одно альфа значение для всего примитива. И не поддерживает интраполированные alpha значения как например на других картах.

Подготовка к настройке

Что необходимо иметь до начала установки.


Далее можно описать все в куче, какие бывают вариации и чего с чем, а затем, на пример двух-трех сетапов описать настройки, типа такого:

PowerUP или WarpOS

Сложность выбора была обусловлена только тогда когда обе надстройки развивались и пытались заменять одну другую. В какойто промежуток времени phase5 развалилась и PowerUP перестал развиваться полностью, в то время как WarpOS только стал набирать обороты. Сегодня (как и в последние 7-8 лет), вывод выбора очевиден - это WarpOS. Это связано не только с тем что он более логичен, прогрессивен по отношению к PowerUP, ну и с тем, что все последующие (после смерти phase5) программы писались под WarpOS. Последующиеся же драйвера (например Warp3D драйвера в варианте библиотек для PPC) поддерживают только WarpOS. Например если посмотреть суда: http://powerup.amigaworld.de/index.php?lang=en&page=33 , то мы увидим что почти что все демы были написаны под WarpOS (за исключением одной - Glare от 2005 года, но тут есть небольшой ньюанс. Т.к. дема писалась под MorphOS (в котором исполнимые файлы типа ELF), то madwizards решили автоматически поддержать классическое железо без добавления и измениния кода под WarpOS). Если же посмотреть на игры то также очевидно использование повсеместно WarpOS.

Поэтому вывод очеведин для тех кто хочет настроить свой класический комьпютер на последние веяния прошлых лет, то это WarpOS. PowerUP будет хорош только для изредка возможного использования какихто очень раритетных и неихвестных программок и/или тестов. Однако для этого, в последнем релизе WarpOS есть эмуляция PowerUP. Т.е. убрав при загрузке ppc.library (powerup) из акселератора, загрузив затем WarpOS , можно опять использовать PowerUP путем использования эмулляционной библиотеки идущей в warpos архиве. Но необходимости в этом не бывает, и можно сказать смело - уже не будет.

Настройка

Предварительно нужны соотвествующие драйвера для Warp3D и настроенный WarpOS в случае с PPC.

Warp3d + OS (68k и PPC)

Для классичесских амиг есть 2 варианта реализации Warp3D. Это 68к и PPC. Для 68к это warp3d.library, а для PPC это Warp3dPPC.library. PPC вариант библиотеки реализован через WarpOS (т.е. warp3dppc.library открывает и использует powerpc.library (WarpOS) , а не ppc.library (PowerUP)).

Для bvision и cybervision видео карт никаких различий в системе не делается по поводу настроек, просто открывается и используется необходимая библиотека (будь то warp3d.library, или warp3dppc.library). В случае с mediator, обязательно изменение env переменной, такой как sys:prefs/env-archive/mediator/MMU. Для 68к переменная должна быть установлена в YES, для WarpOS (ppc) в NO.

WarpOS+PPC+Mediator/Voodoo3

WarpOS+PPC+Bvision

last words