Сегодня я бы хотел немного рассказать о незаслуженно обделенном на Хабре вниманием советском ПЭВМ Поиск. Отличает данный компьютер от многочисленных Байтов, Ириш, Корветов, БК0010, Радио-Р86 и прочих то, что он был полу-совместим с IBM XT/PC. Машина базировалась на отечественном аналоге процессора Intel i8088 — КМ1810ВМ88, работающем на чуть завышенной частоте — ~ 5 MHz, против 4,7 MHz у оригинальной XT. Однако, в целом, компьютер работал медленнее, чем XT, потому что в Поиске не была реализована полноценная CGA видеокарта. Фактически, текстовые режимы эмулировались – видеоадаптер всегда работал в графическом режиме, а буквы на экране прорисовывал системный BIOS попиксельно. Естественно это отнимало кучу процессорного времени. Еще одним отличием от настоящей XT было отсутствие DMA, что так же сказывалось на быстродействии работы с памятью не в лучшую сторону. Да и самой памяти было далеко не 640Kb, которых бы конечно хватило всем, а поменьше, и ее хватало не всем. Однако, несмотря на все недостатки, ПЭВМ Поиск мог запускать актуальную в то время MS-DOS и работать практически со всеми популярными в то время приложениями и играми, начиная от Norton Commander и Digger, заканчивая Windows и Office. И цена, конечно… Если настоящую XT-шку могли позволить себе в основном только организации, то ПК Поиск был более-менее доступен для рядового советского инженера (месячная зарплата). Но обо всем по порядку…
Предисловие
Вообще, строго говоря, Поисков было несколько модификаций. Самым главным отличием было количество набортной оперативной памяти. Первые модели Поисков имели всего лишь 128 Kb, из которых 32 Kb отнимала видео память. У пользователя оставалась всего лишь 96 Kb свободной памяти. Последние модели уже несли на борту 512 Kb, 32 Kb так же уходило под видео память и у пользователя оставалось 480 Kb. Это уже давало шанс запустить что-то еще, кроме самой DOS.
Впрочем, о DOS я заговорил рано, потому что в стандартную поставку входил сам моноблок, блок питания и пара кассет с системными программами и играми. И все. Таким образам, любой контроллер, будь то контроллер дисковода (и, разумеется, сам дисковод) или контроллер джойстика, пользователь должен был приобретать отдельно. А пока, пользователь мог работать с кассетным магнитофоном в качестве носителя информации. Кассетный интерфейс был “скопи-пащен” с буржуйского компьютера IBM PCjr. Формат записи на кассету был идентичен PCjr и еще одному советскому “брату по духу” – Электроника MC-1502, тоже x86 совместимому, и тоже как Поиск, не без ”изюминки” от создателей. И поэтому, пока у нас нет контроллера дисковода, начну я с кассет.
Формат записи на кассету и кассетный интерфейс
Поиск не так популярен среди любителей старых компьютеров, как например, ZX-совместимые и их клоны, поэтому софта для работы с кассетами просто нет, и я решил исправить эту несправедливость. Итак, данные записываются в виде ноликов и единичек. Если полярность успевает смениться с отрицательной на положительную за 1 миллисекунду — то это единичный бит. Если не успевает — то нулевой. Таким образом, ноль – это приблизительно 0.5 миллисекунд, один – 1 миллисекунда. Зная это, можно без проблем декодировать сигнал прямо визуально глазами. Вот, например:
Здесь “размахистые” периоды с большим интервалом – это единицы, короткие – нули. Итого на рисунке изображено 1111 0000 1011 001. Каждая запись начинается с пилот-тона, который состоит из 256 байт 0xFF, то есть 256*8 = 2048 единичных бит, после следует записанный бит ‘0’, и далее синхро-байт 0x16 (00010110). Все данные записываются 256-байтными блоками, после которых следует 2 байта контрольной суммы. Контрольная сумма считается по алгоритму CRC-16 с полиномом 0x1201, начальное значение = 0xFFFF, после подсчета CRC = CRC xor 0xFFFF. После пилот тона, нулевого бита и синхро-байта 0x16 находится 256-байтный заголовок, в котором присутствуют такие важные данные, как имя файла, тип файла, сегмент и смещение куда будет загружена программа.
Poisk_hdr = Packed Record
Magic : Byte; // A5h
FName : Array [1..8] of Char;
FType : Byte;
FLen : Word;
Seg : Word;
Ofs : Word;
End;
Заголовок дополняется нулями до 256 байт. Далее идет его контрольная сумма – 2 байта. Последовательность завершается 4 байтами 0xFF. Потом заново идет лидер (пилот-тон) с единицами, бит синхронизации 0, байт синхронизации 0x16 и вот тут уже начинаются блоки с данными. В конце последовательность так же завершается 4мя байтами 0xFF.
Итогом ковыряния с форматом записи стали две небольших утилиты: CAS2WAV и WAV2CAS. Первая позволяет создать из бинарного файла .WAV файл, который в последующем может быть проигран на обычном mp3 плеере. Вторая же, наоборот, пытается из кассетной записи создать бинарный файл. Поэтому, если у кого-то сохранились кассеты от Поиска или от МС-1502, то цифруйте их, пожалуйста, в WAV, для коллекции и истории. Скачать наиболее полный на данный момент набор кассетных программ и игр для Поиска можно здесь: vizersprojects.ru/archive/sannata/apps.zip
Кассеты
Теперь, когда есть возможность создавать WAV файлы, конвертируем кассетный софт и записываем на mp3-плеер. Подключаем плеер к разъему “МАГНИТОФОН” и включаем питание.
В BIOS Поиска, помимо основных функций обработки прерываний, была записана небольшая программа – монитор, которая позволяла ввести имя файла и загрузить его с магнитофона в память:
Программы и игры, в основном, представляли собой русифицированные версии популярных игр и программ с IBM PC. К примеру, Бейсик есть ни что иное, как Microsoft Basic, который был зашит в ПЗУ компьютера IBM PCjr. Найдите два отличия:
Впрочем, справедливости ради, стоит отметить что были и свои собственные игры, к примеру шахматы или реверси.
Дополнительные контроллеры (адаптеры)
Да, как ранее уже упоминалось, к Поиску можно было подключить дополнительные контроллеры, или адаптеры, как сказано в инструкции. Для этого Поиск имел четыре слота расширения, куда можно было установить одновременно до четырех контроллеров. Фактически, шина — стандартная на тот момент ISA-8, но конечно с другим разъемом и каким-то одним (или двумя) инвертированными сигналами. Контроллеры для Поиска выпускались как на заводе, так изготавливались кооперативами и даже любителями.
Первое, что было желанно и необходимо — это контроллер дисковода. С ним Поиск превращался из печатающей машинки для Бейсика и игр в серьезный компьютер с DOS, открывающий пользователю весь набор (ну, почти весь) существующего на тот момент x86 программного обеспечения. Чего только с этими контроллером не делали – турбировали (увеличивали скорость чтения-записи), закладывали в прошивку поддержку 800 Kb форматов дискет, вместо 360 Kb. В общем, они были разные, но в целом работали с дискетами хорошо и быстро. Этой мой контроллер:
А это еще один контроллер дисковода:
Для моделей Поиска с 128Kb оперативной памяти так же необходимо было приобрести “Расширитель оперативной памяти”, что бы запускать что-то еще, кроме самого DOS. “Расширитель оперативной памяти” вставлялся в слот, как обычный контроллер. Были разные модели, на 256 Kb, 512 Kb и даже по слухам на 670Kb. Иногда их совмещали с чем-то еще, например с LPT-портом. На имеющимся у меня экземпляре как раз так и сделано.
Ну и конечно контроллер жесткого магнитного диска с MFM интерфейсом. Зверь редкий и дорогой, как, впрочем, и сам жесткий диск. Позволял подключить к Поиску жесткий диск объемом до 68 Mb. Не менее уникален был и сам шлейф, которым контроллер соединялся с жестким диском.
С ним мне пришлось немного повозиться. Во-первых шлейф. Он не стандартный, и пришлось на скорую руку набросать примерную схему:
И спаять такой переходник:
Дальше, я пытался заставить работать контроллер с имеющимся у меня винчестером Robotron K5504.20 на 20Мб. Низкоуровневое форматирование завершалось без ошибок, но вот при попытке запустить FDISK и разметить системный раздел возникала ошибка: Error reading fixed drive. Я грешил на кабель, перепробовал все комбинации джамперов на контроллере, изменял путем правки в прошивке контроллера параметров для этого конкретного винта — бесполезно. FDISK все-таки иногда запускался, но при попытке записать разделы на диск зависал. Причем я точно знал, что этот Гроботрон полностью рабочий — он без проблем форматировался, размечался и вообще чувствовал себя совершенно нормально на моей XT-шке. Виновник торжества:
После «прозвонки» и проверки кабеля в стотысячный раз я плюнул и все-таки решил подключить свой второй MFM жесткий диск Seagate ST-225, который стоял у меня в XT-шке. Правда, пришлось предварительно делать с него бекап по нульмодему на основной компьютер. И, о чудо!, он без проблем отформатировался и заработал с первого раза. Так и пришлось оставить Сигейт на Поиске, а Гроботрон поставить в XT-шку, хотя я хотел наоборот.
Еще существовал контроллер джойстика и соответственно сам джойстик. Забавное устройство, ни с чем кроме себя не совместимое и ни на что не похожее. Программа драйвер позволяла задать соответствие наклона какой-либо клавише на клавиатуре, тем самым, когда джойстик наклоняли влево, эмулировалось нажатие клавиши “влево” и тд. Вообще, хорошая идея. Все это позволяло играть в игры джойстиком, даже если игра джойстик не поддерживала.
Потроха и ремонт
Поиск у меня сломался давно и был неисправен. Неисправность заключалась в периодическом внезапном зависании или даже перезагрузке. Логично предположив, что все дело в памяти и, запустив программу CheckIT с тестом, я увидел такую печальную картину:
Берем в руки кувалду отвертку, отвинчиваем несколько винтов снизу и снимаем верхнюю крышку с клавиатурой. Взору открывается системная плата целиком:
В центре керамический процессор, в правом верхнем углу на панельке ПЗУ с BIOS, а снизу 16 запаянных микросхем К565РУ7Г – это и есть память. Шестнадцать микросхем выпаивать мне не хотелось, поэтому я решил попробовать способ, который где-то раньше слышал: прямо сверху на ножки старой микросхемы одевать новую и смотреть по тесту памяти, изменится ли ситуация. Если что-то меняется, то заменять микросхему. Меня останавливало только одно – нужно каждый раз при надевании новой микросхемы на старую подключать клавиатуру, грузить DOS, грузить CheckIT и запускать тест. И ладно бы со временем, которое тратится на загрузку программы… Еще у клавиатуры не очень надежный шлейф, и от частого включения – отключения ему лучше точно не будет. Короче лень двигатель прогресса. Из архивов был вытащен на свет божий старый добрый TASM (ассемблер). Решено было написать тест, который зашивался бы прямо вместо BIOS и стартовал сразу при включении компа.
Вообще, написание программы на ассемблере вместо BIOS немного отличается от написания программы на ассемблере под DOS, например тем, что у нас нет привычных прерываний BIOS (ведь мы его и пишем) и ДОС, и для того, что бы что-то выводить на экран нужно рисовать символы вручную. С другой стороны, вся память в нашем полном распоряжении и с ней можно делать все что угодно. Ну, правда, в одних регистрах много не сохранишь данных, поэтому все-таки какие-то переменные приходится хранить в памяти. Ну и стек конечно тоже, ибо без стека ни подпрограмму не вызвать, ни значения регистра сохранить. Короче стек тоже полезная вещь. Поэтому я сначала тестирую первый килобайт памяти – если есть ошибки, то пикаем три раза и вешаем процессор. Если все нормально – устанавливаем в первый килобайт стек, переменные и начинается выполнение основного теста.
Итого, немного говно так_себе_кода (ибо на коленке и для себя) и тест готов. Зашиваю в ПЗУ, включаю компьютер и вижу то же самое, что показывал мне CheckIT, только уже в своем тесте и моментально:
Все, теперь постепенно начинаю “насаживать” заведомо исправную микросхему поверх впаянных. Довольно быстро нашел первую сбойную в районе 152Kb, заменил, потом долго возился с ошибками в районе 264Kb, но постепенно уменьшал, уменьшал и свел до нуля. Сменил в итоге семь микросхем (возможно, некоторые зря), заодно поднял их на панельки:
Семь хоть и много, но не шестнадцать все-таки. Мой тест проходит без ошибок, CheckIT без ошибок и вообще, все мыслимые и не мыслимые тесты памяти – без ошибок. Победа!
Софт
С дисководом, а тем более с жестким диском, Поиск в буквальном смысле «оживал» и становился большим серьезным компьютером. Где оставались те кассетные игрушки, когда тут можно было играть в такое:
Ну и конечно, винда, just for lulz, как говорится. Версия 3.0, работает не торопливо (а чего вы хотели от 480 Kb оперативки), но работать можно.
Апгрейд (наполовину удачный)
Еще прошлой зимой из Китая ко мне приехало два процессора NEC V20. В теории, он полностью совместим по ногам с i8088, работает несколько быстрее за счет улучшенного аппаратной реализации деления и умножения, содержит в себе набор инструкций 80186 процессора (например таких, как сдвиги с аргументом, отличным от 1, сохранение сразу всех регистров в стек и тд). Почти 80286, разве что только без защищенного режима. Ну и как приятный бонус для любителей ретро, у него есть аппаратная поддержка команд i8080 процессора, таким образом, на нем через специальную программу можно запускать нативно софт от CP/M для i8080.
Поэтому берем в руки кувалду, паяльник с оловоотсосом, запасаемся терпением и аккуратно выпаиваем советский КМ1810ВМ88. Ставим DIP-40 панельку, на которой уютно устраивается NEC V20:
Как и предполагалось, компьютер стартует без проблем. Теперь можно немного померить попугаи. Сперва тесты оригинального КМ1810ВМ88. Общее быстродействие:
Видео подсистема с КМ1810ВМ88
А дальше уже NEC V20:
Тест CPU с NEC V20:
И видео подсистема:
Видно, что с V20 компьютер работает несколько быстрее, особенно это касается математики. Так же несколько быстрее стала и видео-подсистема из-за того, что в функциях BIOS программного рендеринга символов кое-где присутствуют операции умножения и деления. Хороший процессор, чего говорить. Вот только дальше меня ждал неприятный сюрприз — когда я попробовал после этих тестов загрузить обычный Volkov Commander я увидел следующее:
Заметно, что каждый второй символ на экране не прорисовывается. Я долго задумчиво смотрел на код BIOS, отвечающий за все, что связано с выводом символов, просматривал программы обработки int 10h. Я думал будет вполне легко пропатчить BIOS на предмет не совместимости с NEC V20, поскольку я знал, что хоть NEC V20 и i8088 используют один и тот же набор команд, но различия все-таки есть. Проверял я код вот на какие вещи:
1) POP CS, и вообще двух-байтные POP'ы мне не встретились в листинге. v20 их не ест;
2) После MUL v20 не сбрасывает ZF, если резалт 0. Есть несколько MUL в коде, но ZF после операций не проверяется нигде;
3) Экзотические AAD/AAM не встречаются нигде. В интеле инструкции могут принимать аргумент, в V20 он всегда = 0Ah;
4) То же касается и инструкции SALC (D6 opcode), которую v20 интерпретирует как XLAT. Нет таких инструкций в BIOS;
Пофиксить проблему с наскоку не получилось. Дальше, по подсказке одного пользователя с форума ZK-PK.ru, я обратил внимание на тот факт, что глючат таким образом программы, которые работают с видео-памятью напрямую. У Поиска, как уже говорилось, нет физического текстового режима, поэтому когда какая-либо программа пытается что-то записать в область текстовой памяти 0xB800 генерируется немаскируемое аппаратное прерывание и управление передается обработчику Int 2. Обработчик NMI в свою очередь считывает значение из порта 0x28, в котором находится смещение по которому произошла запись в память, и начинает попиксельно рисовать символ в графической видео-памяти 0xBC00. После того, как символ нарисовался в видеопамяти происходит выход из обработчика NMI. Вот примерно по такой упрощенной схеме и происходит визуализация символов из текстового режима в графическом режиме. Так вот, путем проб и ошибок выяснилось, что когда в память записываются сразу несколько символов командой REP STOSW, скажем два, то не срабатывает аппаратная ловушка адреса и в порту 0x28 вместо смещения на последний символ сидит смещение предыдущего символа. Так же не вызывается и NMI. Можно предположить, что у V20 тратится меньше тактов на каждый цикл REP STOSW, а схема рассчитана на большее количество тактов, поэтому схема срабатывает лишь на каждый второй цикл. Итого, проблема оказалась аппаратной, к сожалению. Конечно можно обойти ее и программно, например в качестве костыля в обработчике NMI рисовать не только текущий символ, но сразу и соседа, но это, как вы сами понимаете, именно костыль. Если не обращать внимание на этот недостаток, остальные программы работают нормально, включая игры.
В заключение
ПК Поиск — это мой первый компьютер, наверное именно по этому к нему уделяется больше внимания, нежели к другим моим старым железкам. В технических вопросах очень здорово помогает форум ZK-PK.ru и его раздел «Поиск». Сейчас несколькими энтузиастами готовятся к выпуску платы-реплики контроллеров MFM диска, дисковода. Вообще, планов много, например изготовление контроллера IDE (тем более, что такой контроллер существовал на закате выпуска Поисков), возможно контроллер IDE-CF (compact flash). Если у кого-то вдруг сохранились кассеты с записью, или какие-то редкие контроллеры (адаптеры), был бы рад обсудить возможность их получения (в личных сообщениях). Всем удачи!
Автор: tronix286
Здравствуйте ! Я один из разработчиков сторонних модулей расширения для Поиска, а именно “ОЗУ 768” и мегабайтного “Е-диска” – прямой конкурент тех, кто выпускал расширение памяти с портом, изображенный на одной из фотографий.
Насколько я помню, контроллер дисковода “Поиска” продавался в комплекте с польским дисководом, поддерживающим плотность записи 720 Кб и не поддерживал дисководы 360 Кб или 1,2 Мб. В советское время старались бытовую электронику делать на одной элементной базе, а промышленную – на другой. Думаю, для того, чтобы максимально снизить воровство, которое тогда скромно называлось “принёс с работы”.
Ваш контроллер, судя по всему, “турбированный”, т.е. схема и Биос изменены для ускорения работы и для подключения более стандартных дисководов. Биос “турбированных” контроллеров был менее “кривым” и поддерживал некоторые “хитрые” программы ввода-вывода, которые “родной” контроллер не поддерживал.
Термин “Турбо” тогда применялся и к месту и не к месту и был как бы визитной карточкой зеленоградского кооператива МЭЛТ. Не знаю, имел ли он отношение к нэне действующей фирме с таким названием.
И ещё. В схеме “Поиска” применялись микросхемы РТ ПЗУ с пережигаемыми перемычками. Одна неверная манипуляция с питанием “Поиска” и он переставал работать. Восстановить можно только перепаяв полностью весь комплект эртэшек предварительно их “прошив”, что в наше время практически нереально :)). Это я к тому – будьте осторожны с “родным” источником питания, не перегружайте его. Сгорит и “доску” сожжет ((. Такое бывало.