Original Macintosh
Macintosh

Многие классические Mac поддерживали дисплеи с разрешением 512×384, но компактные Mac, начиная с первой машины 1984 года и вплоть до Macintosh Classic II 1991 года, имели встроенные ЭЛТ-дисплеи размером 512×342 пикселя. Это относится ко всем чёрно-белым компактным «макам» с 9-дюймовым экраном. У более поздних Color Classic и Color Classic II был 10-дюймовый ЭЛТ-дисплей с полными 512×384.

Я решил узнать, почему Apple приняла такое решение. Почему дисплеи ранних Mac на 42 пикселя уже по вертикали, чем у более новых моделей?

Перелопатив кучу источников, должен сказать, что для ответа на этот вопрос нужно принять во внимание множество факторов.

Память

Первый Mac имел всего 128 килобайт памяти. Фото из начала статьи весит 604 КБ, примерно в 4,7 раза больше, чем весь объём памяти этой машины 1984 года. Разумеется, в последующих моделях Apple улучшила этот показатель, однако дизайнерские решения, принятые при разработке первого Mac, определили ограничения этой линейки на несколько лет вперёд.

На сайте Folklore.org Энди Херцфелд написал отличный пост с анализом множества первых версий того устройства, которое в конечном итоге превратилось в Macintosh, в том числе и модели с ещё меньшим количеством памяти:

В начале 1982 года архитектуре процессора 68000 исполнился всего год, а разработка ПО была далека от завершения, поэтому Бёрелл [Смит] опасался, что некоторые решения, принятые при разработке исходной конструкции, уже были неактуальны. Он использовал широкий «холст» специализированного чипа, в котором дополнительная логика была практически «бесплатной», чтобы обновить архитектуру.

Самое важное наблюдение заключалось в том, что ПО ни за что не уместится в 64 КБ памяти и нужно использовать полную 16-битную шину памяти, требующую 16 чипов ОЗУ вместо восьми. Дополнительный объём памяти позволил ему удвоить разрешение дисплея, сменив размер с 384х256 на 512x342. Также он добавил немного наворотов, например, генератор звука по DMA с четырьмя независимыми голосами. Это стало четвёртой версией архитектуры Macintosh.

Выпуск в 1980-х компьютера с разрешением 384×256 не было бы чем-то особо выдающимся. Максимальное разрешение выпущенного в 1982 году Commodore 64 составляло 320×200. У выпущенного в 1983 году Apple IIe имелось множество режимов дисплея:

  • Текстовый с 40 или 80 столбцами и 24 строками, чёрно-белый

  • Низкое разрешение: 40×48 (16 цветов)

  • Высокое разрешение: 280×192 (6 цветов)

  • Удвоенное низкое разрешение: 80×48 (16 цветов)

  • Удвоенное высокое разрешение: 560×192 (16 цветов)

Для вывода графики на экран компьютерам наподобие C64 и Apple II требовалось исполнять множество трюков. Macintosh должен был иметь полный GUI и разрешения 384×256 оказалось бы слишком мало, поэтому то, что 128 килобайт ОЗУ могут быть апгрейдом, сегодня может показаться совершенно непривычным. На самом деле, потрясающе, что инженерам удалось этого добиться.

При этом следует осознавать, что часть памяти Mac нужна была для управления дисплеем. При разрешении 512×342 для отрисовки полного экрана суммарно требовалось 21,8 КБ. Если бы Apple выбрала дисплей 4:3 с разрешением 512×384, то под него системе пришлось бы выделить 24 КБ. В те времена ценился каждый байт. Снова вернёмся к посту Энди Херцфелда:

Первый Macintosh имел всего 128 КБ ОЗУ (восьмую часть мегабайта), поэтому управление памятью обычно было самым сложным аспектом создания и системы, и приложений. Мы выделили примерно 16 КБ под систему, ещё 22 КБ под чёрно-белый экран 512х342, поэтому приложениям оставалось примерно 90 КБ. Самые тяжёлые пакеты наподобие MacWrite и MacPaint, казалось, трещали по швам.

Похоже, можно считать установленными два факта:

  • Первый Macintosh продавался с большим объёмом памяти по сравнению с более ранними моделями

  • Даже при 128 КБ приходилось очень сильно ужиматься

Дэниел Найт упоминал об этом в статье о первом Mac:

Как писал Энди Херцфелд, изначально Mac должен был иметь дисплей разрешением всего 256×256 пикселей (это был бы шаг вперёд по сравнению с графикой 280×192 Apple II). Только в январе 1981 года команда разработчиков Mac решила дать шанс Motorola 68000. Это очень пригодилось, ведь первый Mac имел дисплей размером 512×342 пикселей, для которого бы потребовалось более 30% из 64 КБ памяти, изначально планировавшейся для этого недорогого информационного прибора.

Тайминги CPU

«Сердцем» Macintosh стал процессор Motorola 68000 с частотой 8 МГц. Как и 128 КБ ОЗУ, это наложило неустранимые ограничения на оборудование дисплея.

Для минимизации мерцания ЭЛТ-экрана Apple стремилась достичь частоты обновления 60 Гц. Это означало, что CPU тратил треть своего времени на отрисовку дисплея. У первого Mac не было отдельного графического процессора, поэтому CPU приходилось тратить время на загрузку упомянутых выше 22 КБ ОЗУ, использовавшихся в качестве буфера дисплея. Схемы обработки видео компьютера считывали эти 22 КБ и отображали их содержимое на экране.

Если бы разрешение экрана было больше, то это бы отобрало ещё больше ресурсов, которые требовались для работы операционной системы и программ Mac.

Если вам знакомы стандартные телевизионные форматы, то вы, вероятно, уже поняли, что из-за этого сочетания частоты обновления и размера экрана Mac был несовместим с композитным видеосигналом NTSC, который поддерживал Apple II. (Эти параметры отличаются и от параметров систем PAL.) Это позволило Apple уравновешивать производительность и качество картинки так, как ей казалось правильным. Билл Аткинсон писал следующее:

Apple II отображал белый текст на чёрном фоне. Я утверждал, что для правильного отображения графики нам нужно перейти на белый фон, похожий на бумагу. Раньше при печати текста на принтере помогало инвертирование цветов, но фотографии печатались бы в негативе. Аппаратная команда разработчиков компьютера Lisa жаловалась, что экран будет слишком мерцать и что ей понадобится более быстрое обновление с более дорогой ОЗУ, чтобы при скроллинге изображение не смазывалось. Стив выслушал все плюсы и минусы, в итоге выбрав ради графического режима остановиться на белом фоне.

Интересный аспект: Mac работал на частоте не 8 МГц, а 7,83 МГц. Такое небольшое изменение частоты позволило Apple удобнее обеспечивать тайминги тактов CPU и упростить обновление ЭЛТ-экрана.

Квадратные пиксели

9-дюймовый дисплей с разрешением 512×342 обеспечивал «маку» пиксельную плотность 72 PPI, но, что более важно, этот размер экрана позволял Mac иметь квадратные пиксели.

Известно. что у первой машины Apple с GUI (Lisa) пиксели были прямоугольными; Энди Херцфелд писал об этом так:

Команда разработчиков Lisa решила оптимизировать дисплей под горизонтальное разрешение, чтобы можно было отображать 80 столбцов текста привлекательным шрифтом. Разрешение по вертикали было не столь важным, потому что для текста вертикальный скроллинг гораздо удобнее горизонтального. Разработчики решили одарить Lisa удвоенным разрешением по горизонтали, выбрав дисплей 720х360 пикселей. Высота пикселей была в два раза больше их ширины. Это отлично подходит для текстовых приложений, например, текстовых процессоров, но в более графических приложениях это выглядело довольно странно.

Когда Бёрелл перепроектировал Macintosh в декабре 1980 года, чтобы в нём использовался тот же процессор, что и в Lisa (Motorola 68000), это вызвало сильные волнения в Apple. Новая архитектура Бёрелла не только была намного проще, чем у Lisa, имея при этом в два с лишним раза меньше чипов, но и работала почти вдвое быстрее, используя частоту 8 МГц вместо 5 МГц. Ещё одним преимуществом стало то, что дисплей 384х256 пикселей Mac имел одинаковое разрешение по горизонтали и вертикали. Это свойство мы называли «квадратными точками». Квадратность точек упрощала создание графических приложений, потому что разработчикам не приходилось беспокоиться о неравенстве разрешений.

Херцфелд рассказывает о том, что команда проектировщиков Mac пыталась убедить команду Lisa перейти на квадратные пиксели, повысив разрешение машины до безумных на то время 768×512 пикселей, но это было невозможно, потому что когда состоялось это совещание, разработка Lisa находилась уже на поздних своих этапах.

Apple Lisa
Apple Lisa

Разумеется, Lisa оказалась провальным проектом, и в 1985 году Apple перемаркировала более позднюю её версию, назвав её Macintosh XL. Она продавалась с программной прокладкой MacWorks XL, позволявшей запускать ПО для Mac на Lisa, но квадратные пиксели программ выглядели растянутыми. Для решения этой проблемы Apple продавала продукт под названием Macintosh XL Screen Kit, менявший разрешение на 608×432 пикселя. Вот, как этот продукт описывается в документе про самодельные апгрейды, написанном Sun Remarketing — компанией, занимавшейся восстановлением оборудования Lisa.

Ни один восстановленный компьютер Lisa/Mac XL не может считаться завершённым без Macintosh XL Screen Kit. В отличие от стандартного 9-дюймового Macintosh с квадратными пикселями, Lisa/XL имеют прямоугольные пиксели. При прямоугольных пикселях круги походят на овалы, а квадраты на прямоугольники. Macintosh XL Screen Kit предназначен для того, чтобы делать пиксели квадратными. Пропорции становятся точно такими же, как на других Macs (один к одному), но общая площадь дисплея (608x432 пикселя) примерно равна размеру 12-дюймового WYSIWYG-монитора Macintosh 11 (640×480). Стандартные 9-дюймовые Mac отображают всего 512×342 пикселя.

Полный комплект модификации экрана включает новые загрузочные ROM 3A, новый ROM видео и новую катушку. (Для нового ПО также требуются System Update 5.0 и MacWorks Plus.) Для аккуратной установки полного комплекта требуется один-два часа.

Подражаем реальному миру

Команда разработчиков Macintosh не только сделала пиксели квадратными, чтобы экранная графика выглядела лучше, но и стремились к тому, чтобы компьютер был полезен тем, кто распечатывает на нём свою работу. Экрана 72 DPI было более чем достаточно для работы в приложениях наподобие MacWrite и MacPaint. Пользователи могли видеть свою работу в полном или уменьшенном размере, чтобы представлять, как будет выглядеть страница в целом. Позже появятся дисплеи больших размеров, но для 1984 года разрешение 512×342 было приличным.

Всё в равновесии

Если говорить вкратце, то невозможно дать одного простого ответа на вопрос о том, почему первые компактные Mac имели разрешение 512×342. Истинная причина обрезки вертикального разрешения на 42 пикселей забыта, но есть много свидетельств того, Apple видела в этом множество разнообразных выигрышей.

Apple собиралась сделать то, что делала лучше всего: спроектировать продукт с правильным балансом производительности, простоты использования и стоимости. Всего несколько лет спустя Mac начали поддерживать дисплеи большего размера, но для 1984 года равновесие было соблюдено идеально.

В самом первом выпуске журнала Macworld Мэтью Дуглас писал:

Внешность бывает обманчивой. Большинство компьютеров отображает текст на 24 или 25 «невидимых» горизонтальных строках экрана. Такое отображение называется текстовым режимом. Для отображения графики ПО переключается в графический режим, а дисплей превращается в поле из точек. Каждая точка (пиксель) или отключена (невидима), или включена (видима). Разумеется, у компьютера может быть несколько текстовых режимов и два или больше графических режимов, или же он может иметь смешанный режим графики и текста.

У дисплея Mac есть только один режим: графический. Весь экран состоит из точек: 512 точек по горизонтали и 342 точек по вертикали; суммарно 175104 точки, отображающих всё, что вы видите на экране Mac. (Теперь вы знаете секрет, благодаря которому этот компьютер имеет невероятный спектр типов, атрибутов и размеров шрифтов.)

В том же самом выпуске Дэвид Баннелл взял интервью у Билла Гейтса и задал ему вопрос, чем же уникален Mac. Гейтс, который ранее говорил, что он предложил бы попробовать поработать на Mac своей матери, ответил:

Mac проектировался как графическая машина. Apple не стала засовывать туда ROM-генератор символов или кучу видеорежимов. Она создала лишь один видеорежим 512х342, каждый пиксель которого соответствует биту. Монитор встроен в машину, чтобы обеспечивать невероятно чёткую картинку в одной интегрированной системе. Разработчики точно знали, каким будет соотношение сторон и как будут выглядеть точки. Также они обеспечили поддержку мыши и очень богатое графическое взаимодействие благодаря ROM на 64 КБ.

Можно установить в PC одну из самых лучших графических плат, подключить мышь Microsoft и запустить необходимое ПО, но это не то, для чего задумывалась эта машина. В основном PC используется в текстовом режиме, и на данный момент с ним в основном работают без мыши; нельзя добиться от PC графики уровня Mac по сравнимой цене. Хоть обе эти системы — это машины Тьюринга (то есть они имеют конечную память), подход Mac достаточно отличается.

Среди всех современных персональных компьютеров Mac уникален. В первый раз в истории разработчики решили: «Нам не нужно многое из того, что есть в других персональных компьютерах, так что давайте оптимизируем отдельные сферы и сделаем так, чтобы ПО было спроектировано на их основе».

Комментарии (6)


  1. sergey_prokofiev
    30.05.2025 09:50

    Фото из начала статьи весит 604 КБ, примерно в 4,7 раза больше, чем весь объём памяти этой машины 1984 года. 

    Как мне это развидеть?



  1. Oangai
    30.05.2025 09:50

    то, что здесь описано как "Тайминги CPU", или не совсем верно, или совсем неточно: процессор не тратил треть своего времени на обновление экрана, он этим обновлением вообще не занимался, для того и существовал фрейм графической памяти, чтобы графическая подсистема брала данные оттуда. Видеопотоков в то время еще не существовало, картинка была с точки зрения графической подсистемы достаточно статичной, как минимум покадровое обновление не ожидалось.

    На производительность графической подсистемы в первую очередь влияла скорость доступа к микросхемам DRAM: для монохромного режима требовалась частота серизлизации видеопотока порядка 6MHz, доступные DRAM в основном эту частоту не вытягивали, или на пределе. Но эта проблема решалась достаточно просто - сериализацию делали сдвиговым регистром с параллельной записью, сразу 8 бит, соответственно 8x раз падала необходимая частота выборки из DRAM.

    На общую производительность тогдашних машинок в первую очередь влияла организация взаимного доступа CPU и графической подсистемы к графической памяти, и вот тут были возможны варианты: с одной стороны, разработчикам приходилось идти на определённые компромисы между производительностью и стоимостью; с другой, не все факторы удавалось учесть и не все архитектурные решения оказывались удачными, у некоторых производительность сильно проседала в сравнении с задуманной. Но, надо думать, в Apple в то время разработкой занимались достаточно опытные люди, чтобы уже учитывать все эти факторы, да и не первый уже продукт они разрабатывали.


    1. Zara6502
      30.05.2025 09:50

      Видеопотоков в то время еще не существовало, картинка была с точки зрения графической подсистемы достаточно статичной, как минимум покадровое обновление не ожидалось.

      за Apple не скажу, но например в ATARI XL/XE экран обновлялся с частотой 50 Гц PAL и 60 Гц NTSC, так что фактически у вас были гарантированные 50/60 fps от системы. Но конечно занимался этим не ЦПУ, а графический чип, который по прерыванию брал из определенных участков ОЗУ задание на прорисовку - Display List и исходя из этого задания рисовал то, что ему сказали. Если упростить его работу - то просто формировал ТВ сигнал исходя из настроек оборудования и значений в памяти. Так же нужно понимать, что у всего этого был запас по времени, иначе вы просто не смогли бы писать софт и игры, которые нормально выводят картинку.

      Вот что можете прочитать про ATARI и его вывод изображения:

      Для NTSC скорость была выбрана на основе использования широко распространённого аппаратного компонента, применяемого в телевизионных дисплеях, — кварцевого генератора NTSC. Этот компонент генерирует импульс с частотой 14,31818 МГц. Затем эта частота была разделена на восемь, чтобы получить частоту 1,7897725 МГц, на которой работает 6502. Если один цикл процессора соответствует двум цветным тактовым импульсам, то на одну строку сканирования приходится 114 машинных циклов. 262 строки сканирования в кадре дают 29868 машинных циклов на каждый кадр. При частоте 1,7897725 МГц это означает, что каждую секунду происходит 1789772,5 машинных цикла, что даёт частоту кадров 59,92 Гц, которую можно отобразить на телевизоре (даже если она не совсем совпадает с вещанием NTSC).

      Системы PAL используют те же 228 цветовых тактов и 114 машинных циклов на строку, но отображают 312 строк сканирования. Это приводит к 35568 циклам на кадр. Кристалл PAL работает с частотой 14,18757 МГц, которая делится на 8, чтобы получить частоту процессора 1,77344625 МГц, а 35568 циклов на кадр дают частоту 49,86 Гц; опять же, это не совсем совпадает с вещанием в формате PAL, но в пределах допустимых отклонений.

      Списки отображения: как Atari генерирует отображение

      ANTIC — это специальный сопроцессор, который отвечает за отрисовку экрана в компьютерах Atari. Он тесно связан с процессором 6502 и фактически может рассматриваться как драйвер 6502, поскольку ANTIC может останавливать работу 6502 при необходимости. Поскольку только один чип может считывать данные из памяти в любой момент времени, ANTIC должен останавливать 6502, когда ему требуется доступ к памяти, поэтому из-за прямого доступа к памяти (DMA) инструкции 6502 могут занимать больше тактов, чем указано в документации к 6502. На самом деле, количество времени, которое «крадёт» ANTIC, зависит от многих факторов: графического режима, используемых игроков/ракет, размера игрового поля и многого другого.

      Поскольку на одну строку сканирования приходится 228 цветовых тактов и 114 машинных циклов, это означает, что за один машинный цикл на экране отображаются два цветовых такта. Типичная машинная инструкция может занимать 5 машинных циклов, поэтому за время обработки одной инструкции на экране может отображаться 10 цветовых тактов! Это означает, что на одну строку сканирования у нас остаётся не так много времени, поэтому DLI, которые пытаются изменить графику в середине строки, должны быть хорошо оптимизированы.

      Это также означает, что 6502-я модель слишком медленная, чтобы самостоятельно рисовать на экране, и здесь на помощь приходит специальный «набор инструкций» ANTIC. Вы программируете сопроцессор ANTIC с помощью списка отображения, и ANTIC берёт на себя построение строки за строкой, не требуя вмешательства со стороны кода 6502-й модели. (Если только вы не попросите о вмешательстве! Вот что такое DLI.)

      Список отображения — это специальная последовательность байтов, которую ANTIC интерпретирует как список инструкций. Каждая инструкция заставляет ANTIC отображать определённое количество строк определённым образом. Список отображения можно задать для любой инструкции ANTIC.

      ANTIC поддерживает списки отображения, в которых не более 240 строк сканирования (даже в системах PAL, где доступно гораздо больше строк сканирования), а интервал вертикального гашения всегда начинается после 248 строк сканирования. При отрисовке строк сканирования ANTIC пропускает 8 строк в верхней части дисплея, поэтому вывод из списка отображения начинается с 9-й строки сканирования. Стандартный список отображения начинается с 24 пустых строк и 192 строк отображения данных. Это означает, что телевизор увидит 32 пустые строки (8 автоматически пропущенных плюс 24 в стандартном списке отображения), за которыми следуют 192 строки отображения, затем 24 пустые строки и, наконец, вертикальная полоса, которая занимает оставшиеся 14 строк в NTSC (или 64 в PAL).


      1. Oangai
        30.05.2025 09:50

        так и есть, и я об точно об этом: для графики отводился участок памяти на полный кадр (позже его стали называть framebuffer), и графическая подсистема брала оттуда данные для каждого пикселя, а CPU туда обращался только по мере надобности. Просто из статьи можно было было понять что именно CPU занимался отрисовкой и тратил на это треть времени, что в корне не верно.

        Вопервых, производительность самой графической подсистемы от CPU никак не зависила, хотя простые реализации работали синхронно, использовали общий clock и не могли легко перестраиваться на режимы с различным разрешением или частотой кадра.

        Асинхронные системы уже имели свой clock, но требовали более хитрой блокировки доступа CPU в определённые моменты, чтобы не создавать артефакты кадра. От того, на сколько удачно эта синхронизация решалась, и зависела производительность CPU на конкретных операциях работы с графической памятью, хотя и не влияла на него в остальное время.

        Более простые синхронные системы могли использовать свободные такты процессора для обновления видеопамяти, если они там были, от архитектуры зависило, у 8080 например они были всегда, у Z80 вроде бы не обязательно, (про 6502 к сожалению не знаю). Поэтому и графика там и там по разному реализовывалась: более примитивные реализации у всяких домостроевских архитектур реально могли подтормаживать CPU на каждый третий такт без всякой пользы, более умные уже умели этого не делать. Но очень сомнительно что Apple стал бы применять такой домострой для нового продукта.


        1. Zara6502
          30.05.2025 09:50

          Просто из статьи можно было было понять что именно CPU занимался отрисовкой и тратил на это треть времени, что в корне не верно.

          Для многих систем именно ЦПУ тратил время на генерацию ТВ сигнала. Как конкретно с этим яблоком - не скажу, но такое поведение вполне могло быть. Если судить по статье, то важным было отсутствие мерцания на экране, а значит на заполнение буфера тратилось время и для обеспечения 60 кадров именно ЦПУ его и тратил, так как не было видеочипа, вот цитата из статьи:

          Для минимизации мерцания ЭЛТ-экрана Apple стремилась достичь частоты обновления 60 Гц. Это означало, что CPU тратил треть своего времени на отрисовку дисплея. У первого Mac не было отдельного графического процессора, поэтому CPU приходилось тратить время на загрузку упомянутых выше 22 КБ ОЗУ, использовавшихся в качестве буфера дисплея. Схемы обработки видео компьютера считывали эти 22 КБ и отображали их содержимое на экране.

          Пока я не вижу противоречий в статье о которых пишете вы. Например в приставке ATARI 2600 выводом изображения занимается сам ЦПУ 6502, а логика игры по жестким таймингам располагается между командами по генерации ТВ сигнала. Если для плавности интерфейса яблоко пошло по этому пути, то нет ничего удивительного что они отдали время ЦПУ на это. Так как это был 1980-ый год, то память стоила очень дорого, например для советского Микро-80 в 1987 году уже не было проблемой сделать логику из кучи микросхем, которая заменяла видеокарту и не трогала основной ЦПУ, там даже память под фреймбуффер была отдельная от ОЗУ.