LINUX.ORG.RU

Telnet


5

2

Всего сообщений: 2

MINIX-NE

Привет, ЛОР.

В посте полугодичной давности я рассказал о том, как я возился с монохромным монитором от МежДелМаша, подключая его к IBM PS/2. Теперь же я хочу поделиться с вами совсем-таки недавним моим успехом уже софтверного характера, впрочем всё так же занимающим своё заслуженное место в одном из разделов Специальной олимпиады, а именно, — я модифицировал древний MINIX 1.7.5 под нужды своего компьютера, дабы использовать все основные возможности железа. Но начну я своё изложение всё-таки с описания характеристик, ибо именно оно является основным лимитирующим фактором.

Итак, на фото один IBM 8530 (PS/2 Model 30 286) со следующими параметрами

  • Процессор от SIEMENS, клон Intel 80286, 16-bit
  • Память 1 Мб (разбита на 640k+384k)
  • VGA на материнке
  • PS/2 клавиатура и мышь
  • Три ISA слота (мне повезло не возиться с MCA)
  • Compact Flash XT Lite adapter rev 4.1
  • Ethernet от SMC (WD8390 совместимая карта с RJ-45 и BMC)
  • EGA видеокарта от ATI с поддержкой MDA и CGA режимов

Делловский монитор подключён к VGA из материнки, а вот с монохромным монитором пришлось повозиться, сделав переходник с MDA DB-9 на DB-15, плюс выцыганить питание с разъёма для флоппи, ибо IBM решили убрать молексы из дизайна, и запитывать диски с материнки.

Ситуация с подключением двух мониторов довольна нестандартна для конца 80х, однако именно для этой цели адресное пространство у монохромного адаптера и у цветного графического (от которого наследуется текстовый режим VGA) разные, а значит в теории можно использовать VGA+MDA. Однако обычно программы для MS-DOS на это не затачивались, и профита от такой схемы для меня не должно было быть, если бы не…

Если бы не старый MINIX. Версии вплоть до 2.0.4 позволяли в теории запустить полноценный UNIX даже на IBM PC XT с 640k RAM. Однако же найти подходящую именно для меня конфигурацию MINIX оказалось задачей трудной. Я перебрал сначала версию MINIX для MS-DOS, но 1 MB памяти для неё было явно мало (что и не удивительно, ведь MINIX для DOS создаёт виртуальный диск в RAM). В итоге я смог установить в QEMU MINIX 1.7.5 на один из разделов Compact Flash, и потом даже запустить уже на самом PS/2.

Правда, путь к первой введённой в терминале команде был тернист. Во-первых, MINIX подвешивал клавиатуру при загрузке. Причину удалось установить, загрузившись в режиме совместимости с i8086, откуда подозрения сразу пали на злосчастную линию A20, которая управляется контроллером клавиатуры в AT-клонах для совместимости с i8086. В исходном коде kernel/klib88.s A20-линия выставлялась в соответствии с мануалами, вот только оказалось, что для IBM PS/2 появился специальный контроллер для управления A20, а посему код для ядра пришлось сразу же патчить. По итогам доступная память с 640k в режиме совместимости увеличилась до установленной памяти в 1 MB, плюс защищённый режим с его плюсами (ну и минусами тоже, об этом чуть позже).

Следующим шагом было реализации возможности работать одновременно в двух виртуальных tty, используя два монитора. В коде kernel/console.c такой абстракции как монитор или экран не было, поэтому пришлось долго провозиться с возникающими гонками за внутренние переменные, однако усилия были вознаграждены, и теперь я мог например вывести на один экран какой-нибудь man, и параллельно редактировать файл на другом, переключаять по Alt-<- Alt–>.

Ещё одна из проблем оригинального MINIX — он отказывался работать с CF-XT адаптером. Одно время я был удовлетворён работой драйвера, который вызывает функции BIOS int 13h через аппаратный сброс, пока я не захотел наконец-то разобраться с сетевым драйвером (благо он как раз для WD8390 совместимых карт уже был в исходниках). При включении Ethernet в параметрах ядра загрузка зависала на моменте инициализации драйвера диска (забавно, не правда ли?) Вместо того, чтобы пофиксить баг, я решили подойти к вопросу радикально и переписать стандартный драйвер IDE контроллера, чтобы он стал поддерживать CF-XT-lite. И это было увлекательно. Главной подсказской для меня стала принципиальная схема адаптера, потому что сходу отображение адресов CF на шину не гуглилось, и оказалось, что не на все вопросы необходимо искать ответ в Интернете, тем более когда достаточно просто взглянуть глазами на схему платы. Конечно, документация к CF и исходники XTIDE BIOS мне тоже помогли. В процессе переписывания драйвера в момент, когда я наконец-то разобрался с адресами, и драйвер стал идентифицировать устройство, я умудрился несколько раз испортить корневой раздел, но спасали бэкапы и Linux, который до сих пор поддерживает старую добрую MINIX FS.

Как итог: старый MINIX прекрасно себя чувствует на старой же машине с 16-bit разрядностью и 1 MB памяти, при этом позволяет выходить во внешний мир с помощью telnet и ftp и поддерживает мультизадачность. Сейчас я ковыряюсь с httpd сервером, который уже скомпилировался и запускается, но пока возвращает только 403 и 404 (причём делает это он секунд за пять, если не медленнее). Остались ещё мелкие недочёты по типу не работающего SIGTERM по Ctrl-C и мигающего сразу в двух экранах курсора (это сбивает с толку, потому что не знаешь, на какой экран сейчас перенаправлен ввод). Из глобального хочется сделать frame buffer хотя бы для VGA, а то и для обоих мониторов (попробовать видеокарту ATI в режиме Hercules). Другая возможная ветка развития — создание дистрибутива для старых компов и эмуляторов типа даже pcjs.org, чтобы у энтузиастов была возможность попробовать настоящий UNIX на своём ретро железе.

P.S. Да, чуть не забыл. На фото на левом мониторе telnet на какую-то из BBSок, на правом — стандартные UNIX команды и вывод кусочка ядра на экран.

 , , ,

luke
()

Монохромный монитор на самоизоляции

Так как на карантине появилось больше времени для домашних занятий, я решил провести своё свободное время с особенной пользой и прикрутить совершенно бесполезный монитор от IBM Displaywriter к моему компьютеру. Сам этот Displaywriter — штука довольно странная, на сколько я понимаю всего лишь даёт возможность работать с текстом, то есть это даже не PC. Но вот монитор они взяли как раз от PC, а именно монохромную версию, IBM 5151; правда эти гении из IBM подумали, что нехай иметь отдельный кабель для питания и для видеосигнала, и запихнули всё это в одну вилку. Ну хоть разъём поменяли — и на том спасибо, а так бы кто-нибудь обязательно на землю 12 В подал.

Надо сказать, что в восьмидесятые годы видео-стандартов было не меньше теперешнего, но стандарт для Displaywriter можно сказать вообще не стандарт — я не нашёл никакого упоминания о DB-15 для видео, которое бы содержало внутри питание для монитора.

По счастию мне удалось найти схему распиновки для этого монитора, и о чудо — питание нужно было только +5 и +12 В, которые без зазрения совести можно позаимствовать прямо с материнской платы почти любого компьютера. При этом для передачи самого видеосигнала использовалось четыре пина: сигналы для вертикальной и горизонтальной синхронизации, интенсивность и дополнительная яркость — такие же, как и на вполне стандартном для своего времени монохромного монитора от персонального компьютера, который поддерживали почти все видео-карты начала-середины восьмидесятых, в том числе и моя ATI Graphics Solutions rev. 3, найденная в мусорном баке университета. Оставалось только спаять переходник и конфигурировать видео-карту. На удивление на пайку у меня ушло гораздо меньше времени, чем программирование, а всё потому, что BIOS моего компьютера не мог правильно инициализировать видео-контроллер, и поэтому мне пришлось написать свою собственную программу на ассемблере (которая, будем честными, была лишь вольным пересказом BIOS от IBM PC XT, исходники которого были опубликованы в «Руководстве пользователя»).

После того, как наконец-то появился первый долгожданный символ на экране, наступило некоторое разочарование — первые два столбца неизбежно «съедались» при отрисовке, а это означало, что надо было лезть внутрь монитора и настраивать положение луча электронов внутри трубки. Ну а так как ЭЛТ есть довольно большой конденсатор, который даже после выключения может быть заряжен до каких-то немыслимых киловольт, то настройка включённого монитора была попросту невозможна, а посему сия процедура заняла у меня четыре итерации с разбором и сбором монитора. Но в конце-концов фаза луча была выставлена верно, и прекрасный зелёный текст теперь радует мои глаза.

Теперь наверное нужно спаять более солидный провод, и добавить конденсатор, чтобы убрать помехи от пятидесяти герц (особенно заметна работа холодильника), думаю в обозримом будущем я это сделаю. Но принципиально telnet на моём IBM PS/2 Model 30 286 работает, к ноутбуку с арчем цепляется.

Собственно, на фотографии всё разнообразие техники у меня дома и представлено: помимо уже упомянутого ретро-компа здесь вы увидите так же казённый iPad, который используется как записная книжка; главная машинка — ThinkPad X220 с подключённым по VGA монитором от DELL, найденном на той же университетской помойке; плюс какой-то дешманский виниловый проигрыватель и цифровая пианина CELVANO, подаренная мне местным церковным органистом.

Видосик про то, как я логинюсь на кластер, чтобы проверить запущенные задачи, можно посмотреть на ютубчике: https://www.youtube.com/watch?v=m4pjEwnDWcE

Ну и в конце некоторый TODO list: хочу исправить на PS/2 батарейку (она вшита внутрь чипа, но есть мануалы как её можно «заменить»), потом надо будет наверное заняться дискетами, просто чтобы было наверное, ибо CF-IDE справляется со своей работой очень хорошо. Можно потихоньку писать эмулятор терминала, чтобы использовать фичи защищённого режима, но пока эта задачка отложена на неопределённый срок.

 , cern root, displaywriter, ,

luke
()