Dexus
> Ерунда.
Ну не совсем ерунда. 6502 был быстр по тактам.
Z80 в спектруме был на частоте 3,5МГц, но если посмотреть на спецификации, то видно что в среднем примерно можно сказать, что одна команда требует в среднем 10 таких циклов, т.е. в секунду процессор исполняет в среднем порядка 350 тысяч команд.
У 6502 http://www.e-tradition.net/bytes/6502/6502_instruction_set.html судя по этим спекам же в среднем 3-4 цикла. Команды с прямой zero-page-адресацией как на подбор все 3 такта.
Т.е. если бы он был бы такой же частоты, то он успевал бы выполнять заметно больше команд имея при этом 3-тактные команды с по сути банком из 256 8-битных регистров (zero page), что вполне выводило бы его возможно даже вперед Z80, даже несмотря на более простые команды, с отсутствием 16-битного сложения, например. Точно сказать трудно. Одно могу сказать - плотность кода точно ниже у 6502.
Но тут у коммодора уж слишком большое отставание по частоте - 1 МГц всего, так что действительно вряд ли он в данном случае мог бы быть быстрее.
=A=L=X=
> в среднем 10 таких циклов
????
4 такта минимум, основной набор инструкций. В среднем 6 тактов, а не 10. Ты плохо знаешь z80:)
Dexus
> 4 такта минимум, основной набор инструкций. В среднем 6 тактов, а не 10. Ты
> плохо знаешь z80:)
Не такты, а циклы... плохо ты знаешь схемотехнику 8-ми битных персоналок. У Z80 цикл 4 такта, а у 6502 - в два раза меньше. И опять же не забываем про тормоза при доступе к видеопамяти у спектрума из-за конфликта с видеоконтроллером и отсутствие оных у С64, поскольку шина из-за сокращенного в 2 раза цикла шина была свободна для выборки данных.
0iStalker
> У Z80 цикл 4 такта,
Какой ещё цикл? И как образуются 6, 7, 9, 10, 11,15,19 тактовые команды?
> поскольку шина из-за сокращенного в 2 раза цикла шина была свободна для выборки данных.
Ну да. То же самое что z80 вместо 3.5 Мгц сделать 1.75Мгц. Лучше уж иметь задержки для обращений к памяти, чем все команды тормозные, и обращение к памяти не кажется на этом фоне таким тормозным.
Да давайте без прикидок, а доверимся уже сделанным вычислениям: https://en.wikipedia.org/wiki/Instructions_per_second
Zilog Z80 0.58 MIPS at 4 MHz Motorola 6802 1.79 MIPS at 3.58 MHz
MIPS-ы это миллион инструкций в секунду. Приведем к 1МГц, получится 0,147 у Z80 против 0,5 у 6502. Преимущество в 3,4 раза у последнего, правда зачастую надо несколько его инструкций, чтобы повторить инструкцию Z80, особенно всё что связано с 16-битной обработкой, а она вещь довольно таки нередкая даже в 8-битном коде. Поэтому... нууу... да, была бы одинаковая частота - скорее всего 6502 мог бы и пошустрее фурычить. Но тут у нас перевес сразу и частотный и плотностный у Z80.
Поэтому только за счёт графического сопроцессора C64 заруливал спекки. Ну и SIDа тоже. Вообще очень жалею что на 128 версию взяли его а не что-нибудь типа SID.
Коммодор на z80 был бы хорош :)
Dexus
> Коммодор на z80 был бы хорош :)
Я вот буквально сегодня пересматривал Бачило и вроде как если у ZX 48 было продолжение в виде ZX 128, то у C64 было продолжение в виде... не помню название, но суть в том, что для совместимости с CP/M в этом чём то... был Z80. Вторым процессором, ага.
Но во время когда оно вышло уже вовсю покоряли рынок полноценные 16-битки и успеха коммерческого он не снискал.
P.S.
А ну логично же, C128 собственно: https://en.wikipedia.org/wiki/Commodore_128
Dexus
> Коммодор на z80 был бы хорош :)
>
Yamaha MSX и Sega Master System были на нём
ZonoID
> Хватит ностальгировать.
Вообще тема не о ностальгии, а о фичах и багах как аппаратных так и программных от которых игры были такими какими были.
Поэтому да, сильно отклонятся не стоит.
Mode 7 (SNES)
Такс... А я сейчас тогда немного чиркану о знаменитом MODE 7 из SNES. По сути скомпилирую то, что уже писал в других темах, надо сперва найти...
Итак, истинной вершиной спрайтостроения потомка денди - Super Nintendo Entertaiment System или коротко - SNES стал видеорежим номер 7, в котором тайловый задник (единственный) мог не только скроллится влево-вправо/вверх-вниз, как в привычных видеорежимах, для создания эффекта плавного скроллинга, но и масштабироваться и вращаться посредством задания матрицы 2x2 афинных преобразований (помимо сдвига).
Что вообще тут происходило с точки зрения техники - когда видеочип в очередном сканлайне рисовал задний фон, он брал координаты текущего пикселя на экране (как обычно в 2Д-графике верхний-левый угол экрана это начало координат) и прогонял их через так называемое афинное преобразование:
px = A * x + B * y + U py = C * x + D * y + V
Получающие координаты (px,py) использовались как координаты для выборки результирующего пикселя из заднего фона. Так, что если U=V=B=C=0, а A=D=1, то задний фон будет отображен без искажений с началом в левом-верхнем углу экрана. Люди знакомые с 3Д-графикой могут не без веских на то оснований усмотреть здесь афинную матрицу 3x3 с последней строкой равной (0,0,1). Действительно в этих шести настраиваемых коэффициентах можно "зашить" перемножением матриц любые комбинации из сдвигов, масштабов и поворотов.
Это всё позволяло, к примеру, делать вращающиеся задники в Super Contra III "Alien Wars":
При этом же, как видите сверху присутствует полоска со статистикой - но вы уже наверное догадались, что т.к. фон в MODE 7 один единственный, то чтобы её сделать применяется та же техника HBlank-отсечения, что я описывал на предыдущей странице, здесь уже подменяются афинные параметры на лету по наступлению прерывания HBlank в нужной строке, пока луч кинескопа возвращается из конца одной строки в начало следующей.
Более того, совсем немного постаравшись можно было сделать 2 области с независимым вращением (+статистика) для сплит-скрина:
Т.к. в MODE 7 у SNES фон опять таки был один единственный, то сложные сцены должны были с этим как то жить. Например в той же Contra III было место, где на поле сбрасывал бомбы красиво вылетающий издали и приближающийся как бы из глубины экрана самолёт. Конечно, он реализован был этим масштабируемым фоном и при этом не было возможности сделать фон у области с этим самым самолётом, а пол на котором стоят игроки делался опять таки через старое доброе HBlank-отсечение:
Как тут заметно самолёт не вылетал за пределы верхней черной области - просто и не мог.
Но поистине MODE 7 раскрылся когда во время HBlank-а афинные параметры стали подменять в каждой строке.
Опять таки, люди знакомые с 3Д-графикой и матричными преобразованиями могли уже заметить, что перспективного преобразования в матрице выше было нельзя задать так, как это принято делать в 3Д - последняя "строка матрицы" всегда (0,0,1) и не управляется никак.
И тут на помощь опять приходил HBlank и подменяя коэффиценты A,B,C,D,U,V в каждой строке можно было добиться самой настоящей перспективной проекции, что нередко использовалось в разных играх:
Интересная тема, читаю с удовольствием.
=A=L=X=
> Так что да, Spectrum явно делался по принципу "дешево и сердито" - он был
> дешевле коммодора
Ты как думаешь, отчего клоны Speccy завалили постСССР, а Commodore был только у единиц? :)
> в ZX Spectrum 16/48 не было ни одной чёртовой аппаратной особенности, которая
> бы помогала делать видеоигры.
Цветовые атрибуты же
P.S. Не покушайся на святое :)
innuendo
> Цветовые атрибуты же
Мешались на стыках в связи с отсутствием независимых цветов для спрайтов (как и самих аппаратных спрайтов). Во многих играх поглядев на эти цветокосяки вокруг подвижных вещей зачастую отказывались от раскраски игрового поля, как максимум раскрашивая лишь статистику.
Грамотно применить раскраску было тем еще геморроем.
Причём в том же денди или Commodore 64 цветовые атрибуты были тоже. Но т.к. был независимый слой спрайтов, то было неважно даже то, что в денди этот селектор палитры был общий для блока 2x2 тайла, т.е. охватывал 16x16 пикселей - я об этом даже не догадывался, пока не прочитал спеки.
=A=L=X=
> Грамотно применить раскраску было тем еще геморроем.
Сам сэр Синклер сказал, что на Speccy доступ к видеопамяти проще
innuendo
> Сам сэр Синклер сказал, что на Speccy доступ к видеопамяти проще
Это тоже достаточно сомнительное утверждение. Смотря для чего.
Взять вывод текста - в "тайловых" видеорежимах текст выводится записью одного байта в карту тайлов (tile map), если предварительно заполнить данные тайлов (tile data) символами алфавита. В том же Commodore 64 данные тайлов для алфавита уже лежали в третьем банке ROM.
В спектруме придётся делать цикл для записи 8 байт в знакоместо.
Забавно, но даже в 32-битном Game Boy Advance в документации задние фоны (тайловые карты) классического поведения называются никак иначе, как "текстовые".