For English press One
У каждого любителя старого железа есть фетиш. Зачастую на территории восточной (да и части западной тоже) Европы это ZX Spectrum, замечательный компьютер, который, впрочем, не оставил значительного наследия. Другое дело — IBM PC 5150. Этот компьютер тоже любят многие старьевщики, и многие его почитают за его влияние на индустрию. За то, как он вытеснил с рынка всех конкурентов. Но историю этого замечательного компьютера знает каждый школьник, а вот что было у него внутри, оказывается, знают не так и много людей.
(под катом много картинок и даже видео есть!)
Так, многих шокирует, что 640КиБ ОЗУ в IBM PC 5150 не было. 640КиБ в те времена было поистине огромным объемом ОЗУ, и на материнской плате первой ревизии компьютера можно было разместить до 64 КиБ максимум. Да, всего 64 КиБ, как у домашнего Коммодора 64, например, или немногим больше, чем у наиболее популярной версии вышеупомянутого Спектрума. Конечно, существовали карты расширения памяти, но они появились позже, да и вторая ревизия материнской платы содержала уже 64 КиБ ОЗУ в базовом варианте (очень глючный вариант, который, как я полагаю, в продажу не поступал, но об этом позже), а максимум можно было разместить аж 256 КиБ! Но, покупая первую базовую версию, вы получали лишь 16 КиБ. Представьте IBM PC c 16 КиБ ОЗУ… DOS на нем не запустить.
… Да он и не нужен был, для этой версии: в ней не было даже дисковода. А НЖМД для IBM PC 5150 производитель не предлагал даже в качестве опции. Как же такой компьютер можно было использовать? Дело в том, что в ПЗУ IBM PC был «зашит» интерпретатор языка Бейсик, который грузился при отсутствии другого варианта загрузки. То есть, все работало именно так, как на 8-битных компьютерах того времени: вы получали компьютер, который после включения загружал из ПЗУ интерпретатор языка Бейсик и имел от 16 до 64 КиБ ОЗУ. Как же загружать в него программы без DOS? С помощью магнитофона. Да, IBM PC 5150 имел порт для подключения магнитофона, а бейсик в ПЗУ умел записывать и загружать программы на/с кассет. Все как на вашем Спектруме! Да и сам компьютер, в общем, был 8-битным. Нет, процессор был совершенно 16-битным, даже с 20-бит шиной адреса, и она была полностью выведена «наружу» (кстати, именно поэтому 1й мегабайт памяти был так важен для шины ISA все время ее существования, на нее были разведены только 20 бит адреса, и ничего за пределами 1го мегабайта она не «видела»). Однако шина данных процессора была обрезана до 8 бит, именно для того, чтобы использовать 8-бит переферию. И, хотя 20 бит адреса позволяли адресовать аж 1 МиБ ОЗУ, весь обмен информацией в IBM PC 5150 осуществлялся по шине, шириной в 8 бит. Так же, как на Спектруме. Даже проще, ибо многие компьютеры тех времен уже использовали кастомные чипы, такие, как ULA в ZX-Spectrum или BBC micro, а Commodore для своих нужд приобрела MOS Technology, которая производила некоторые микросхемы исключительно для Commodore, так что клоны этих компьютеров было сделать весма непросто. IBM же собирала свои 5150 исключительно из широкодоступных компонентов, так что, чисто теоретически, любой мог собрать свой клон 5150 прямо на коленке, за исключением, конечно, микропрограммы BIOS, код которой, хотя и был открыт на страницах мануала 5150, был защищен авторским правом.
С дисплеем было все еще веселее. На старте IBM PC 5150 предлагался только с монохромным видеоадаптером MDA, неспособным выводить графику. Только монохромный текст, только хардкор. Зато текст отображался довольно качественно. Такой адаптер требовал специального монитора и прекрасно подходил для бизнес-пользователей (при наличии дисковода и расширения памяти, чтобы грузить DOS). Зато немногим позднее в опциях появился цветной адаптер CGA, имевший композитный выход для подключения к телевизору, вдобавок к цифровому RGBi-выходу для монитора. Такая карта значительно хуже отображала текст, так как имела значительно более низкое разрешение, и слабо подходила для бизнеса, даже с соответствующим монитором. Зато для домашнего использования она подходила значительно лучше: монитор был не нужен, можно было подключиться к любому телевизору, да и 4 цвета в графике (были две разные палитры одна вырвиглазнее другой) на телевизоре магическим образом превращались в большее количество, если разработчик умел правильно пользоваться композитным выводом. А многие умели. В общем, CGA была совсем не такой унылой картой, как многие помнят по играм на VGA мониторе в режиме эмуляции CGA. На телевизоре было лучше.
Такой IBM PC 5150 уже был у меня какое-то довольно продолжительное время, но руки до него никак не доходили по одной простой причине: он был какой-то проблемный. Когда я его получил, он не включатся. Я быстро нашел закоротивший конденсатор и выкусил его (он сидел на линии -12В и был мне не нужен в любом случае), однако с памятью этого компьютера определенно было что-то серьезно не так.
Здесь надо бы сделать небольшое отступление. Дело в том, что никакого BIOS Setup на IBM 5150 не было. BIOS при загрузке читал положение 2х наборов микропереключателей на плате, SW1 и SW2, и по ним определял конфигурацию оборудования: наличие и количество дисководов, тип видеоадаптера, наличие математического сопроцессора, конфигурацию памяти. Конфигурация памяти выставлялась следующим образом: 2 переключателя в 1м блоке говорили BIOSу, какие из 4х банков памяти непосредственно на плате заполнены, а первые 5 переключателей блока 2 говорили BIOSу полный объем памяти в системе, то есть сумму памяти на материнской плате и картах расширения.
На плате видно светло-голубые блоки SW1 и SW2
Каждый банк состоял из 9 микросхем (8 бит+бит четности), и хранил 16 КиБ на первой ревизии платы и 64 КиБ на последующих. Тут начинается первая проблема. Из-за бага в BIOS, если плата сконфигурирована на использование не всех банков памяти, то есть от 1 до 3, то BIOS считает, что все банки имеют размер 16 КиБ, даже на поздних ревизиях, где размер банка 64 КиБ. Таким образом, если у вас на плате заполнено 3 банка по 64КиБ, компьютер «увидит» лишь 48 КиБ памяти, вместо 192. В BIOS есть еще один баг, который показывал несуществующие ошибки памяти на платах поздней ревизии, если были установлены не все банки. Именно эти два бага заставляют меня думать, что компьютеры, поддерживавшие 256 КиБ на борту, всегда продавались полностью укомплектованными набортной памятью, ведь в противном случае пользователь бы столкнулся с ошибками при включении и невозможностью использовать всю установленную память (а она была ну очень дорогая).
Итак, у меня был IBM PC 5150 с платой поздней ревизии и дополнительной платой памяти на 256 КиБ. Однако, при включении он выдавал ошибку памяти 0800 201 и останавливал POST надписью PARITY CHECK 1.
Беглое гугление показало, что такие ошибки часто вызываются неправильно установленными переключателями на плате. Я начал эксперименты. Для начала, я убрал дополнительную плату памяти и переставил соответственно переключатели. Это не помогло. «Ага», — подумал я: «Дело в набортной памяти». И я решил убрать вообще всю память, которую можно убрать. Остался только 0й банк, он распаян на плате и не подлежит замене. И ошибка пропала! Компьютер загрузился в Бейсик и отрапортовал о наличии немногим менее 12 КиБ памяти.
Первой мыслью было: «Постойте, но у меня же 64 КиБ!!! Неужели бейсик столько ест? Не может быть!». Конечно, внимательный читатель догадался, что этот (д)эффект — следствие бага №1 в BIOS. Но на тот момент я этого еще не знал.
В общем, после долгой возни я наткнулся на совершенно замечательный сайт, который с тех пор является для меня библией IBM PC, и выручал потом еще не раз. Именно там я узнал, что моя плата видит только 16КиБ, если установлен только 1 банк памяти, и что ошибка 0800 201 означает, что неисправна микросхема, отвечающая за бит четности в банке 0, и пропадала ошибка при изъятии остальных банков именно потому, что BIOS видел только первые 16 КиБ в таком случае, а ошибка была выше. К сожалению, банк 0 впаян в плату. К еще большему сожалению, после того, как я выпаял эту микросхему и установил на ее место колодку, плата включаться перестала совсем. На первый взгляд, никаких повреждений от пайки я не увидел, но, так как я выпаивал микросхему феном, стараясь греть всю плату, а не только место пайки, я подозревал, что могла испортиться еще какая-то микросхема памяти, и теперь уже в том месте, где располагались первые 16 КиБ, так как, в случае ошибок в первых 16 КиБ, компьютер не подает никаких признаков жизни. А еще могло испортиться ПЗУ. Или что-то еще. В общем, надо было разбираться, а времени не было. И я отложил этот компьютер до лучших времен.
Довольно давно, я наткнулся на просторах The Ben Heck Show на книгу ZX Spectrum ULA: How to design a microcomputer. Так как я давно хотел собрать себе клон Спектрума, а тут обещали 100% совместимость с оригинальной ULA на широкодоступной рассыпухе, мне стало очень интересно. В итоге я купил и книгу, и, прочитав ее, решил купить плату, разведенную автором. Я знаю, что это не спортивно, но мне хотелось сначала иметь рабочий Спектрум, чтобы потом его кастомизировать, а покупка готовой современной фабричной платы очень сильно ускоряет процесс, да и стоит она недорого. Однако, сам процесс сборки платы мне так понравился, что я начал искать, чего бы еще такого собрать.
И я нашел её.
Да, это, насколько возможно, точная копия оригинальной платы 5150, но только это новая, современная плата. Очень очень качественная. Из отличий от оригинала я увидел лишь другой корпус генератора задержки (насколько я понял, он использовался для сигналов регенерации DRAM):
слева в большом корпусе оригинальный генератор задержки, справа в DIP-8 современный
и разводку керамических конденсаторов: в оригинальной плате, как и на клоне, все площадки под конденсаторы — 3х контактные. Дело в том, что полярные электролиты на оригинальной плате (как и на клоне) — трехконтактные. Средний плюс, а оба по краям — один и тот же вывод минуса. То есть конденсатор хотя и полярный, но устанавливать его можно на плату любой стороной. Таким образом, для электролитов на оригинальной плате (и на клоне) средний контакт всегда плюс, а оба по краям — минус. Для керамики же все не так. Так как керамика не полярная, ей не нужна такая защита от дурака-сборщика, и конденсаторы имеют привычные два контакта. На плате же все равно 3 дырки, но теперь средняя — минус, как и одна из соседних с ней, а другая — плюс. На клоне же, конфигурация отверстий для керамики такая же, как для электролитов: плюс в середине. Поэтому контакты керамических конденсаторов на клоне слишком близко друг к другу, что немного мешает сборке. На этом видимые мне различия заканчиваются. Самое интересное же, что в набор входят все микросхемы, необходимые для сборки, включая микросхему с прошивкой IBM PC-совместимого BIOS. Часть из них сейчас довольно трудно найти, а чистую микросхему BIOS еще надо суметь прошить, ведь на IBM 5150 не использовалась JEDEC распиновка. Можно сделать переходник, но это не эстетично. Не все микросхемы в комплекте новые, на некоторых есть едва-едва заметные следы пайки, но все корпуса в отменном состоянии и вообще все выглядит как очень качественный продукт. Минусы — цена. За цену набора можно купить 2-3 оригинальные платы б/у на ибее. Но меня это не остановило: оригинальная б/у плата у меня была, это мне не сильно помогло. Да и радость сборки Спектрума еще не прошла, а там я все делали покупал отдельно от платы (ну, процентов 80 у меня и так было, так как это были разные 74HC, да и клонов процессора Z80 у меня достаточно в запаснике). В общем, после пары убитых вечеров, плату было не отличить от оригинала (да, хотя с платой шел опенсорсный клон BIOS, но я установил оригинальные микросхемы от IBM:
Паять такую качественную плату — сплошное удовольствие, хотя я и хочу со временем восстановить оригинальную, но на первое время подойдет и эта (все знают, что нет ничего более постоянного, чем временные решения, да?). Итак, после сборки платы и её установки в корпус, нам понадобятся:
1. контроллер флоппи-дисков:
Оригинальный IBM 5150 умеет читать и писать только на дискеты двойной плотности. На одну дискету 5,25 дюйма влезает 360КБ данных, на 3,5 дюймовую — 720КБ. В моем компьютере установлен один дисковод на 5,25 дюйма. Для записи дискет я подключил его к более современному компьютеру (486) и записал системную дискету с PC-DOS 3.30, несколько архиваторов (в расчете добавить позже НЖМД, либо его флеш-эмуляцию), драйвер для сетевой карты и несколько игр.
2. еще немного памяти:
Оцените размеры этой сверхвысокоинтегрированной платы, по сравнению с клавиатурой.
Эта плата вставляется в слот шины ISA, которая в те времена была не тормозной устаревшей шиной, а вполне себе расширением локальной шины процессора 8088, так как процессор этот, хотя и был 16-битным, имел урезанную 8-бит шину данных, к тому же мультиплексированую с шиной адреса. На шину ISA адрес и данные приходили уже отдельно, после демультиплексора. И работала шина на частоте процессора, 4.17 МГц.
Кроме того, на этой плате есть часы реального времени (да, на материнской плате их не было), правда, им нужен драйвер, который бы извлекал из платы время и устанавливал его в DOS при загрузке, а еще тут есть один последовательный и один параллельный порт. Памяти я установил сюда до отказа — 384 КиБ, чтобы всего иметь максимально возможные 640 КиБ. Это, конечно, перебор для 5150, но запас карман не тянет.
3. Видеоадаптер:
Сначала я тестировал компьютер с заведомо работоспособным адаптером VGA, рассчитанным на шину 16 бит, но работающим на 8-бит шине. Но какой VGA для IBM 5150? VGA — это про 386, ну, может, поздние 286. Сюда же нужен CGA или Hercules (MDA не рассматриваю, так как хочется графики). Например, такой:
Все скриншоты и видео до сих пор — с адаптером VGA. А вот с CGA:
Итак, все подключено, все работает, системная дискета создана, монитор с композитным входом есть, можно начинать тесты? Не совсем. Нужна еще клавиатура. IBM PC 5150 и PC/XT 5160 использовали такой же DIN5 коннектор, как IBM PC AT 5170, клавиатуры которой полностью совместимы со стандартом PS/2 (при условии замены разъема), широко доступным и сегодня, однако в 5150 и 5160 используются другие сигналы. То есть, если подключить AT или PS/2 клавиатуру к 5150, работать она не будет. Купить клавиатуры для 5150 и 5160 можно на ибее, но просят за них примерно как за целый 5150 без клавиатуры. И как бы мне ни нравилась Model F, платить столько за клавиатуру я не готов.
К счастью, есть выход:
Маленький PIC, 3 резистора, диод, ну и конденсатор, для храбрости — все, что нужно, чтобы превратить PS/2 в XT. А, и программатор, да. Что интересно, 8-бит CPU в этом микроконтроллере может работать на частоте 20 МГц. Тогда «переходник» будет мощнее самого центрального процессора 8088, установленного в 5150.
Первым IBM PC-совместимым компьютером, появившемся в моей жизни был какой-то клон на базе 286 процессора у мамы на работе. Там я залипал в Golden Axe, Death Track и Prince. Однако опыт на клоне 8088 тоже имелся: значительно позже у друга появился Поиск, за которым мы тоже проводили много времени, играя в различные игры (учились программированию, если так можно было назвать наши поделки на Бейсике, мы на Спектруме), и у меня в памяти сохранились воспоминания, как мы играли примерно в этот же набор игр на его Поиске, то есть, фактически, на клоне PC, причем, довольно тормозном. И игралось весело!
Однако, как и в случае Дума на 386, память меня подвела. Или, скорее, раньше требования к скорости игр у меня были сильно ниже. Оригинальный IBM PC был очень неторопливым компьютером. Вот сколько длится загрузка игры Lemmings (конвертер композитного сигнала в VGA не смог извлечь цвет из сигнала CGA, поэтому картинка черно-белая):
В общем, именно так использование компьютера и проходило: загрузились с системной дискеты, вставили рабочую (для работы, все же, часто покупался второй дисковод, чтобы не «передергивать» дискеты все время), загрузили программу. Жесткие диски появились позже, и доукомплектовать диском IBM 5150 было не так просто: блок питания был на это не расчитан.
А очень хочется поиграться с сетью на 5150. Естественно, в такой конфигурации это не получится, на 360 КБ дискету не уместить сетевой драйвер и стек TCP/IP. Поэтому, придется нарушать традиции. Продолжим комплектовать компьютер:
4. Собственно, сетевая плата:
Плата для шины 16 бит, однако она превосходно работает на 8-бит шине. Имеет разъем для 10Мбит витой пары и рискует быть самым быстрым устройством в системе.
5. Пятый и последний слот расширения займет контроллер жесткого диска (Да, слотов в 5150 всего 5. В 5160 (IBM PC/XT) их было уже 8, хотя там был нюанс.):
Это опенсорсный XT-IDE, так как MFM диски в рабочем состоянии на сегодняшний день уже огромная редкость. К сожалению, этот контроллер очень плохо работал на родном процессоре AMD 8088, причем понял я это не сразу, а лишь после того, как восстановил оригинальную материнскую плату (см. П.С.). Во время работы компьютер постоянно блокировался, выдавая ошибку четности памяти. Замена процессора на NEC V20 полностью решила проблему,
но понять это у меня получилось только через несколько недель экспериментов. Винчестер я прикрутил формата 2,5 дюйма, чтобы не колхозить никаких переходников:
Вообще, приятно, что инженеры, проектировавшие корпус 5150 предусмотрели возможность установки дисков формата 2,5 дюйма!
Ну а вообще, сундучок со сказками выглядит очень олд-скульно!
итак, загрузка с жесткого диска:
Для запуска сети решил написать небольшой bat файл, который загружает пакетный драйвер сетевой платы и dhcp.exe из пакета mTCP. Я не стал все это добро запихивать в autoexec.bat, так как оно занимает довольно много памяти, и не всегда нужно. А если нужно, батник запустить недолго:
надо проверить, работает ли интернет:
ну и мой ftp, для которого все и затевалось:
посмотрим, что там:
Ну и, на последок, еще один пример того, насколько медленным был IBM PC 5150:
Заметьте, тут точно больше 4х цветов.
P.S. В итоге я восстановил оригинальную плату. Естественно, будучи уверенным в mad skillz в пайке, я не мог серьезно предположить, что повредил плату, выпаивая микросхему бита четности. Я подозревал, что испортилась какая-то еще микросхема. Выпаяв весь нулевой банк, я тщательно проверил каждую микросхему: все они были в порядке. Несколько раз прозвонил все дорожки, они тоже оказались в порядке. Только случайно я обнаружил, что повредил металлизацию переходного отверстия, отвечающего за сигнал записи бита четности банка 0. Так получилось, что, прозванивая контакты, я проверил соединение сигнала записи с соседней микросхемой, относившейся к 1му банку. И контакт с ней был. Поэтому-то я и не заметил повреждения. А не было контакта с остальным банком 0, так как до него вела дорожка на верхнем слое. В общем, пришлось припаять проводок, чтобы не выпаивать колодку, но после этого плата снова ожила.