Как старые компьютеры, такие как Commodore 64, выводили на дисплей?

613
user3211355

Я размышлял об этом некоторое время сейчас. Я понимаю, что в наши дни графические карты хранят информацию о пикселях в своей выделенной памяти и выводят эту информацию через карту и на экран. У коммодора 64 и большинства старых компьютеров, насколько я понимаю, не было этих видеокарт с выделенной памятью. Я полагаю, они могли бы зарезервировать часть своей системной памяти как своего рода буфер кадров. Процессор может вычислить значения пикселей и сохранить данные в этом буфере кадров, а затем вывести эту информацию на экран. Так работали эти старые компьютеры или это какой-то другой процесс?

1

3 ответа на вопрос

3
user3767013

Да, это в основном то, как видео были сделаны в те дни. В качестве видеобуфера была зарезервирована память от 1 до 8 кБ, ЦП рассчитал вывод и сохранил его в ОЗУ.

Однако есть некоторые отличия от современной видеокарты:

  • Не было интерфейсов с высоким разрешением, таких как HDMI или VGA. Обычно композитное видео с цветовой схемой NTSC или PAL использовалось для подключения домашних компьютеров к телевизору.
  • Для текстового режима только код ASCII был сохранен байт для байта в памяти. Видеомонтаж имел небольшое ПЗУ, содержащее 5х7 точечных матриц каждого символа. Таким образом, экран размером 40x25 символов может быть сохранен всего за 1 кБ.
  • Существовали специальные чипы, такие как Intel 8275, которые объединяют все (доступ к буферной памяти, генерация тактовой частоты пикселей и синхронизацию для мониторов NTSC, доступ к ПЗУ с символьными точечными ПЗУ и т. Д.), Но иногда вся логика видео строилась с помощью логических ИС TTL ( пример: Apple II).
  • Поскольку оперативная память была разделена, видео схема использовала DMA или другой метод для прерывания ЦП для доступа к ОЗУ. Видеосхема почти всегда имела более высокий приоритет, поскольку не было никаких конвейеров для буферизации данных, а выходной видеосигнал в пикселях был критичным по времени.
1
echristopherson

I'm assuming you're talking about home computers of the late 1970s/early 1980s. Those computers did pretty much work as you conjectured. There were some complications, like hardware sprites, redefinable characters, and nonlinear memory layouts, but basically all those computers had at least a text mode where characters were stored as bytes in memory; and then later and fancier ones had color and bitmap graphics.

However, there was an older type of graphical display, the vector display, that only required the computer to keep the coordinates of visible points in memory. This was advantageous when manufacturers and consumers couldn't afford the memory required to hold even a very low-resolution bitmap.

0
supercat

Микропроцессор 6502 должен использовать свою шину памяти для половины каждого цикла; многие компьютеры в конце 1970-х и начале 1980-х годов воспользовались этим, построив свою систему памяти, чтобы она подключала 6502 к памяти в течение одной половины цикла и подключала видео схемы во второй половине. Интересно отметить, что Apple II, Vic-20 и Commodore 64 использовали разные подходы к синхронизации видео.

Apple II извлекал один байт видеопамяти за цикл ЦП, который определял, какой символ должен отображаться. Высота символов составляла восемь строк сканирования, поэтому каждый байт символьных данных получался восемь раз за кадр - по одному разу в каждой из восьми последовательных строк. Затем в качестве адреса в ПЗУ размером 512х5 бит будут использоваться шесть битов выбранного символьного байта вместе с нижними 3 битами символа строки развертки. Два верхних бита извлеченного символа будут выбирать нормальный, обратный или мигающий режим.

VIC-20 использовал более широкие символы и выбирал символ каждый цикл ЦП; в цикле после каждой выборки символов он будет принимать 8-битные символьные данные вместе с 3-мя битами числа строк развертки, добавлять это значение к значению, запрограммированному в регистре, извлекать байт с этого адреса и отображать его как восемь последовательные пиксели. Этот подход означал, что формы символов можно хранить в ОЗУ, а не в ПЗУ, и перепрограммировать как удобно (адрес памяти символов можно также установить в ПЗУ, если это необходимо, для экономии 2 КБ ОЗУ).

Commodore 64 должен был извлекать два байта на символ, как VIC-20, но ему нужно было выводить символы на экран вдвое быстрее (как Apple). Чтобы уравновесить эти потребности, пока он показывает первую строку сканирования каждой строки текста, он чередуется между извлечением символов и извлечением их форм, в то время как процессору не разрешено ничего делать. Однако при получении символьных данных видеочип также копирует их в 40-байтовый буфер. В то время как отображаются следующие семь строк текста, видеочип извлекает символьные данные из этого буфера, а не из ОЗУ, что позволяет ЦПУ делить свою долю циклов. Это позволяет системе отображать больше текста, например Apple, а также позволяет перепрограммировать символьные шрифты, такие как VIC-20. К сожалению, он останавливает процессор 25 раз за каждый кадр,