Ibm совместимые компьютеры. Что такое IBM-совместимый компьютер. е и окончательный уход с рынка ПК

Большинство (более 90%) современных компьютеров является IBM PC-совместимыми персональными компьютерами. Эти компьютеры называются IBM PC-совместимыми, поскольку они совместимы с ком-пьютером IBM PC, разработанном в 1981 г. крупнейшей в мире ком-пьютерной фирмой IBM. Слово «совместимость» здесь означает: программную совместимость -- все программы, разработанные для IBM PC, будут работать и на всех IBM PC-совместимых компьютерах; в значительной степени -- и аппаратную совместимость: подавляющее большинство устройств для компьютеров IBM PC и более новых версий (IBM PC XT, IBM PC AT и т.д.) годятся и для современных компьютеров. Правда, обычно древние устройства (пяти- или десятилетней давности) в современных компьютерах не применяются, так как они давно уже морально устаре-ли.

А слово «персональный» означает, что этот компьютер рассчитан на одновременную работу с одним пользователем (большие компьюте-ры, как правило, поддерживают одновременную работу многих пользо-вателей).

Важнейшую роль в развитии IBM PC-совмести-мых компьютеров сыграл заложенный в них фирмой IBM принцип открытой архитектуры. Фирма IBM сделала компьютер не единым неразъемным уст-ройством, а обеспечила возможность его сборки из независимо изготовленных частей аналогично детскому конструктору. При этом методы сопряжения раз-личных частей компьютера IBM PC и подсоединения к нему внешних уст-ройств не только не держались в секрете, но были доступны всем желающим. Поэтому производить комплектующие и внешние устройства для IBM PC смогли не только отобранные IBM фирмы, а все желающие, а скоро сотни фирм стали осуществлять сборку и самих компьютеров. Через пару лет IBM стала не монополистом в выпуске разработанных ею компьютеров, а одной из тысяч конкурирующих между собой фирм. Причем многие сборщики стали не только перенимать достижения фирмы IBM, но и внедрять многие технические новинки раньше IBM, так что IBM перестала быть и технологическим лидером. Сейчас фирма IBM перестала быть самым крупным производителем IBM PC-совместимых компьютеров. И даже термин «IBM PC» обычно используется в смысле «IBM PC-совместимый компьютер», а не как название компьютера, произведенного самой фирмой IBM.

Но то, что пошло во вред фирме IBM, самым благоприятным образом ска-залось на рынке IBM PC-совместимых компьютеров. Конкуренция тысяч сборщиков компьютеров, производителей комплектующих и программного обеспечения привели к стремительному росту возможностей компьютеров, предназначенных для них устройств и программного обеспечения и снижению цен на них. Многие фирмы вкладывали огромные средства в разработку программ, поскольку были уверены, что программы будут работать на всех IBM PC-совместимых компьютерах, какие бы их модели в дальнейшем ни появлялись

Открытость рынка IBM PC-совместимых компьютеров повлекла за собой острейшую конкуренцию тысяч производителей компьютеров и их комплектующих, а значит, к максимально быстрым темпам внедрения технических новинок, обеспечивающих повышение возможностей компьютеров при сохранении относительно низких цен (от нескольких сотен до нескольких тысяч долларов). Модульное устройство и интеграция компонентов IBM PC-совместимых компьютеров обеспечили компактность компьютеров, их высокую надежность и простоту ремонта.

Модульное устройство IBM PC-совместимых компьютеров также обеспечило возможность их легкой модернизации, в том числе силами самих пользователей. В результате пользователи могли приспособить эти компьютеры к своим нуждам, купив и подсоединив то или иное устройство, а также увеличить мощность своего компьютера (например, установив более мощный процессор или более емкий жесткий диск).

Относительно высокие возможности IBM PC-совместимых компьютеров по переработке информации позволили использовать их (а не более мощные компьютеры) как для решения подав-ляющего большинства задач в бизнесе, так и для почти всех личных нужд пользователей.

Анализ текста

Информация

Данное издание относится к научно-популярной литературе, читательский адрес - популярное.

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

Цель данной книги - не только дать информацию о возможностях персонального компьютера. Составитель учебника предлагает читателю историю появления компьютера, помогает найти рациональные программы и методы ведения работы. И если на первый взгляд такая информация кажется лишней, то после ее изучения, во-первых, расширяется кругозор, а работа за ЭВМ становится предельно простой, не требует выполнения длительных и ненужных операций.

Данная книга состоит из нескольких разделов, разбитых на подразделы. Я рассматривала раздел «Что такое компьютер?».

В подразделе «Что такое компьютер» рассказывается об эволюции от арифмометра до современного компьютера. Приводится в пример разность объема функций, выполняемых этими двумя устройствами.

В подразделе «Представление информации в компьютере» говорится о том, что информация хранится в компьютере только в числовой форме. Любая информация в РС преобразовывается в цифры, в системном блоке данные могут обрабатываться лишь в таком виде.

В подразделе «Как работает компьютер» рассказывается об устройстве компьютера, о принципах его работы. В подразделе идет речь о том, что любая информация вводится в компьютер с помощью средств ввода (клавиатура, сканер и т.д.), после обрабатывается в системном блоке и выводится на обозрение пользователя, например на монитор.

В подразделе «Программы для компьютеров» говорится о том, что в общем компьютер не выполняет никаких операций. Ими занимаются созданные специально для этого программы. Также читатели могут узнать о видах существующих программ.

В подразделе «IBM PC-совместимые компьютеры» объясняется значение «совместимости», а именно - все программы, разработанные для IBM PC, будут работать и на всех IBM PC-совместимых компьютерах. В подразделе приведена исчерпывающая информация о последствиях создания такой совместимости как для фирмы-производителя, так и для простых пользователей.

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

Чтобы оценить качество информации, данной составителем, необходимо проанализировать ее с точки зрения следующих критериев:

В целом по данному тексту наблюдается достаточность информации , то есть информация в данном разделе подана таким образом, что исключается двоякое или неверное восприятие мысли автора о появлении ЭВМ, читатель по тексту правильно уясняет для себя принципы работы компьютера.

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

Серьезной проблемой для некоторых современных изданий является избыточность информации . Давно известные всем факты, тавтологии, а также «лишняя» информация только засоряют текст. Наш раздел книги не страдает от избыточности информации .

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

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

Информационная составляющая

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

Для оценки информационной составляющей используются следующие критерии:

  • 2) История изображаемого - в тексте приведена история создания ЭВМ от арифмометра до современного PC, не пропуская даже самые неудачные попытки создания компьютера.
  • 3) Классификация материала - данное издание адресовано для массового читателя, так как некоторые разделы содержат информацию для общего развития, а остальные позволяют усвоить материал даже неопытному читателю, не имевшему дела с компьютером.

Таким образом, видно, что подача информации как во всей книге, так и в разделе «Что такое компьютер?» организована логично, продумана, что свидетельствует о качестве и силе информационной составляющей.

Связь с другими составляющими

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

Важную роль в тексте играют психологическая составляющая, которая привлекает внимание читателя, поддерживает интерес, а также эстетическая составляющая, возникающая в результате интуитивной оценки читателем целесообразности построения. Конечно, в зависимости от целей произведения меняются значения в нем той или иной составляющей.

В нашем тексте главенствующую роль играют информационная и логическая составляющие.

Ключевая единица производительности системы. От выбора модели зависит скорость расчетов, быстродействие, выбор задач и не только. На Ваш выбор, как недорогие производительные 2-4 ядерные решения для дома, так и мощнейшие 6-12 ядерные процессоры для рендеринга и моделирования

Материнская плата - база любого компьютера и основа для остальных комплектующих. Именно на ней строится система. Многослойная печатная плата с обилием разъемов и слотов расширения объединяет такие компоненты как процессор, видеокарту, ОЗУ и диски.

Недорогой, но очень важный элемент ПК, от которого зависит стабильность работы процессора, склонного к перегреву при интенсивных нагрузках. Регулярное охлаждение ЦП убережет вас от артефактов и поломок компьютера. Ключевые характеристики кулера – уровень шума, скорость вращения и тип подшипника

Графическое ядро – ключевой узел для обработки данных, связанных с просчетом 3D-объектов. Это незаменимая составляющая любого игрового компьютера или графической станции. Мощные видеокарты требовательны к качеству блоку питания, поскольку могут потреблять до 300Вт энергии.

Механический накопитель, являющийся постоянным хранилищем всей информации на компьютере. Его характеристики определяются скоростью вращения шпинделя (5400/7200rpm) и емкостью. Последний показатель может колебаться от 500 ГБ до 10 ТБ. Вы сами определяете для себя задачи, возложенные на HDD.

SSD

Твердотельные накопители (Solid State Disk) – устройства для хранения данных с запредельной скоростью чтения и записи информации, которые существенно быстрее обычного HDD. Их также отличает бесшумность и отсутствие механических компонентов, способных выйти из строя.

Металлический кейс, в котором собираются все элементы системного блока. От выбора модели будет зависеть компактность ПК, качество охлаждения, количество места для установки комплектующих и свободное пространство для дальнейшего апгрейда. Некоторые корпуса поставляются с предустановленными блоками питания.

Важнейший элемент компьютера, запитывающий все ключевые компоненты компьютера (процессор, видеокарту, диски, системы охлаждения). Качественные БП дополнительно защищают ПК от короткого замыкания, скачков напряжения и статики.

ПО и операционная система – ключевые компоненты системы, связывающие воедино все компоненты ПК, заставляя их работать корректно. Устанавливайте только лицензионное ПО, чтобы обезопасить себя в дальнейшем, получая официальную поддержку от производителя.

МОДДИНГ

Дополнительные опции

PCI/PCI-E контроллеры LPT, COM, 1394 FireWire, SATA, USB 3.0. Устройства для подключения любых карт-памяти. Bluetooth адаптеры. Регуляторы вращения вентиляторов, классические и с сенсорным управлением. Дополнительные USB контроллеры на переднюю панель 3,5”; 5,25“

Звуковая карта – замечательная альтернатива встроенному в материнскую плату аналоги. Дискретная плата полностью раскроет потенциал акустических систем, добавит современные интерфейсы подключения колонок и позволит получить эффект полного погружения в фильм или игру.

Периферийное оборудование

Монитор – ваше окно в мир информации. TN, PLS, IPS-матрицы с LED-подсветкой, задержкой от 1 мс и способностью отображать картинку на экране с диагональю 22, 24, 27, 30 и более дюймов. Хотите получить больше ощущений от любимой игры? Присмотритесь к геймерским моделям с частотой обновления 120, 144 и даже 240 Гц.

Устройство ввода информации и верный компаньон в большинстве современных игр. У нас представлены офисные модели с минимальным функционалом, мультимедийные с дополнительными клавишами и геймерские варианты. Механические или мембранные переключатели, с подсветкой и без таковой. Найдите вариант по душе.

Оптическая или лазерная мышь – незаменимый компонент ПК, с помощью которого вы будете открывать папки, перемещать документы, серфить интернет, взаимодействовать с программами и играми. Проводные или беспроводные модели. Строгие офисные, или геймерские с дополнительными клавишами. Выберите модель под свою ладонь.

Акустическая система - устройство вывода звукового сигнала и отличный компаньон при просмотре мультимедийного контента, а так же играя в любимые 3D игры. Организуйте домашний кинотеатр, подключив акустическую систему к звуковой карте и наслаждайтесь фильмами и музыкой. Получите преимущество в играх, издали услышав шаги противника.

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

Защита питания крайне важна в местах с регулярными перебоями в работе электросети. Источник бесперебойного питания позволят ПК работать стабильно без неожиданных аварийных отключений. Характерный звуковой сигнал даст понять, что пора завершать сеанс и сохранять изменения в документации, дабы труд не оказался напрасным.

Для тех, кто решил собрать компьютер в интернет-магазине «ЖЕЛЕЗА.НЕТ», действует постоянное предложение – сборка компьютера, проверка, диагностика, настройка и стресс-тестирование комплектующих бесплатно!

Клиент получает полностью подготовленный к дальнейшей работе системный блок, собранный из тех комплектующих, которые вы ранее выбрали в нашем онлайн-конфигураторе ПК. Если дополнительно вы заказали пакет программного обеспечения или операционную систему, они также будут установлены и отлажены. Каждый предлагаемый компьютер тщательно тестируется на работоспособность под максимальной нагрузкой. При желании заказчика обновляем BIOS, меняем штатный термоинтерфейс на более качественный, проверяем стабильность под разгоном и не только.

Собрать оптимальную сборку ПК с помощью конфигуратора онлайн

Неоспоримым преимуществом нашего конфигуратора ПК является возможность подбора не только основных аппаратных компонентов, но и периферийных устройств. В интернет-магазине «ЖЕЛЕЗА.НЕТ» представлены как новые, так и актуальные модели мониторов, акустических систем, клавиатур и мышек. Подключайте фантазию, приобретая элементы будущего компьютера в едином стиле. Наша команда специалистов не позволит вам запутаться в многообразии товаров. Собрать компьютер с проверкой совместимости не составит особо труда для специалистов компании.

Подобрать комплектующие? Что может быть проще

Ассортимент предлагаемых на рынке комплектующих ежемесячно растет и расширяется. С одной стороны, определиться с выбором железа становится проблематично. С другой же, у вас есть отличная возможность найти именно тот компонент, который максимально подходит к задачам, возложенным на будущую систему. Собрать компьютер с помощью он-лайн конфигуратора ПК – самый простой и доступный способ сгенерировать индивидуальную модель, полностью соответствующую конкретным требованиям. Наш сервис позволит найти оптимальное «железо» без переплаты за ненужный функционал и невостребованные опции. Параллельно он подскажет, как избежать лишних трат при выборе материнской платы или видеокарты под конкретный процессор. Если вы хотите приобрести игровой компьютер в топовой конфигурации без переплат, попробуйте заменять некоторые компоненты (модель GPU, система охлаждения, корпус, диски), во избежание накрутки за бренд. На сегодняшний день не существует плохих производителей, зато недооцененных – через край.

Откройте в себе задатки системного администратора

Самостоятельная сборка ПК научит вас разбираться в компонентах и их характеристиках, что существенно облегчит задачу в последующих апгрейдах. Вы сможете отсеивать несоответствующие вашему сокету и чипсету комплектующие, находить актуальные модели товаров и выстраивать плацдарм для дальнейшей модернизации ПК. Наш конфигуратор ПК с проверкой совместимости сам уберет неподходящие детали, если вы захотите собрать компьютер «с нуля», но не обладаете достаточным опытом для этих целей. Помните, что каждая система требует особого подхода: Домашний (мультимедийный) – хорошая видеокарта, большое количество памяти, качественная акустическая составляющая; Офисный – быстрый процессор для оперативной обработки данных, емкий HDD; Игровой – мощная графическая подсистема, ЦП с возможностью разгона (и соответствующая материнская плата под него), большое количество ОЗУ, быстрый SSD. Рабочая станция для обработки графики – все идентично игровому ПК, но с еще большим размером оперативной памяти и внушительным хранилищем данных (Raid-массив из нескольких HDD).

Преимущества онлайн-конфигуратора интернет-магазина «ЖЕЛЕЗА.НЕТ»

С помощью конфигуратора на нашем сайте вы соберете ПК для любых нужд. Стоимость системного блока отображается автоматически, а потому всегда можно подобрать более дешевую или дорогую альтернативу в зависимости от заложенного ранее бюджета. Не обязательно добавлять в корзину все элементы, представленные в категориях. Возможно, у Вас уже есть HDD, системная плата или GPU. Осталось лишь выбрать недостающие запчасти, ориентируясь на уже имеющиеся, собрав оптимальную по всем параметрам систему. Хотите сохранить конфигурацию? Нет ничего проще. Вернетесь к ней, как только появится время доделать, или переработать сборку.

Помощь специалистов по щелчку пальца

Возникли трудности на этапе виртуальной сборки, или не знаете, какой процессор подойдет для ваших задач? Обратитесь к команде специалистов интернет-магазина «ЖЕЛЕЗА.НЕТ» любым удобным способом: почта, телефон, мессенджеры, социальные сети. Задайте интересующий вопрос и получите на него исчерпывающий ответ. Собирая систему с помощью конфигуратора ПК, вы не переплачиваете дополнительно за сборку, диагностику, настройку и тестирование компьютера – все эти услуги мы оказываем бесплатно. Вы всегда знаете, на что потратили средства. Сделайте заказ уже сейчас и станьте обладателем новенького системного блока, а может и полностью готового компьютера в сборе. Мы всегда будем рады помочь.

IBM - крупная корпорация, сегодня занимающаяся разработкой и поставкой программного обеспечения и других высокотехнологичных продуктов. За свою более чем 100-летнюю историю она принесла на рынок много новинок. Именно благодаря IBM компьютеры появились практически в каждом доме.

Начало

IBM появилась в то время, когда персональный компьютер было даже сложно себе представить. В 1896 году ее основал Название компания тогда получила TMC и занималась производством счетно-аналитических машин, которые продавались главным образом правительственным организациям.

В начале своей истории компания получила огромный заказ от Министерства статистики, и благодаря этому сразу заняла существенную позицию на рынке. Впрочем, основателю и владельцу по причине проблем со здоровьем все же пришлось продать фирму известному финансовому гению Чарльзу Флинту. Миллионер заплатил за компанию огромную по тем временам сумму в 2,3 млрд. долларов.

Появление IBM

Получив контроль над компанией TMC, Чарльз Флинт незамедлительно начал ее объединение с другими активами, например, ITRC и CSC. В результате был создан прообраз современного «голубого гиганта» - корпорация CTR.

Образованная компания занялась выпуском самого разнообразного оборудования, соответствующего тому времени. Среди него были весы, системы учета рабочего времени и, самое главное, перфокартное оборудование. Именно последнее сыграло большую роль при переходе компании на производство компьютеров.

Впервые бренд IBM появился в 1917 году на канадском рынке. Именно так компания решила показать, что стала международной корпорацией. После достаточного успеха нового названия американское подразделение в 1924 году также сменило название на IBM.

Несколько следующих лет компания активно продолжает совершенствовать собственные технологии, создав новый тип перфокарт с названием IBM Card. Также корпорация вновь получает доступ к большим государственным заказам, что позволяет ей практически не проводить сокращения даже в период Великой депрессии.

IBM и Вторая мировая война

Компания IBM достаточно активно сотрудничала с фашистским режимом в Германии. В 1933 году после на территории Германии корпорация даже запустила собственный завод. Впрочем, компания, как и большинство других американских фирм, заявляет только о продаже машин и не считает это поддержкой режима.

На территории США в годы войны корпорация большей частью занималась снабжением фронта по государственному заказу. Она занялась производством прицелов для метания бомб, винтовок, деталей моторов и других необходимых военным товаров. При этом глава корпорации тогда установил номинальный размер прибыли в 1%, который отправлялся не акционерам, а на нужды фондов помощи.

Начало эры компьютеров

Первый IBM-компьютер был выпущен в 1941-1943 годах и получил название «Марк-I». Весила машина внушительные 4,5 тонны. После проведения тестирования ее официальный запуск состоялся только в 1944 году, после переноса в Гарвардский Университет.

Фактически «Марк-I» был очень сильно усовершенствованным арифмометром, но за счет автоматизации и возможности программирования он является первой электронной вычислительной машиной.

Сотрудничество международной корпорации и главного разработчика оказалось крайне неудачным. IBM-компьютеры продолжила разрабатывать уже без него. В результате в 1952 году компания выпустила первую ламповую ЭВМ.

В конце 1950 были созданы первые IBM-компьютеры на основе транзисторов. Именно благодаря этому усовершенствованию удалось повысить надежность вычислительных машин и создать на их основе первую систему обороны от ракетного удара. В это же время появляется первый серийный компьютер IBM с жестким диском. Правда, накопитель, показанный советскому лидеру в 1958 году, занимал два больших шкафа и был объемом 5 Мбайт. Цены IBM на него установила тоже немаленькие. Первый прообраз жесткого диска стоил около 50 000 долларов США по ценам того времени. Но это было только начало.

Первое появление IBM System

В 1964 году были представлены новые IBM-компьютеры. Они значительно изменились и задали стандарты на много лет вперед. Семейство получило название IBM System/360. Это были первые машины, которые позволяли постепенно наращивать вычислительную мощность за счет смены модели и при этом не менять программного обеспечения. Именно в этих мэйнфреймах впервые стала применяться технология микрокода.

Созданные IBM компьютеры получили очень удачную архитектуру, которая стала фактическим стандартом на многие годы. И сегодня серия System Z, которая является логическим продолжением линейки System/360, применяется очень активно.

Первый ПК

В IBM персональные компьютеры не рассматривали как перспективный рынок. Однако в 1976 году представили первую настольную ЭВМ серии IBM 5100. Она предназначалась больше для инженеров и мало подходила для офисной работы или персонального использования.

Первый массовый персональный компьютер «голубой гигант» представил только в 1981 году. Собственно говоря, в компании не особо надеялись на его успех. Именно поэтому большинство его составляющих приобрели у других компаний. Новая ЭВМ была включена в семейство IBM 5150 и получила наименование PC.

Популярность IBM PC

Новый процессор от компании Intel потребовал и которую очень удачно предложила молодая компания, основанная Биллом Гейтсом.

Самым главным фактором, принесшим популярность PC, стала открытость архитектуры. В корпорации впервые отказались от многолетних принципов и не стали лицензировать применявшиеся комплектующие или BIOS. Это позволило множеству сторонних фирм на основе опубликованных спецификаций быстренько наладить сборку «клонов».

Открытая архитектура обеспечивала и другие преимущества, такие, как возможность ремонта и самостоятельной модернизации ЭВМ. В дальнейшем это дало развитие персональным компьютерам.

Впрочем, сама IBM на рынок домашних компьютеров практически не попала. Первоначальная модель IBM PC была достаточно дорогой. Плюс к этому базовому комплекту требовалось приобрести контроллер гибких дисков и сами накопители. Конкуренты на этом фоне выглядели более перспективно.

Тем не менее, компания попробовала запускать ряд моделей и для домашних пользователей. Одна из них под названием IBM PCjr вошла в число 25 худших компьютерных устройств. Но производство этой модели было быстро прекращено.

В бизнес-сегменте IBM традиционно чувствовали себя превосходно, в том числе и на рынке персональных ЭВМ. Это достигалось высокой узнаваемостью бренда, продуманным маркетингом. Результатом успеха стало появление машин IBM PC/XT и IBM PC/AT.

Первый ноутбук

Несмотря на достаточное плохое изначальное отношение к персональным компьютерам, гигант был вынужден задуматься. Прежде всего, на это повлиял ошеломляющий успех IBM PC. К слову, полугодовой план продаж первого персонального компьютера был выполнен менее чем за 30 дней.

IBM Convertible поступил в продажу в начале 1986 года и, несмотря на достаточно скромные характеристики, производился до 1991 года. Из новшеств это устройство было первым ПК от гигантской корпорации снабжено 3,5” дисководом.

90-е годы

К 90-м годам гигантская корпорация стремительно теряла позиции на рынке персональных компьютеров, но долгое время продолжала выпускать новые модели стационарных и мобильных ЭВМ.

Сначала в 1990 году компания IBM представила на рынок новый компьютер, имеющий совершенно новую архитектуру и несовместимый по аппаратной и программной части с прошлыми поколениями.

Новый компьютер получил современную шину передачи данных, а многие компоненты изменили таким способом, что воспроизвести их небольшими компаниями из Азии было практически невозможно по технологическим и лицензионным причинам. Но архитектура оказалась провальной. Хотя некоторое новшества, примененные в этих ПК, просуществовали достаточно долго, например, разъемы для мыши и клавиатуры PS/2 иногда используется даже в современных машинах.

Одновременно компания производила серию ЭВМ, совместимых с прошлым поколением под названием PS/1, а позднее - Aptiva.

Это были последние персональные компьютеры, производимые «голубым гигантом». К 1996-1997 году производство машин для этого сегмента рынка было свернуто.

2000-е и окончательный уход с рынка ПК

Компания IBM, несмотря на прекращение разработки и производства стационарных ПК, продолжала выпускать и достаточно успешно продавать на рынке ноутбуки. Некоторые пользователи даже продолжали считать компьютеры производства IBM эталонами.

В 2004 году корпорация приняла непростое решение, в результате весь бизнес по производству персональных ЭВМ и ноутбуков был продан китайской компании Lenovo. Сама компания сосредоточилась на гораздо более интересном для гиганта рынке серверов и услуг поддержки. Несколько позднее IBM продала и другие подразделения, связывающие ее с производством ПК, например, занимавшийся выпуском жестких дисков отдел перешел под контроль HITACHI.

Многолетняя история IBM позволила компании накопить огромный опыт в создании компьютерной техники и программного обеспечения. Сегодня, даже несмотря на уход с рынка ПК, компания оказывает достаточно сильное влияние на развитие всей отрасли.

С поддержкой же работы SD-карты возникло сразу два больших вопроса – аппаратная поддержка шины SPI и протокол взаимодействия с самой картой.

В принципе, SPI можно реализовать полностью программно, но мне хотелось поразвлекаться и с «железом» тоже, поэтому я героически принялся за рисование приемо-передатчика байта в схемном дизайне. К моему удивлению, ничего сложного в этом не оказалось, и довольно скоро я уже наблюдал на экране осциллографа резво бегающие 8-битовые пакеты, содержащие именно то, что мне хотелось. Кстати, тут я впервые оценил возможность нового осциллографа не просто показывать кучу сигналов, а еще и объединять их логически в соответствующую шину. Намного приятнее видеть, что осциллограф понял, что передается именно байт A5, а не вручную смотреть, в нужных ли местах находятся переходы с 0 в 1 и наоборот.

Для упрощения задачи я не пытался подстраиваться под все типы и разновидности карт, а ограничился оригинальной SD (не SDHC или еще какие-то варианты) картой. Немного программирования, и вот уже на экране стало отображаться содержимое 0-го сектора карты. Сразу после этого привел эти функции в некоторое подобие INT 13h, добавил в зачаточном виде INT 19h (boot load) и увидел на экране следующее:

Так как в тот момент при чтении всегда считывался только 0-ой сектор, то начальный загрузчик (находящийся как раз в этом секторе), не находил ОС для загрузки, о чем и сообщал. Но это уже мелочи – главное, что моя схема потихоньку начала превращаться в настоящий компьютер и уже даже пыталась загрузиться!

Далее пошла борьба с пересчетом физических секторов в логические блоки. Тут я тоже схалявничал и вместо определения параметров (образа) диска просто жестко забил цифры для конкретного экземпляра образа. С этой частью пришлось повозиться – вычисления почему-то приводили к совершенно неожиданным результатам (вообще никогда не любил арифметику на ассемблере). Тем не менее, после некоторых мучений физические сектора/цилиндры/головки стали исправно переводиться в логические блоки, и пришло время попробовать загрузиться уже по серьезному.

Естественно, сразу загрузка не прошла, да я и не ожидал этого. Заранее зная, что у меня в BIOS’е не реализована куча функций, я поставил на все прерывания заглушки, и при обращении к нереализованной функции на экран выводилась вся необходимая информация – к какому прерыванию и с какими аргументами обращаются. Далее шел процесс написания обработчика соответсвующей функции (а еще чаще – просто временной заглушки), и процесс продолжался. Неожиданно все остановилось на функции, которая вообще отсутствует в оригинальной PC – одна из функций INT 2F, связанную с обработкой событий. Я видел, что DOS определяет тип PC, и вроде не должна вызывать прерывания, отсутствующие на данном типе, но, тем не менее, это происходило, и процесс останавливался. Простая заглушка не помогла, а всю функцию реализовывать не хотелось из принципа.

Сейчас уже не помню весь ход мыслей (очень много чего смотрел в тот момент в исходниках DOS и в процессе загрузки), но в очередной раз на данном «зависании» я решил вызвать кучу прерываний (в тот момент у меня был отключен таймер на INT 08h) и нажал клавишу Shift. Неожиданно случилось чудо:

Скажу честно, эмоций на меня нахлынуло довольно много – проделать путь от макетки с парой микросхем до загрузки DOS за месяц, да еще и короткими набегами (из-за хронической нехватки времени) вроде довольно круто (извините за хвастовство)!

Кстати, с этим сообщением у меня есть до сих пор неразгаданная загадка. Дело в том, что после доделки прерывания таймера DOS стала загружаться без зависания в данном месте, но вот сообщение о копирайте Microsoft почему-то не выводится. Вроде оно также не выводится и на настоящем компьютере (к сожалению, попробовать не на чем). В чем тут первопричина – тайна, покрытая мраком. Я пытался понять логику по исходным кодам DOS, но сходу не увидел, а много времени тратить не захотел. Тем не менее, вопрос все еще мучает потихоньку…

После запуска DOS пришла очередь позапускать другие программы. Наверное, можно догадаться, чья очередь была первой – естественно, как говорят, старый добрый Norton Commander. Как ни странно, возни с ним было заметно больше, чем с DOS’ом. NC при запуске вызывал дикое количество функций, причем в ряде случаев обойтись простыми заглушками не удавалось, приходилось писать хотя бы минимум функциональности.

Тем не менее, проблемы были больше количественные, чем качественные, и вскоре удалось довести процесс загрузки NC до логического завершения:

Такой «интересный» внешний вид обусловлен несколькими причинами:
- видеоадаптер не поддерживал на тот момент атрибуты
- у меня не было второй части знакогенератора, в которой содержиться псевдографика, поэтому в соответствующих местах оказались символы из нижней части кодовой таблицы
- не были реализованы некоторые функции INT 10h.

Вообще меня периодически удивляло, каким именно образом реализованы те или иные функции в различных программах (и даже в DOS). Например, команда CLS (очистка экрана) вызывала функцию INT 10h, вызывающую сдвиг окна вверх. При этом в качестве окна указывалась вся доступная экранная область, и сдвигалась она на количество строк, равное количеству строк на экране. Так как я не ожидал, что функции работы с окнами вообще кто-то использует, то и не спешил их реализовывать. Результат оказался налицо (вернее, на экране). Впрочем, к странностям некоторых программ еще вернемся немного дальше…

После запуска NC у меня возникло естественное желание привести его в божеский вид. Тем более, что такая часть работы иногда даже более приятна, чем попытки завести вообще мертвое устройство. С псевдографикой особых проблем не было – просто довольно много времени на ручное рисование символов (знакогенератор у меня был прямо в виде VHDL кода). А вот с атрибутами пришлось немного напрячься.

Еще раньше, по ходу процесса, я стал применять некоторые элементы VHDL. Сначала практически насильно – все-таки было желание еще раз попробовать освоить этот язык, а потом и потому, что в определенных случаях это оказывалось удобнее, чем использовать схемный дизайн. Даже в самом видеоадаптере мне пришлось вникнуть в код – изначально поддерживалось 43 (или что-то около этого) строки, мне же нужно было переделать на 25 строк. И поддержку атрибутов я сначала попытался сделать схемным дизайном, но вдруг стал осознавать, что вроде использовать VHDL для этого может оказаться проще. Естественно, все двигалось с большим трудом и использованием самых простых конструкций языка, но я вдруг начал понимать суть VHDL – пока еще совсем чуть-чуть, но уже достаточно, чтобы начать на нем что-то осознано создавать, а не просто модифицировать уже имеющееся.

Моя возня с VHDL не прошла даром, и через некоторое время я смог увидеть что-то давно и хорошо знакомое:

Да, там еще можно было заметить некоторые недоделки (типа сдвинутого на один символ атрибута), но в целом цветной текстовый режим 80x25 заработал так, как должен.

Следующим на очереди стоял контроллер прерываний 8259. Сначала возникла мысль попытаться использовать уже имеющийся из какого-то проекта, но ни один из них мне по разным причинам не понравился (либо слишком примитивные, либо, наоборот - я не понимал, как они работают, а документация отсутствовала). Была даже попытка купить коммерческую IP (в данном случае IP это не Internet Protocol, а Intellectual Property), но производители не хотели заморачиваться с продажей целой одной штуки…

В конечном итоге пришлось взяться за листик бумаги и набросать нечто типа (блок)схемы контроллера, которую потом начал реализовывать на VHDL. За полной совместимостью не гнался – мне нужна была (на данном этапе) поддержка одного основного режима приоритетных прерываний, возможность маскировать прерывания (также читать маску прерываний) и выполнять команду EOI (End Of Interrupt). На мой взгляд, этого должно быть достаточно, чтобы подавляющее большинство программ с этим нормально работали. Забегая вперед, скажу, что и по настоящий день я не обнаружил ни одной программы, которая пыталась бы сделать с контроллером прерываний что-то свыше заложенной мною функциональности.

Наверное, контроллер прерываний был моим первым настоящим (пускай и маленьким) проектом на VHDL – от начала и до конца. Писал я его тщательно, не поленился даже (опять таки впервые в своей жизни) сделать test bench (не уверен, как правильно перевести на русский – фактически, последовательность сигналов для проверки правильности функционирования устройства). Моделирование в симуляторе ModelSim показало вроде полную работоспособность контроллера, после чего из него был сгенерирован очередной графический символ и добавлен в мое устройство.

Нормального таймера 8254 у меня еще не было, для генерации прерываний 18.2 Гц использовался обычный счетчик, который я и подключил к контроллеру прерываний. Поведение компьютера показало, что вроде все работает – DOS загрузился без необходимости нажимать на клавишу, а в NC наконец-то пошли часы. Казалось, пройден очередной этап, и можно смело двигаться дальше.

Как оказалось, рано я радовался – в этот момент обнаружилась, пожалуй, самая большая проблема во всем проекте. Если кто помнит, у NC есть встроенная экранная заставка – «звездное небо». Оставив мой компьютер на некоторое время, после возвращения к нему я обнаружил, что звезды на заставке почему-то застыли, проще говоря, компьютер завис. Хотя я понимаю, что таких случайностей не бывает, мне все-таки хотелось верить в чудо – в то, что это единичный случай. К сожалению, как всегда, чуда не случилось – после полного сброса и перезагрузки компьютер снова подвис после часа или около того работы. Стало однозначно понятно, что где-то есть проблема, причем очень труднонаходимая.

Чтобы максимально сузить круг поиска, я написал простейший тест памяти, который запускался сразу после сброса процессора, без инициализации всех ненужных устройств типа таймера и т.д. В принципе, индикацию ошибки памяти я воспринял с облегчением – по крайней мере, проблема была явно в железе. Осталось дело за малым – понять, в каком именно месте. И вот с этим оказалось все совсем не просто.
Дело в том, что вообще схема, задействованная в процессе тестирования памяти, по своей сути довольно примитивна. Задействован минимум логики, кроме процессора нет никаких других сложных программируемых элементов. В результате после какого-то времени, затраченного на анализ схемотехники, у меня появилась более-менее уверенность в том, что дело не в принципиальной ошибке в схеме, а в чем-то более случайном – например, в помехах.

С этой стороной схемотехники у меня вообще все было плохо. Я знал, что нужно ставить побольше блокирующих конденсаторов, и что длинные провода – это вроде плохо. На этом мои познания заканчивались. Поэтому за советом я снова обратился на один из профессиональных форумов. Советов мне надавали много, иногда было сложно отделить действительно толковые советы от советующих по принципу «скажу все, что хоть немного знаю на эту тему». Расписывать здесь все это не буду – слишком много всего обсуждалось, так что это может быть темой отдельной статьи. По результатам обсуждений моя плата обросла почти двумя десятками блокировочных конденсаторов и полностью потеряла изначальный более-менее гламурный вид.

К сожалению, очередной запуск теста показал, что проблема не ушла. Возможно, она стала проявляться чуть реже, но это сказать трудно – и раньше сбой мог возникнуть то через 20-30 минут, то через несколько часов. Сейчас же, как минимум, оставленная на ночь плата утром оказывалась гарантированно сбойнувшей. В отчаянии я снова вернулся к анализу схемотехники и еще более внимательному изучению диаграмм работы шин процессора. В одном месте у меня возникла определенная мысль, и я опять пошел на тот же форум. В ходе обсуждения моей идеи я в очередной раз получил порцию полезных (а иногда и не очень) советов, попробовал реализовать некоторые вещи (в первую очередь, связанные с небольшой задержкой некоторых управляющих сигналов), но на наличие сбоев это не повлияло вообще никак.

В конце дороги отчетливо вырисовывался конкретный такой тупик, поэтому я начал проверять вообще бредовые идеи. В частности, не сбоит ли сама микросхема памяти? Для проверки я сгенерировал прямо внутри FPGA модуль RAM, который и использовал вместо внешней памяти. Честно говоря, на результат я не надеялся – просто делал все, что приходило в голову. Но представьте мое удивление, когда после этого сбои вдруг исчезли! Вообще я даже как-то не был готов к этому, поэтому не совсем понимал, как использовать это знание. В то, что микросхема памяти неисправна, не верилось даже в этот момент. Также была почти полная уверенность, что я работаю с этой микросхемой правильно – по управляющим сигналам там все проще простого. Но факт оставался фактом – с микросхемой сбой гарантированно происходил не позже, чем через несколько часов теста, с внутренней памятью все проработало без сбоев несколько дней, пока мне не надоело.

Для очистки совести я все же решил потестировать память полностью другой схемой, без использования моей процессорной платы. В процессе обдумывания, как это лучше сделать, мне вдруг в голову пришла мысль – я понял единственное существенное отличие между использованием внутренней и внешней памяти. Дело в том, что внешняя память была асинхронная, а внутренняя – частично синхронная, и для нее дополнительно требовался сигнал, по которому во внутреннем буфере защелкивался адрес ячейки, к которой происходило обращение.
Я вообще не понимал, как это может относиться к проблеме случайных сбоев – по всем диаграммам было совершенно однозначно понятно, что у меня адрес держится намного больше, чем минимально необходимо для памяти, поэтому, теоретически, это не могло быть причиной. Тем не менее, я тут же нарисовал в Quartus’е еще один регистр, подал на него адрес и защелкнул его тем же сигналом, который использовался для внутренней памяти. Выход регистра, естественно, подал на адресные линии внешней памяти. Понимая, что делаю полную чушь, я запустил тест. И тест отработал успешно до тех пор, пока я его не выключил на следующий день. Далее еще пару раз с регистром и без – совершенно четко было видно, что наличие регистра убирает сбои полностью.

Это было совершенно необъяснимо – даже на осциллографе я видел, что адресные сигналы и так держатся больше, чем это в принципе может быть нужно, но факт оставался фактом. После целых выходных разборок я плюнул на это и решил смириться с этим, как с данностью…

Итак, DOS грузилась, многие программы, не требовавшие графического режима, запускались, можно было двигаться дальше. Естественно, возникло желание запустить какую-то игрушку. Но для игрушки, как правило, требуется графика, а ее у меня пока не было. И если для текстового видеоадаптера удалось обойтись малой кровью путем переделки существующего, то для графики с этим было не так просто.

Дело было даже не в отсутствии готовых решений. Проблема была в том, что мне нужна была практически полная совместимость со стандартным видеоадаптером на аппаратном уровне – ведь все игры работают с графикой напрямую с железом, без использования BIOS. Я понял, что проще сделать видеоадаптер «с нуля», чем пытаться переделать какой-то готовый. Да и, естественно, самому сделать было намного интереснее.

Итак, пишем свой собственный CGA адаптер – даже EGA на пару порядков сложнее, так что пока на него замахиваться не будем. В принципе, немножко для начала я все-таки подсмотрел – нашел, фактически, наброски модуля генерирования VGA-развертки. Но это было полтора десятка строчек, да еще и не до конца работающих. Так что, реально, они были использованы как шаблон для начала писанины – морально так было легче.

Естественно, CGA монитора у меня нет и не планировалось, поэтому идея заключалась в использовании режима VGA 640х400, в которых превосходно ложился CGA-шный режим 320х200 путем простого дублирования точек как по горизонтали, так и по вертикали.
Вообще графический адаптер у меня получился неожиданно легко – мозг к этому моменту вдруг научился мыслить категориями VHDL, плюс появилось небольшое понимание, что можно требовать от VHDL, а чего не стоит. Вообще основное время отладки у меня занял поиск совершенно глупой ошибки, связанной с разрядностью чисел (две такие проблемы наложились друг на друга и дали весьма забавный вариант). В остальном же я начал получать удовольствие от того, как строчки в редакторе превращаются в практически реальное «железо» внутри FPGA и делают именно то, что я хочу.

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

Кстати, Checkit оказался довольно полезной программой – многие вещи он определял довольно хитрыми способами, что заставляло делать всю конструкцию все более PC-совместимой. А так как Checkit мог проверить все узлы и компоненты, то и совместимость тестировалась тоже для всех частей системы.

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

Цвета на этой картинке не соответствуют оригинальным – в этот момент переключение палитр еще не было сделано, да и сами цвета вообще не были настроенными.

Попытки найти работающие игры показали, что игровые программы, в большинстве случаев работающие напрямую с «железом», куда требовательнее к совместимости, чем какой-нибудь NC или даже QuickBasic. К счастью, FPGA предоставляла практически неограниченные возможности по выявлению фактов обращения программы к интересующим портам, адресам памяти и т.д. Особенно вместе с тем, что BIOS я тоже мог менять по собственному усмотрению, это давало отличный механизм отладки. Кстати, в какой-то момент (уже не помню точно, когда), заработал и Turbo Debugger, что тоже расширило арсенал отладочных инструментов.

Сразу же стало ясно, что нужно делать хотя бы минимальный таймер 8253. Причем программы пытались использовать таймер не только для звуков (канал 2), а еще и активно перепрограммировали канал 0, изменяя таким образом частоту прерываний от таймера, а также использовали этот канал для определения временных параметров.

Почитав документацию к 8253, мне стало немного тоскливо. Делать нужно было много и не очень интересно. Решив заняться этим как-нибудь потом, в тот момент просто залез на все тот же opencores и стащил пару модулей таймера. Один на Verilog, причем весьма упрощенный, второй – по виду крайне навороченный, да еще и на VHDL. К сожалению, таймер на VHDL подключался по шине Wishbone – это открытый стандарт для разработок на FPGA. С Wishbone я до этого никогда не сталкивался, так что решил для начала использовать модуль на Verilog’е, который по интерфейсу выглядел попроще.

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

Дальше же мне пришлось принять кардинальное решение. До этого момента INT 10h я писал сам. В текстовом режиме с этим еще можно было смириться, но вот необходимость поддерживать эти функции в графических режимах меня расстроила. Учитывая, что к этому моменту страсть к программированию на ассемблере была практически удовлетворена (все-таки сказалось то, что в свое время уже пришлось делать это в промышленных объемах), поступил по принципу «Если гора не идет к Мухаммеду, то тот посылает ее нафиг». А именно решил сделать свой CGA адаптер настолько совместимым по «железу», чтобы оригинальный BIOS мог работать с ним.

В принципе, особой сложности не возникло – регистров не очень много, функциональность их крайне проста. Из неявных вещей - пришлось эмулировать регистр состояния, в котором находятся признаки обратного хода луча кадровой и строчной развертки. Довольно логично оказалось, что многие программы (включая BIOS) активно пользуются этим регистром, чтобы избежать «снег» при попытке одновременного обращения к видеопамяти со стороны процессора и адаптера.

Почему-то процесс приведения в порядок видеоадаптера мне показался очень увлекательным, и в конечном итоге этот узел оказался самым проработанным с точки зрения совместимости с оригинальным устройством. Попутно были добавлены недостающие вещи типа переключаемых палитр, режима 640х200 и т.д. Кстати, для тестирования режима 640х200 оказалось довольно непросто найти программу, поддерживающую данный режим. Единственное, что удалось раскопать, это шахматы:

На мой взгляд, выглядит довольно красиво…

Оригинальный обработчик INT 10h отнёсся к такому адаптеру весьма дружелюбно, а я вздохнул с облегчением от отсутствия необходимости писать вещи типа распознавания символа, напечатанного в определенном месте экрана в графическом режиме.

Последним препятствием на пути к приемлемой совместимости с PC была, как ни странно, клавиатура. Хотя это было чуть ли не первое, что я прикрутил к проекту, но с точки зрения совместимости там вообще еще конь не валялся. Основная проблема заключалась в том, что все нормальные программы работают с первым набором скан-кодов, который применялся еще в IBM PC. А вот все клавиатуры, начиная с PC AT, выдают, как минимум, второй набор скан-кодов, очень отличающийся от первого. Только контроллер клавиатуры внутри компьютера преобразовывает эти коды в оригинальный, первый набор, и все обычные программы работают именно с ним (даже если эти программы вроде бы обращаются к клавиатуре напрямую, не используя BIOS). У меня же, естественно, никакого контроллера не было (кстати, в PC AT и даже в поздних PC XT для этого использовался отдельный микроконтроллер на базе 8051). Функции INT 09/16 у меня были реализованы в самом минимальном варианте, а уж о прямой работе программ с клавиатурой вообще и речи не могло быть – они (программы) просто не поняли бы ни одного скан-кода.

К этому моменту я вдруг почувствовал эйфорию от владения VHDL – мне казалось, что я уже постигнул истину, и могу вообще все. Поэтому без промедления был написан изящный (как мне казалось) модуль на VHDL, который выполнял перекодирование скан-кодов. В этом модуле все было очень красиво и хорошо, за исключением одной маленькой детали – он не работал. Причем причину неработоспособности я понять никак не мог, что расстраивало и вызывало недоумение – там всего был десяток строчек.

Очередной раз обратившись на форум к знатокам, я получил изрядное количество действительно толковых советов. Мало того, мое понимание самой концепции VHDL очередной раз чуть ли не в корне поменялось (в т.ч., появилось некоторое разочарование). Основное – чудес не бывает. VHDL (а также все другие HDL) не сделает того, что невозможно сделать обычным способом из имеющихся аппаратных ресурсов. Если я пишу строчку, вроде правильную с точки зрения синтаксиса языка, но при этом даже близко не представляю, как это может быть реализовано в железе, то, скорее всего, оно и не будет реализовано при компиляции. Как минимум, не будет делать то, что от этого требуется. И еще – очень важно использовать шаблоны. Оказывается, многие конструкции языка превращаются в правильные аппаратные узлы только тогда, когда компилятор распознает соответствующий шаблон. Определенная гибкость, конечно, присутствует, но все-равно нужно всегда помнить о рекомендованных стилях описания тех или иных узлов.

Думаю, именно после этих разборок я действительно хоть совсем чуть-чуть, но уже по-настоящему начал понимать суть VHDL (да и Verilog к этому моменту тоже перестал быть совсем уж непонятным). Волшебным образом учебники по этим языкам вдруг обрели смысл, и за словами становилась понятна суть описываемых вещей.

Короче говоря, сделав модуль преобразователя чуть менее красивым, но зато намного более правильным, получил на его выходе коды в первом наборе. Далее осталось скормить эти коды уже оригинальному обработчику INT 09h, и проверить все тем-же Checkit’ом правильность распознавания нажатий клавиш. Итак, клавиатура тоже была почти 100% совместима на аппаратном уровне.

К этому моменту я начал ощущать все больше и больше неудобств от того, что верхним уровнем проекта у меня все еще оставался схемный дизайн. Окончательным толчком, побудившим взяться за полный переход на VHDL, послужила смена домашнего компьютера. На столе у меня оказался iMac Retina с установленным Windows. К сожалению, Quartus попал в число программ, которые оказались совершенно не готовы к работе с таким разрешением экрана. Схемный дизайн стал совершенно нечитаемым, и никакие мои попытки что-то настроить никаких реальных улучшений не произвели. Деваться было некуда, я стиснул зубы и взялся за текстовый редактор.

Как ни странно, все прошло более, чем гладко. Сейчас уже даже не помню, нужно ли было хоть что-то отлаживать, или же все заработало сразу после переделки. В любом случае, серьезных затыков точно не было, а вот работать сразу стало намного удобнее и эффективнее. Я сразу вспомнил советы ряда знающих людей, настоятельно рекомендовавших мне с самого начала забыть о схемном дизайне и сразу начинать с VHDL/Verilog. Кстати, относительно VHDL vs Verilog – пожалуйста, не спорьте со мной, что лучше/хуже, и почему я остановился именно на VHDL. Давайте считать, что мне просто так захотелось, и это практически правда. Больше на эту тему я рассуждать не буду…

При переходе на VHDL был также полностью переделан последний модуль на схемном дизайне – интерфейс SPI. Если помните, он обеспечивал аппаратный прием/передачу только одного байта, причем вокруг этого нужно было произвести целый ряд подготовительных шагов. Вкупе с медленным процессором (и лениво написанным INT 13h) это давало всего около 35% от быстродействия оригинального жесткого диска PC XT (согласно Checkit). Так как я уже практически чувствовал себя гуру VHDL и вообще цифровой электроники, то сразу решил писать не копию имеющегося интерфейса, а модуль, обеспечивающий пакетную передачу.

Правда, с DMA (или, как говорят у нас в России, ПДП) решил не заморачиваться – контроллера DMA еще не было, а браться сразу за два новых модуля не хотелось, потом не разберешься, где именно проблема. Отладка модуля прошла не совсем гладко – пришлось немного повозиться, в том числе активно задействуя цифровые каналы осциллографа в качестве анализатора протокола. Кстати, почему-то в ходе всего процесса я практически забыл, что в состав Quartus’а входит встроенный цифровой анализатор SignalTap, который, наверное, был бы еще удобнее. Возможно, в будущем у меня руки дойдут и до него (еще ни разу не пользовался), но пока мне очень нравится использовать для этого отдельную железку.

Наверное, с учетом нового модуля можно было бы более серьезно переписать INT 13h, но мне было лень, и я отделался только минимально необходимой модификацией. В результате получилось не очень красивое и совсем неэффективное нагромождение, но все равно скорость с новым модулем выросла практически в 5 раз:

Далее пошел частично нудный, частично увлекательный процесс запуска различных программ (в первую очередь, игровых) с целью выяснения, почему они не работают (вернее, что в моем компьютере недостаточно совместимое). О поисках причин можно написать отдельную большую статью, просто приведу несколько примеров:
- у меня нет DMA. Оказалось, что нулевой канал DMA (используемый для регенерации памяти на оригинальных PC) также используется некоторыми программами как счетчик для определения коротких временных промежутков. Пришлось эмулировать соответствующую часть счетчиков контроллера DMA
- обычно (но не всегда) при чтении из несуществующей области памяти или порта ввода/вывода считывается байт FF. У меня считывалось наоборот – 00. Это не понравилось программе, которая проверяла таким образом (и более ничем другим) наличие джойстика, после чего решала, что он есть, и что зажаты все кнопки
- самым оригинальным способом определения наличия CGA адаптера воспользовалась программа, которая записывала определенное значение в регистр местоположения курсора, потом считывала значение и сверяла с тем, что записывала (потом восстанавливала оригинальное значение). Согласно имеющейся у меня документации, этот регистр вроде должен быть только для записи, но переделал на чтение/запись, после чего программа успокоилась
- не связанное с моим компьютером – потратил кучу времени на выяснение причин зависания простейшей старинной игры Paratrooper. Оказалось что хотя игра и старая, но имевшийся у меня файл был сжат самораспаковывающимся архиватором com/exe файлов. Так вот, та часть, которая отвечала потом за распаковку программы при запуске, содержала команду, которая появилась только, начиная с 286 процессора. Неприятность заключалась в том, что данная команда не сильно влияла на процесс распаковки и портила только некоторые байты (меньше одного из тысячи). Пожалуй, на эти разборки я потратил больше всего времени.

Так, потихоньку, практически все игры, которые у меня были, стали запускаться и работать без особых проблем, в некоторые из них я даже попытался сыграть:

В ходе запуска многочисленных игр выяснилось, что имеющийся у меня модуль таймера далеко не идеален – в большинстве случаев звуки были не совсем правильными. Решив, что все-равно захочу разобраться с шиной Wishbone, я решил прикрутить таймер на VHDL, о котором уже упоминал ранее. Для начала, почитал описание Wishbone и сваял нечто типа переходника между Wishbone интерфейсом и шиной 8088 – ничего сложного. К сожалению, таймер не заработал. Пришлось снова доставать осциллограф и смотреть, что же там происходит (в первую очередь, правильно ли формируются Wishbone сигналы).

Кто мог подумать, что в этот момент меня будет ждать великое открытие… Помните, как я мучился со сбоями памяти, и вынужден был ввести промежуточный регистр, необходимости в котором не видел в принципе? Так вот, на экране осциллографа у меня оказалась следующая картинка:

Естественно, первое, что бросилось в глаза, так это жуткий звон сигнала 2. Причем звон этот перешел из количественного параметра в качественный. Сигнал 6 формируется одноразрядным счетчиком, на вход которого подан сигнал 2. Фактически, по каждому восходящему фронту сигнала 2 сигнал 6 инвертируется. Но на осциллограмме видно, что сигнал 6 переключился один раз не только по нормальному фронту сигнала 2, но по фронту самого сильного «звона»! Т.е. в моей схеме на некоторых линиях звон был такой амплитуды, что мог вызвать ложные переключения логики. Сказать, что я офигел – не сказать ничего. Даже не верилось, что при всем этом мне удалось добиться устойчивой работы схемы…

Далее, после небольшого анализа схемы с учетом новых данных, мне стало совершенно понятно, где именно возникали старые сбои, и почему тот регистр их вылечил. Тем не менее, нужно было что-то делать, так как именно сигнал 2 мне был нужен для работы с новым модулем таймера. И снова традиционное обращение к знатокам. Из нескольких советов на форуме был выбран вариант с разрезанием дорожки и впаиванием туда резистора. Результат был далек от идеала, но более ложных переключений от звона при тестировании в течение нескольких часов я не зафиксировал:

К сожалению, на работоспособность VHDL модуля таймера это не повлияло – он молчал. Повозившись еще некоторое время, причина была обнаружена в довольно неожиданном месте – в самом модуле. Причем была она довольно прозаична (и часто встречающаяся в программировании) – модуль неправильно обрабатывал одно из крайних значений, а именно при делителе 0 он вместо деления на максимальное значение (65536) не делал ничего. Я же проверял все время именно инициализацию канала 0, который инициализируется максимальным делителем, чтобы получить частоту 18.2 Гц. Когда я для эксперимента использовал делитель FFFF, все заработало.

Я даже связался с автором модуля, который (автор) уже и забыл, что он этот модуль писал. Тем не менее, автор помог мне найти конкретное место, где была допущена ошибка, и я даже кое-как попытался ошибку исправить. Именно эта проблема решилась, но были обнаружены другие, так что я пока остановился на первой версии модуля, на Verilog.

К этому моменту готовность моей конструкции была такова, что я созрел для главного эксперимента. Дело в том, что в далеком 86 году я читал статью из журнала «В мире науки», который является русским переводом американского журнала «Scientific American», в которой рассказывалось о новейшем продукте компании Microsoft – а именно об игре MS Flight Simulator. Учитывая, что уже в том время я фанател от компьютеров, но при этом твердо собирался стать летчиком, можно понять, какие эмоции тогда бурлили у меня в голове (да и в других частях тела).

И вот сейчас, спустя почти 30 лет, у меня появилось неутолимое желание запустить именно тот исторический Flight Simulator на моем компьютере. Интерес подогревался еще и тем, что вроде бы в те времена для тестирования на совместимость чуть ли не официально использовались две программы – тот самый Flight Simulator, а также Lotus 1-2-3. Говорилось, что они так плотно используют аппаратные особенности компьютера, что если заработали эти программы, то все остальное и подавно будет работать.

Вообще у меня были некоторые сомнения – я все-таки знал о некоторых подводных камнях в моей конструкции, но все же решил рискнуть (особенно учитывая, что ничем, естественно, не рисковал). Результат на экране:

Кстати, загадочная зернистость картинки вначале вызвала у меня подозрение – я сразу стал думать о каком-то совсем хитром способе работы с видеоадаптером, который у меня не поддерживается. На самом деле, как оказалось, таким образом Microsoft пытался получить дополнительные цвета, комбинируя точки из имеющихся цветов. Должен заметить, что, учитывая разрешение 320х200, результат был, мягко говоря, сомнительный.

Никаких проблем с запуском Lotus 1-2-3 тоже не возникло, так что на этом эксперимент можно было бы считать оконченным. Тем не менее, я провел еще ряд небольших доделок и подкруток, после чего стали запускаться и абсолютно нормально работать вообще все программы, которые у меня есть на настоящий момент. Единственной новой функцией, которую я добавил после этого, была EMS. Мне просто не давало покоя, что пропадает больше мегабайта доступной памяти (если честно, то просто хотелось еще что-то сделать), поэтому я нашел описание платы EMS с драйвером, и написал модуль, эмулирующий работу этой платы. Драйвер успешно память опознал:

Совсем последним штрихом стала переделка самой процессорной платы. Мне совершенно не нравился тот кошмар, что творился с формой сигналов, а также хотелось еще раз попрактиковаться с Eagle. В результате была разведена 4-слойная печатная плата, у которой один из внутренних слоев был выделен под землю, второй – под оба напряжения питания. Кроме того, самым существенным моментом было устранение шлейфов – разъемы установлены так, что моя плата прямо втыкается в отладочную плату FPGA (если быть совсем уж точным, то в плату расширения портов GPIO отладочной платы FPGA – такая вот матрешка):

Были также некоторые схемотехнические изменения – убран полностью формирователь тактовой последовательности 8284 (решил, что можно без проблем убрать его внутрь FPGA, не нанеся ни малейшего ущерба совместимости по сигналам шины) и регистр-защелка на шине адреса/данных (также убран внутрь FPGA). Быстрая проверка формы сигналов на новой плате показала, что сигналы стали практически идеальными:

Итак, путь от мигающего светодиода на беспаечной макетке до вполне нормального компьютера был пройден за пару месяцев, при этом получено огромное количество удовольствия, а также знаний в целом ряде областей. На выходе получился компьютер с довольно неплохой совместимостью с IBM PC, на котором вообще без замечаний работают все программы, которые я не поленился раздобыть, в т.ч. и те, которые считаются крайне требовательными к совместимости «железа». На компьютере практически полностью (за исключением обработчика INT 13h) используется BIOS 3-ей версии от IBM PC.

Насчет бюджета проекта сказать что-то определенное практически невозможно. Для начала, что туда включить - только несколько микросхем (подразумевая, что монтаж можно сделать МГТФ"ом, плата FPGA и приборы для настройки и так есть), или же все, начиная от сверхсрочного изготовления плат, покупки отладочной платы FPGA специально для этого проекта, и заканчивая не самым дешевым осциллографом?

Конкретные типы микросхем и всего остального в статье я вроде указал, так что любой желающий сможет посмотреть, во что все это обойдется именно в его варианте. Естественно, необязательно использовать именно DE2-115, для ориентира привожу требуемые ресурсы FPGA:

Следует учесть, что здесь еще присутствует куча артефактов, использовавшихся для отладки, да и сам код практически не оптимизировался.

Что делать со всем этим (и делать ли вообще что-либо) – не совсем уверен. В ходе процесса очередной раз стало понятно, что, хотя на энтузиазме и эрудиции тоже можно кое-чего добиться, формальное знание основ позволило бы все ускорить, избежать многих граблей, а главное – больше сконцентрироваться на творчестве, а не изобретении велосипеда с квадратными колесами. Поэтому пока есть большое желание заполнить каким-нибудь экспресс-методом прорехи (вернее, зияющие дыры) в знании как просто основ электроники и схемотехники вообще, так и VHDL в частности. Насколько это получится, увидим – всегда присутствует проблема в мотивации и наличии свободного времени.




Top