286 и сеть

u0fgqhjs35vptzyp4con0-xvuzy.png

Я — старьевшик. У меня полный шкаф старого железа. От микросхем булевой логики в DIP-корпусах до Voodoo5. Само собой, никакой практической ценности все это не представляет, но некоторым людям доставляет удовольствие возиться со старыми железками. Если Вы — один из них, приглашаю Вас под кат, где я расскажу, как «дружил» компьютер на базе процессора AMD 286 с современной сетью, и что из этого вышло.
Идея прикрутить сеть к 286 му у меня зародилась очень давно, так как переносить данные на компьютер проще всего по сети, да и вообще, интересно это. Заработает ли TCP/IP? Заработает ли web баузер? Хотя браузеры под дос люди на 286 м уже неоднократно запускали, но я ни разу не видел 286 го под Windows в интернете. Ну и основная цель — подключение к домашнему NASу, на котором хранится весь софт для моих старых железок. А NAS более-менее современный, и «умеет» только TCP/IP.

У меня уже был опыт подключения к этому накопителю старых компьютеров. В том числе во время написания предыдущих статей о старом железе. Но в предыдущих статьях я рассматривал только 32х разрядные процессоры, и там все довольно легко: даже на 386SX-16 работает Windows 95 (да, жутко медленно, да, установка занимает более 9 часов, но — работает), у которой есть нативный стек TCP/IP и куча драйверов для всевозможных сетевых карт в комплекте. Если же хочется пошустрее, то есть Windows for Workgroups 3.11, на которую, после установки Win32s можно накатить родной же стек TCP/IP. И, хотя она и не сможет авторизоваться на современном файл-сервере, открытые папки без пароля становятся вполне себе доступны для ПК даже в такой конфигурации. И Internet Explorer 5 запускается даже на 386SX, хватило бы памяти!

image
картинку стащил из Гугла

Но увы, к 286 все это не применимо. Основная сложность в том, что 286 процессор — 16-разрядный, и Windows for Workgroups 3.11 для него недоступна, так как Стандартный режим, позволявший ее предшественнице 3.1 запускаться на 16-битных процессорах, из 3.11 выпилили. Недостуно на 286 и расширение Win32s (по понятным причинам), и, соответственно, не получится установить родной Майкрософтовский стек TCP/IP.

Таким образом, возвращаемся в DOS.

После непродолжительного вдумчивого гугления, картина с TCP/IP для DOS стала значительно менее понятной, чем была до. В основном все сводилось к тому, что нормально работающее под ДОС приложение само имеет свой стек, и все что ему нужно — это пакетный драйвер сетевой карты. Но найти приложение, позволяющее монтировать удаленные диски мне не удалось.
Однако, я наткнулся аж на 2 разных сетевых клиента для ДОС от самой Майкрософт (MS Client и MS LAN Manager), и еще на очень странного зверя под названием Windows for Workgroups 3.1. Да, именно 3.1, а не 3.11, и это означало, что, возможно, все заработает в стандартном режиме.
Что было бы крайне интересно. Конечно, я не ожидал увидеть в 3.1 стек TCP/IP, но так же в Гугле я наткнулся на описание 16-разрядного стека TCP/IP от Майкрософт. Интересно.
Купив дистрибутив 3.1 на eBay, я приступил к установке.

image
картинку стащил из Гугла

Система оказалась немного измененной 3.1 со встроенным сетевым интерфейсом под DOS, очень похожим на урезанный MS LAN Manager. Все отличие от традиционной 3.1 сводилось к наличию кнопки «подключить сетевой диск» в Файловом Менеджере и соответствующем диалоговом окне. Настройка сети из-под самой Windows была невозможна. Как выполнять настройку из-под ДОС было непонятно. Хотя после установки системы она определила мою сетевую карту как NE1000 or compatible, что было недалеко от правды, ибо используемая мной карта Genius GR1222 и правда таковой была. Но у меня был родной диск с драйверами для этой карты, в том числе под ДОС. Оставалось непонятным, впрочем, как настроить драйвер под прерывание и адрес ввода/вывода карты.

Более того, после чтения Гугла оказалось, что драйвер для MS LAN Manager и пакетный драйвер — две разные вещи.

Ситуация с драйверами под ДОС стала немного проясняться.

Итак, существовало 3 больших стандарта:

  1. ODI. Эту модель драйверов использовала Novell для связи со своими Netware-серверами. Нетвари у меня нет, так что она не подойдет.
  2. NDIS. Это модель Майкрософта, для их LAN Manager и Windows. По идее, то что надо.
  3. Пакетный драйвер, который используют многие ДОС-приложения.


Итак, начнем с продукции Майкрософт. И MS Client и MS LAN Manager у меня давно были, еще с очень стародавних времен. Но, по словам Гугла, TCP/IP стек MS Client не работал под Windows for Workgroups, поэтому я начал свои эксперименты с MS LAN Manager.

Сетевая карта определилась как NE1000, что меня не удивило, и программа показала мне экран выбора сетевого протокола.

700yryozwdf5wy3xod2cmptymay.png

В Версии 2.2с программа поддерживала TCP/IP!!! Моей радости не было предела. Я прямо видел, как буду через 5–7 минут писать статью на Хабр с 286 го. Но реальность оказалась несколько сложнее. Сначала я выбрал настройку протокола с помощью DHCP, но после перезагрузки машина зависала на этапе получения адреса.

ОК. Настроим вручную.

Теперь при перезагрузке машина ругается на неправильные символы в файле PROTOCOL.INI
Это странно. Не буду мучать читателя всеми своими измышлениями, скажу лишь, что в настройках LAN Manager IP адрес пишется не через точку, а через пробел, вот так:

192 168 1 101

Когда я это понял, компьютер перестал ругаться на неправильные настройке при загрузке, и стал загружать все протоколы, но после загрузки LAN Manager сообщал, что не видит никаких серверов. Это не беда, но ни ping, ни NET USE не работали. А это уже беда.
Подумав, я решил, что дело, должно быть, в настройках самой сетевой карты.
После непродожительных поисков в .INI файлах, я нашел строки, указывающие на значение прерывания и адреса ввода-вывода сетевой платы. Они были неправильными. Поправил. Перезагрузка.
Снова то же самое.
Ладно, возможно, Windows for Workgroups поможет.
Первое, что изменилось в Windows, это окно сетевого логина.

np_pw-zioknnaussccfhrczwfka.png

Но в итоге Винда сказало то же, что и ДОС: серверов не видно. Ладно, думалось мне, это все из-за того, что она стучится в домен Windows NT и не видит его. Кстати, странно, что Windows for Workgroups хочет в домен, ну да ладно.

Но окошко Диспетчера Файлов тоже не могло найти сетевой диск.

qz_n9np69ce4pl4mitvoxsp97se.png

Не судьба.

Ладно, попробуем поменять сетевой адаптер. У меня их несколько разных, и я решил попробовать использовать D-Link DE-220P. После настройки карты в MS LAN Manager и перезагрузки, свершилось чудо:

69kabu1movodxft9bstqv73frag.png

Компьютер получил адрес по DHCP. Отлично, двигаемся дальше.

Файловый менеждер увидел сетевой диск:

4vqkhkrbuksdwb16e7ofukzjqui.png

В ДОСе тоже все отлично

NET USE Z: \\HOSTNAME\SHARENAME

i3kqcdkqqtcszkgfx1mfy5imtcg.png

Отлично! А что там внутри?

DIR Z:

_dyjsmyaszhkvysmvttyt-g12ou.png

Так зачем я расписывал все неудачи с предыдущей сетевой картой, если все было так просто, поменял карту и все заверте…

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

Но теперь все работает. Правда, поиграть в игрушки с сетевого диска не получится: без EMM386 весь софт LAN Managera грузится в нижние 640КБ, и для программ остается совсем немного места:

aduwr30dxajhhvqdixoobneub2s.png

С Браузерами под Windows тоже пока не сложилось, ни Netscape Navigator, ни MS Internet Explorer не согласились запускаться на 286 м, а NCSA Mosaic старых версий не захотели работать со стеком TCP/IP LAN Manager’а. Что, наверное, не так важно, ведь я хотел иметь доступ к сетевому хранилищу, и я его имею. Да и под ДОС есть браузеры, и они работают на 286. Но все равно, немного обидно.

Ну и, конечно, 286й компьютер с таким количеством «нижней» памяти, как есть сейчас, абсолютно бесполезен. Дело в том, что софт, использующий «верхнюю» память под ДОС требует 386 процессора или выше, так как работа 286 го с памятью выше 1 МБ очень специфична… даже в защищённом режиме процессор 16-и разрядный, и никакой линейной адресации нет, а чтобы вернуться в реальный режим, 286 му процессору требовался аппаратный ресет. Конечно, есть баг с линией А20 в реальном режиме, и он даже использовался, но, все равно, почти весь софт для 286 го «сидит» в нижних 640 КБ, и мне надо будет делать загрузочное меню в ДОС: либо сеть, либо нормальное количество памяти, третьего не дано. И, так как сеть под Windows запускается из-под ДОС, то при выборе нормальной памяти не станет сети и под Windows. Что, конечно, не беда для такой древней машины, но нужно сделать возможность выбирать конфигурацию загрузки. К счастью, ДОС 6.22 поддерживает загрузочное меню. Этим и воспользуемся.

Я решил сделать меню с 3 мя пунктами:

  1. Загрузка без сетевых драйверов. Это дает максимум «нижней» памяти. Для приложений ДОС и игр.
  2. Загрузка с драйверами NDIS. Тут памяти для приложений ДОС почти не остается, поэтому будем сразу и Windows грузить.
  3. Загрузка с пакетным драйвером.


Вот именно пакетный драйвер и позволяет работать многим приложениям, использующим сеть под ДОС. В комплекте с D-Link DE220 такой драйвер был, впрочем, в интернете немало драйверов для большого количества карт, особенно под шину ISA. С любой более-менее распространенной картой проблем возникнуть не должно. А нераспространенные в основном были клонами NE2000, так что и с ними проблем возникнуть не должно, но тут уж как повезет.

Для того, чтобы использовать TCP/IP с пакетным драйвером, нужен еще какой-нибудь стек TCP/IP. Для ДОС есть, например, mTCP, а для Windows — Trumpet Winsock, 1я версия которого у меня осталась еще с модемных времен.

Он запустился, но я не знаю, заработал ли. По крайней мере, теперь при запуске старого NCSA Mosaic сообщение об отсутствии стека TCP/IP не выдавалось, но браузер наглухо вешал компьютер, так и не заканчивая загрузку.

image
Изображение из Гугла

Остался старый 16-битный стек TCP/IP для Windows. Как его установить в уже установленную систему было непонятно. В отличие от WFWG 3.11, версия 3.1 не позволяет изменить настройки сети непосредственно из-под Windows. Как это сделать из-под ДОС мне выяснить не удалось, а в самом установочном пакете стека установщика нет.

Поэтому, переустанавливаем Windows. На позднем этапе установки она определяет сетевую плату (на этот раз, как NE2000-совместимую, и не дает варианта выбора другой), и позволяет настроить протокол… Выбираем «неперечисленный или обновленный протокол»

y6bwe8pbwrbibj4oes33algs6ko.png

и подсовываем дистрибутив 16-битного стека… Увиделся и установился. Начало хорошее. Но дальше дело не пошло: ни под ДОС, ни под Windows стек TCP/IP не заработал. Жаль.

Ну, ладно, пока я сдаюсь. Я в любом случае получил море удовольствия от возни с этой железкой, она классная. Даже несмотря на то, что это очень дешевая, бюджетная плата для 286. Она была выпущена уже во времена 386, использует большой чип Headland вместо россыпи дискретной логики, имеет слоты SIMM, процессор работает на частоте 16 МГц, в то время, когда Intel оставила рынок 286х на 12 МГц. Кстати, надо будет поменять осциллятор на 24 МГц, чтобы получить 12 на процессоре… и вообще, плата маленькая и даже на вид недорогая. Но она приятная и очень быстрая. С момента включения компьютера до начала проверки памяти проходит меньше секунды. И даже несмотря на то, что плата поздняя, она может работать с памятью в корпусах DIP. Правда, только с 1 МБ, а для Windows все же надо побольше…

io7v6vburm1k4xmym3df6fuz7lg.png

Несколько ностальгических скриншотов Windows:

q6acsgtkva7mmwteyqi_lcaa7vg.png

Windows на 286 работает только в Стандартном режиме. В этом режиме любое приложение ДОС, запущенное из-под Windows работает в полноэкранном режиме и полностью блокирует работу всех остальных приложений Windows. Таковы особенности 16и бит.

lp-8wu_eknfoivst1yi8pxtwukk.png

© Habrahabr.ru