Ну, кто-кто, а Apple дешевыми не были и до сих пор ими не являются. :) Это такая же давняя традиция.
Тут, имхо, просто попытка что-то сделать собственными руками еще до всяких коммерциализаций.
А вот вышедший уже через год Apple II обладал уже не только графическим, но и сразу цветным дисплеем.
Дешевизна решает, память тогда была очень дорогой. Поэтому, я думаю в качестве регистров сдвига использовались дешёвые динамические регистры сдвига.
Кстати ОЗУ в советских программируемых калькуляторах сделано тоже на динамических регистрах сдвига.
Про лицензионную политику же надо было досказать. С одной стороны, консоль лицензировалась сторонним производителям, и потому стоила дорого. Но с другой стороны, выход на платформу производителям софта обходился значительно дешевле других консолей, всего $3 за копию. Правда в итоге это привело к тому, что на не самой сильной платформе вышла куча треша от не самых сильных производителей.
Я пробовал писать под этот аппарат, ничего серьёзного. У меня сложилось впечатление, что делался он ещё до того, как возникло понимание перспективности 3D, больше под 'мультимедиа'. SDK там не предполагает работу с низким уровнем, но сам он создаёт впечатление очень проработанной системы, по крайней мере в сравнении с другими консолями контраст значительный (что несложно, у большей части предшественников вообще никакого SDK и документации, у последующих PS1 и N64 с этим также не фонтан). Железо, конечно, медленнное. Там даже два растеризатора (которые corner engine), но один по умолчанию почему-то выключен. Если включить, рендер в теории может ускориться до двух раз. Ещё запомнился трюк с ускорением доступа к данным на CD — они там могут дублироваться несколько раз в разных местах диска, время экономится за счёт позиционирования головки на ближайшую копию.
Интересный момент про PS1 в том, что платформодержатель официально поддерживал homebrew. То есть уже в 1996-97 году обычному человеку с лишними деньгами можно было купить сцепконсоль со спец-SDK, и с помощью обычного 486 писать любительские программы для PS1. Некоторые удачные разработки потом публиковались на демо-дисках, прилагавшихся к журналу Official Playstation.
Забей на него, 99% активного демо-сообщества понимают что произошло и какой деструктивный вброс произвел Петр. Организаторы я думаю тоже не глупые (Петр не является организатором и его проект правил это его утопия) и впредь такого не допустят, учитывая сколько сил и времени было затрачено на организацию «Фестиваля компьютерного искусства» и кучу всего из смежных направлений вокруг него чтобы именно оно состоялось.
На SNES и Genesis обычное DMA очень полезно. Там отдельное видео-ОЗУ ограниченного объёма, с последовательным доступом к видеопамяти через порт обмена, и доступ возможен только во время VBlank. Большая часть игр подкачивает часть графики в видео-ОЗУ 'на лету', в частности, анимацию героя (некоторые и врагов тоже), чтобы оставить побольше места для графики фона. Процессор через последовательный порт пишет в видеопамять очень медленно, DMA в разы быстрее, значит можно передать больше за кадр — около 5 КБ на SNES и 6 КБ на Genesis. И всё равно приходится изворачиваться, передавать половинками через кадр и.т.д.
На SNES побочных эффектов от DMA нет, просто замедляется выполнение кода, но это не проблема, т.к. наличие HDMA позволяет избежать игр с точными таймингами выполнения. На Genesis на время передачи тормозится Z80, а на нём любят играть сэмплы, поэтому звук очень сильно портится (выпадения с частотой 50/60 гц), характерные искажения голосов возникают во многих играх по этой причине. Не так давно придумали обход этой проблемы: буферизировать звук из ПЗУ в ОЗУ Z80 во время прохода луча по видимой части кадра, а во время VBlank играть буфер из ОЗУ. При отсутствии обращений к ПЗУ во время VBlank Z80 продолжает работать (остановка активируется только в момент обращения к ПЗУ). К сожалению, во времена расцвета платформы до этого не додумались.
Собственно 8 каналов DMA там именно для этого, для обычного DMA в видеопамять в начале кадра достаточно одного канала.
Согласен, если взять другую их консоль, которую я лучше всего изучил — GBA, то там всего 4 DMA-канала, при том что два предназначены для запитки каналов PCM-звука, а еще один полезен, например, для автоматического копирования данных с опциональной камеры на экран, то под хоз-нужды оставался по большому счёту только один канал. Хотя там даже его польза наверное сомнительна — или он создавал бы щелчки в звуке или DMA-каналы звука тормозили бы процессор, поэтому там только с хитрым расчётом можно было им пользоваться.
Собственно 8 каналов DMA там именно для этого, для обычного DMA в видеопамять в начале кадра достаточно одного канала. И надо уточнить, что там именно списки, а не просто однократное DMA. У списка есть адрес, куда ему надо будет писать значения, формат записи (1-4 байт в разных схемах, типа два соседних адреса или два раза один и тот же), и далее в самом списке пары — сколько строк ждать и какое значение записать, следующая пара, и так до конца кадра. Таким образом всего одним списком можно сделать, например, цветовой градиент на экране, или, скажем, эффект copper bars, или искажение слоя фона по синусоиде (типа горячий воздух).
P.S.
Прочитал. Да, прикольно. В целом понятно — любой из 8-ми DMA-каналов можно перевести в режим автоматической записи в порты видеочипа по HBlank. Надо будет дополнить статью про видеочип SNES этим прежде чем сюда постить.
Ох ты, не знал про эту фичу, хотя делал обзор на видеосистему SNES и его собирался сюда тоже запостить. Хотя понятно — это видимо надо читать раздел про DMA. Хм, надо тогда почитать.
Надо отметить, что на SNES не практикуется перехват HBlank в том виде, как это делается на всех остальных консолях (по прерыванию или задержкой в коде), хотя он и возможен. Вместо этого там сделана специальная система HDMA, которая, я бы сказал, является самой главной и мощной железной фишкой платформы, и которой очень активно пользуется каждая игра — она позволяет менять значения регистров, заданных посредством восьми списков, строго в начале нужных строк. И это даже не 8 регистров за строку, в одном списке может быть до 4 записей. Поменять таким образом можно практически что угодно, хоть ABCD Mode7, хоть параметры смещения, хоть видеорежим. Списки заполняются в любой удобный момент и назначаются в начале кадра, дальше железо работает само, а процессор может спокойно заниматься другими вещами.
Тут, имхо, просто попытка что-то сделать собственными руками еще до всяких коммерциализаций.
А вот вышедший уже через год Apple II обладал уже не только графическим, но и сразу цветным дисплеем.
Кстати ОЗУ в советских программируемых калькуляторах сделано тоже на динамических регистрах сдвига.
Я пробовал писать под этот аппарат, ничего серьёзного. У меня сложилось впечатление, что делался он ещё до того, как возникло понимание перспективности 3D, больше под 'мультимедиа'. SDK там не предполагает работу с низким уровнем, но сам он создаёт впечатление очень проработанной системы, по крайней мере в сравнении с другими консолями контраст значительный (что несложно, у большей части предшественников вообще никакого SDK и документации, у последующих PS1 и N64 с этим также не фонтан). Железо, конечно, медленнное. Там даже два растеризатора (которые corner engine), но один по умолчанию почему-то выключен. Если включить, рендер в теории может ускориться до двух раз. Ещё запомнился трюк с ускорением доступа к данным на CD — они там могут дублироваться несколько раз в разных местах диска, время экономится за счёт позиционирования головки на ближайшую копию.
На SNES побочных эффектов от DMA нет, просто замедляется выполнение кода, но это не проблема, т.к. наличие HDMA позволяет избежать игр с точными таймингами выполнения. На Genesis на время передачи тормозится Z80, а на нём любят играть сэмплы, поэтому звук очень сильно портится (выпадения с частотой 50/60 гц), характерные искажения голосов возникают во многих играх по этой причине. Не так давно придумали обход этой проблемы: буферизировать звук из ПЗУ в ОЗУ Z80 во время прохода луча по видимой части кадра, а во время VBlank играть буфер из ОЗУ. При отсутствии обращений к ПЗУ во время VBlank Z80 продолжает работать (остановка активируется только в момент обращения к ПЗУ). К сожалению, во времена расцвета платформы до этого не додумались.
Прочитал. Да, прикольно. В целом понятно — любой из 8-ми DMA-каналов можно перевести в режим автоматической записи в порты видеочипа по HBlank. Надо будет дополнить статью про видеочип SNES этим прежде чем сюда постить.