Серия «IBM PC XT собственной конструкции»

97

IMB PC XT своими руками. Часть 2

Серия IBM PC XT собственной конструкции

Продолжаем. Первая часть здесь.

VGA.

Пришло время делать полноценную видеокарту. Как я уже писал выше, в начальном плане было сделать минимальную конфигурацию 640х480 с какой-то одной глубиной цвета. Однако, погружение в эту тему привело к понимаю того, что делать минимальную карту не очень логично. Дело в том, что настоящая VGA карта поддерживала целый пакет различных видеорежимов (что-то около 16) и могла налету переключаться между ними. На практике отсутствие такой возможности привело бы к тому, что очень много программ не смогли бы нормально работать.

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

Оставалось два варианта: использовать какую-то ПЛИС, чтобы синтезировать все в ней, или применить один из видеоконтроллеров, на которых строились видеокарты где-то в 90-х годах. Я выбрал второй вариант.

Лучшим кандидатом для применения показался TVGA9000i. У Сергея Киселева имеется уже проверенная очень популярная реализация под этот видеоконтроллер. Поэтому я знал, что если у меня что-то и не получится, то только из-за кривизны рук.

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

Вариантов покупки видеокарты есть масса, я в итоге купил за примерно 600 рублей + пересылка, что мне кажется довольно удачно. Приехал вот такая карта:

Донорская видеокарта

Донорская видеокарта

Видны следы активной эксплуатации и немного ржавчины.

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

Для переноса на мою материнку следовало решить главную проблему: как припаять видеоконтроллер? Обычно для таких микросхем используют всякие переходники DIP – QFP, но найти такой на 160 ног мне не удалось.

Пришлось рисовать проект печатной платы и заказывать изготовление у китайцев. Вышло дороже чем сама микросхема, но вариантов не оставалось. По одной их не делают, прислали сразу 5 штук. Дальше пара вечеров и на материнке появилась видеокарта:

Видеокарта уже на материнке

Видеокарта уже на материнке

Что касается самой схемы, то тут тоже есть немного адаптации. Прежде всего, традиционно для всей конструкции удален ROM.  Код драйвера загружается как все предыдущие в оперативную память при старте из STC.

Тут не обошлось без особенностей. Дело в том, что этот видеоконтроллер универсальный. Поддерживает 8- и 16-битные системы. Поэтому у него очень экзотическое подключение ROM. Микросхема ROM находится для процессора как бы за видеочипом, который выполняет для нее роль буфера и перекоммутирует выводы на 8- и 16-битный вариант разъема. А сам код размещен в микросхеме ROM так, чтобы оптимизировать этот процесс. Если кратко, то все четные и нечетные байты кода размещены не по порядку, а в разных страницах памяти. Соответственно, чтобы переселить этот код в RAM, пришлось пересобрать его, т.е. расположить байты по порядку. Я использовал код ROM от Сергея Киселева, чтобы быть уверенным, что он запустится на  XT. Хотя на многих форумах написано, что у него используется обычное ROM как от заводской карты. Сама схема к Сергею имеет мало отношения. Подключение скорее стандартное по даташиту для варианта без собственного ROM.

Еще пришлось добавить кварцевый генератор на 14.31818 МГц. Это стандартный сигнал OSC разъема ISA – основной тактовый сигнал всей системы, от которого я отказался, чтобы ускорить процессор. Но здесь он используется для синтезирования различных частот.

При первой попытке карта вообще не завелась. Через пару дней я догадался прогреть феном все контакты и картинка появилась. Но очень печальная. Вот такая:

Первое изображение

Первое изображение

На решение этой проблемы ушла еще пара дней. Изображение пошло, но символы были очень сильно искажены. Можно даже сказать разрушены, хотя атрибуты (цвет и т.п.) шли нормально. После некоторых экспериментов я понял, что нормально работают простые видеорежимы типа MDA или CGA, а VGA рассыпается. Все дело в интенсивной работе с памятью. Фактически я уперся в предел для навесного монтажа. Сигналы RAS/CAS не могли нормально дойти до памяти. Я переложил прочие жгуты подальше от памяти, чтобы было меньше помех, а для сигналов RAS/CAS сделал две коротких витых пары и пропустил сигналы по ним. Это, если кому-то непонятно, специальные сигналы для передачи адреса в память. Они по сути имеют частоту выше всех прочих. Стало отлично. Вот так получилось:

Volkov Commander VGA

Volkov Commander VGA

Что особенно радует – это удивительно чистая картинка. Словно это настоящий ПК с настоящей видеокартой. Никогда еще мои самоделки не давали такой результат.

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

Я добавил второй буфер на шину данных (74HC245N) и второй буфер на шину адреса, который сделал из трех 74HC245N, работающих в прозрачном режиме.

После того, как все было сделано примерно как задумано в IBM, видеокарта совсем плохо стала работать.

Снова изучение осциллограмм и вывод: Неправильные буферы каким-то чудом компенсировали другую проблему. Оказалось, что разгон CPU привел к тому, что он просто проскакивал мимо сигнала готовности видеокарты. Когда Trident при чтении видеопамяти  снимал сигнал готовности, чтобы CPU подождал данные, CPU уже пролетал ту фазу, на которой он проверяет этот сигнал. В результате задержка игнорировалась, видеокарта еще не отдавала байт на шину данных, и CPU читал резисторы подтяжки – FF.

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

Загрузил его первым сложным тестом – знаменитый Принц Персии. На максималках.

Принц Персии

Принц Персии

USB

В поисках ответов на разные вопросы в Интернете, я наткнулся на интересный модуль для XT.

USB to ISA

USB to ISA

Это самый настоящий адаптер для USB-флешек. Конечно, в начале 80-х ничего подобного не существовало даже в проекте, но почему бы не добавить эту удобную штуку? Однако, они продаются по какой-то безумной цене в районе 2,5 тыс, что совершенно отбивает желание покупать. Сердцем модуля является CH375, который можно купить на макетной плате всего за 150 рублей с доставкой:

Макетная плата CH375

Макетная плата CH375

Разница двух модулей по сути только в том, что нет разъема ISA с буфером и декодера портов, чтобы  XT  мог общаться с модулем. И нет ROM, панельку которого видно на картинке. Но эта ROM требуется только чтобы обеспечить возможность загрузки системы с флешки. Для простой работы с флешкой как с переносным носителем информации драйвер можно разместить как обычно в sys-файле и загружать его вместе с DOS.

В оригинальном модуле декодер реализован в бюджетной ПЛИС  ATF16V8. Такой у меня не было, и программатора тогда не было тоже, поэтому я заменил ее на EPM3064, которая уже упоминалась в предыдущем разделе. Она значительно более мощная. Поэтому кроме поддержки USB в нее можно перенести часть мелкой логики от других узлов – к этому моменту место на материнской плате начало заканчиваться. Кроме того, пришлось переделать разъем IDE под HDD, чтобы освободить место, которое переходник закрывал собой.  Раньше я хотел сделать его так, чтобы CF-карту можно было легко вынуть и использовать как флешку, но теперь это стало неактуально и можно было освободить пространство под картой.

Микросхема буфера данных расположена под модулем, не видно на картинке.

Получилось вот так:

Модуль USB

Модуль USB

Модуль USB запустился удивительно сразу без отладки. Пришлось только разобраться в синтаксисе файла config.sys, который подключает драйвера к MS-DOS. В системе появился диск D. А вот с самой флешкой пришлось повозиться. MS-DOS не умеет работать с большими накопителями. Даже самая маленькая моя флешка на 8 Гбайт – это слишком много для FAT16. В итоге получилась флешка на 512 МБ, которая отлично читается в XT. 7,5 ГБ осталось в тени.

Вообще, флешка получилась заметно тормознутой. Тестовый файл размером 650 кБ читается или записывается ровно одну минуту. Получается, скорость флешки всего около 10 кБ/сек, хотя в теории должно было получиться примерно в 5-6 раз быстрее.

С флешки удалось запустить знаменитый Wolfenstein 3D. Вообще, игра просит для VGA 286 процессор и не запускается. А в версии для CGA на экране почти ничего не разобрать.

Однако, житель Интернета по имени @kingcrimson234 поправил исходный код игры так, чтобы она не требовала 286-й процессор. По его словам изменения были крайне незначительными. С его правками  Wolfenstein запустился полноценно в VGA.

Wolfenstein 3D

Wolfenstein 3D

Играть с FPS в районе 1 – 2 все равно почти невозможно. Но забавно это видеть.

Ну и мой любимый Retal. Когда-то эта игра была у меня на дискетке всегда с собой. Я играл в нее в институте, в компьютерном классе кафедры на 286-х ПК. В прошлый раз это было в 1994 году. И вот теперь опять. Работает, кстати отлично, без тормозов. В самом начале, когда я только все планировал, я именно эту игру хотел увидеть как конечную цель. Получилось.

Retal

Retal

COM-порт.

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

Первая проблема тут – это сама мышка. Конечно, есть варианты всяких конверторов, превращающих современную USB-мышь в старинную, а еще можно было заморочиться и сделать эмуляцию через тот же контроллер клавиатуры (ESP32) и использовать bluetooth’ную мышку. Но решил пойти по классике.

Прежде всего, удалось купить новенькую настоящую COM-мышку с шариком. Нашел в одном единственном магазине на Яндексе. Видимо товар совершенно не ходовой. Когда достал ее из упаковки – чуть не прослезился. Ровно такие же мышки я гонял по коврикам 30 лет назад.

Шариковая COM-мышь

Шариковая COM-мышь

С контроллером порта вышло сложнее. Вообще, это не особенно сложное устройство. Существует несколько вариантов микросхем, которые реализуют полный функционал. Я приобрел 16С550 в dip корпусе на 40 выводов. Этот чип полностью обеспечивает всю работу интерфейса RS-232 в смысле логики, но вот дальше сложнее. Нельзя просто использовать RXD и TXD соединив их проводками с разъемом по типу UART’a. В RS-232 двуполярные сигналы. Конкретно в XT были уровни +-12 вольт. Между контроллером и разъемом стоял буфер, который брал эти напряжения с разъема ISA (т.е. по сути с блока питания XT) и модулировал их сигналами контроллера. У того же Сергея Киселева для com-порта используется буфер GD75232 или аналогичный, к которому нужно подключать +- 12 вольт. У меня же в схеме есть только +5 вольт.

Пришлось погружаться в теорию устройства мышек наших предков. Как оказалось, питание для мозгов мышки берется из сигнальных линий. Точнее с линии TXD, которая должна быть в логической единице RS-232, а это -12 Вольт. Этот сигнал подключен к земле мышки, а ее плюс – это земля компьютера.

Т.к. для питания мышки по даташиту от ее чипа нужны просто 5 Вольт, то я их подал прямо на разъем в нужной полярности вместо сигнала TXD. Осталось два сигнала RTS и RXD. Первый делает сброс мышки, а по второму она асинхронно выкидывает байты о своем перемещении. Их только нужно инвертировать оба и можно подключать к контроллеру COM-порта. Никакие буферы напряжений в таком варианте не нужны. А на плате как раз были два свободных инвертора.

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

Вот так, если кто-то не знал, выглядит курсор мышки в DOSе, точнее в файл-мененджере. Полупрозрачный оранжевый прямоугольник.

Курсор мышки

Курсор мышки

В остальном мышка работает как обычно в Windows. Чувствительность довольно хорошая хотя и без коврика. Никаких тормозов не ощущается.

UMB

UMB - Upper Memory Block.

В адресном пространстве процессора 8088 после основных 640 кБ остаются пустые окна (или промежутки), которые не заняты каким-то ROM, драйверами или видео. Их не очень много и они могут быть изрядно фрагментированы, но они есть. Возникает соблазн использовать их для дополнительного RAM, что и было в свое время реализовано и названо UMB. В эту память переносились код DOS и драйвера, освобождая место для пользовательского кода в основной памяти. Потому что как оказалось, 640 кБ хватает не всем. Были такие специальные модули с памятью, которые вставлялись в слот ISA.

В моем случае оставалось 143 кБ бесполезной памяти (СС000 - EFFFF). Плюс, они уже «покрыты» физической RAM и могли бы быть очень просто переданы DOS как верхняя память.

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

Эту схему я синтезировал в GAL16V8B – микросхема программируемой логики из тех времен. Очень в тему получилось:

GAL16V8B

GAL16V8B

Просто так новые килобайты в системе не появляются, нужен специальный драйвер. Тут выяснилось, что установленная у меня ОС MS-DOS 4.01 даже с драйвером очень плохо (неэффективно) работает с UMB. Отличная причина сделать апгрейд. Перешел на MS-DOS 6.22.

Вот здесь видно, что получилось:

Распределение памяти

Распределение памяти

В строке Upper драйвер UMB нашел всего 144 кБ верхней памяти (147472 / 1024), 13 кБ сразу заняты драйверами и самой ОС – это значит, что в основной памяти эти килобайты освободились для пользовательских программ. Еще 130 кБ доступно для использования. Очень не дурно, надо сказать. Дополнительные килобайты в основной памяти позволили запустить Wolfenstein с мышкой. Раньше приходилось загружаться без драйвера мышки, иначе не хватало RAM.

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

В итоге получилось так:

Общий вид схемы

Общий вид схемы

HDD x 2

HDD x 2

Здесь видно, что я припаял на свободное место переходника разъем под вторую CF-карту. Сейчас там стоит две карты на 250 МБ каждая. Соответственно в системе два HDD.

Ну и самое интересное:

Схема со стороны монтажа

Схема со стороны монтажа

Корпус.

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

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

Вид в корпусе

Вид в корпусе

Все в сборе

Все в сборе

Benchmark

Benchmark

Windows.

MS-DOS 6.22 – это конечно хорошо, но настоящий компьютер в современном смысле должен быть на винде или что-то типа того.

Для процессора 8088 доступны только самые первые версии Windows. Точнее его предел – это версия 3.0. Дальше уже нужен процессор 80286.

Windows 3.x устанавливается как дополнение к MS-DOS. После загрузки надо ввести команду win и Windows запустится. (Ну или сразу сделать это в автозапуске.)

Запуск Windows 3.0

Запуск Windows 3.0

Рабочий стол

Рабочий стол

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

Solitaire

Solitaire

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

Этот пост является упрощенной версией моей статьи на Хабре. Здесь, на Пикабу, очень сильно меньше технических деталей. Схема, если кому-то интересно, вот здесь: Схема

К сериям микросхем типа HC / ALS прошу не придираться. На схеме показана только логика. Паял то, что было проще купить. Главное, что оно работает.

Теперь думаю не замахнуться ли мне на ПК на базе 286-го процессора?

Показать полностью 23
590

IBM PC XT своими руками

Серия IBM PC XT собственной конструкции

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

В общем, где-то в конце 2024 года решил я сделать компьютер. Понятно, что не такой как в магазине – это все-таки не тот уровень, куда с паяльником лезут, а что-то попроще, но по-настоящему.

Вообще история PC  началась в 1981 году, когда  IBM предложила миру свою модель 5150 или IBM PC. В тот момент это не было какой-то особенной революцией, многие компании пытались предложить рынку массовый персональный компьютер, но IBM случайно угадала баланс между стоимостью, производительностью и авторскими правами. Последний пункт оказался чуть ли не самым главным, т.к. позволил всем желающим клонировать PC в формате собственных версий. IBM наверно было обидно, что их идеи приносят деньги всем желающим, но для судьбы архитектуры это оказалось ключевым моментом. Рынок быстро наполнился компьютерами и программами к ним.

Та модель 5150 была не такой уж прикольной. Для игр даже Spectrum был точно поинтереснее. Но IBM продвигала PC прежде всего как инструмент для бизнеса. В минимальной конфигурации это был довольно унылый компьютер с магнитофоном в качестве постоянной памяти. Поэтому очень быстро вышла модель 5160 – IBM PC/XT. Вот это уже был настоящий компьютер в современном понимании. Сама основа осталась почти без изменений, но в комплекте уже сразу шли накопитель на гибких дисках и жесткий диск. И усиленный блок питания, чтобы питать их. Видеокарта  выбиралась юзером в момент покупки. Или относительно бюджетная монохромная MDA, или CGA для любителей странных цветовых палитр.

Вот так выглядел IBM PC/XT

Вот так выглядел IBM PC/XT

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

Теперь вернемся в наше время. Модель 5160 вполне можно спаять самостоятельно. Там все микросхемы в корпусах доступных обычному паяльнику. Конструкция IBM PC XT подробно описана в мануалах того времени и легко находится в Интернете. Это довольно объемный документ на 420 страниц. Не по-русски разумеется.

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

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

Поразмыслив над всем этим, я пришел к такому плану:

  1. CPU V20 – это улучшенная версия 8088. Может работать на большей скорости.

  2. Математического сопроцессора не будет.

  3. RAM – 1МБ статической памяти.

  4. Клавиатура – использовать простую Bluetooth-клавиатуру из Фикспрайса.

  5. Разъемы ISA не делать. Все, что вставлялось в слоты, сразу припаять на материнку.

  6. Видеокарта MDA тоже самодельная в собственном разъеме, а потом VGA на материнке.

  7. ЖМД (HDD) – CF-card.

  8. ГМД (FDD) – эмулятор на флешке.

  9. COM-мышка.

  10. USB-флешка.

  11. Печатной платы не будет, все навесным монтажом.

Исходный  план был не совсем такой, но в процессе пришел к нему.

Видеокарта MDA

Сначала сделал видеокарту MDA. На отдельной плате. Карта задумывалась как тестовая для использования только в процессе отладки.

Оригинальная MDA карта в стандартном режиме показывает алфавитно-цифровую картинку 25 строк по 80 символов. Частоты синхронизации совершенно телевизионные, поэтому современный ЖК-монитор почти точно откажется показывать такой сигнал. Необходимо рисовать его в более современном формате.

Чтобы решить проблему совместимости, решил изменить размеры знакоместа и поместил каждый символ в матрицу 8х9. Примерно как на ZX-Spectrum, т.е. совершенно нормально читаемые символы, хотя и не такие симпатичные как в настоящем ХТ. Картинка получилась размером 640х225. Прочерчиваем каждую строку два раза и получаем на выходе 640х450.  Почти идеальные 640х480. И пиксельная частота примерно 24 МГц.

Оригинальная MDA карта содержит на борту еще и LPT разъем для подключения принтера – это сразу в корзину. Есть ряд dip-переключателей для настройки режимов – это тоже исключил. Будет только один стандартный режим.

Сердцем настоящей MDA является видеоконтроллер  Motorola 6845, который уже не так-то просто найти. Да он не очень-то и нужен, если планируется совершенно неродной формат изображения.

Вместо этого используются две ПЛИС EPM3064. Одна занимается рисованием картинки, а вторая управляет отображением курсора и сообщает по запросу CPU байт статуса видеокарты.

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

В остальном ничего примечательного. Картинка из кода символа и кода атрибутов формируется на дискретной логике и отправляется в монитор.  Почти как в Радио-86РК.

В итоге поучилась вот такая конструкция:

Видеоакарта MDA

Видеоакарта MDA

Клавиатура.

Родная клавиатура IBM XT – это совершенно особенная конструкция. По формату передачи данных похожа на PS/2, но это не она. Купить такую новую уже просто невозможно. Можно использовать что-то более современное, но с конвертором. Или сделать совсем по другому.

Как я уже писал, используется клавиатура Bluetooth из Фикспрайса – самое бюджетное решение без проводов. Чтобы подключиться к ней, пришлось приобрести ESP-32S, который в разы круче всего остального железа. Если бы я делал эмулятор, то можно было бы почти все в нем и реализовать.

Bluetooth – это целая вселенная, погружаться в которую у меня желания не было. Я взял за основу этот проект (спасибо turgu1 из Канады) и доработал под свою задачу. Коды нажатых и отпущенных клавиш принимаются  ESP-32S, перекодируются в соответствующие коды клавиатуры  IBM PC и через  com-порт выкидываются в другой микроконтроллер, о котором будет написано дальше.

Каких-то проблем тут не возникло. Я дольше разбирался, как заливать прошивку в ESP, чем делал саму прошивку.

Материнская плата.

Далее я буду использовать краткие наименования микросхем типа «8088» просто чтобы было меньше букв. Желающие смогут легко найти их описание в сети.

Для материнки заказал большую макетную плату. Размером почти А4.

За основу схемы взял оригинальную конструкцию. Но почти все немного или сильно изменил. Прежде всего, добавил микроконтроллер STC8H8K64U (далее просто STC), который заменил тактовый генератор 8284 и формирует своими таймерами  частоты для CPU и для системного таймера 8253. При этом на ЦПУ поступает примерно 8.63 МГц при стандарте 4.77 – почти в два раза быстрее.

Но это не все. Еще STC выполняет функцию буфера клавиатуры, сообщая CPU коды нажатых и отпущенных клавиш, которые принимает через com-порт от ESP-32S. При этом он еще занимается автоповтором нажатых клавиш, который в XT реализован аппаратно внутри клавиатуры.

Так же STC формирует канал DMA 2, который нужен для работы с гибкими дисками.

ROM (BIOS). Сначала я хотел весь код BIOS хранить в прошивке STC  просто как статический массив байтов и загружать его в RAM при старте используя режим DMA. Это позволяло хорошо сэкономить на количестве микросхем. Но когда решил делать полноценную модель 5160, пришлось пойти по классике и вынести BIOS в отдельное ROM. Слишком большой объем 64 кБ – это вообще вся память STC.

В качестве этой памяти для хранения BIOS используется W25Q32Q32VB. Емкость 1 МБ, подключается к STC по SPI. Вообще, там не только BIOS, но и ПЗУ (драйвера) контроллеров жесткого и гибкого дисков и видеокарты. Они тоже загружаются в память перед стартом.

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

CPU включен в минимальном режиме, потому что в схеме нет математического сопроцессора, поэтому в схеме нет и 8288, процессор по сути сам рулит всеми устройствами.

При старте компьютера STC включает режим DMA, забирая управление на себя. Очищает экран, пишет свое приветствие и производит легкий тест RAM. Просто пишет и читает несколько байт в каждую микросхему. Тестирует контроллер ГМД, загружает в память коды BIOS и драйвера.

Загрузка

Загрузка

После этого управление возвращается процессору и дальше все происходит как обычно в PC/XT.

Здесь и начались первые настоящие трудности. Конструкторы IBM  заложили в BIOS алгоритм довольно подробного самотестирования при старте. Значительно серьезнее чем, например, в Spectrum’e. Это объяснялось тем, то РС предлагался прежде всего для бизнеса, и IBM должна была гарантировать, что если компьютер включился, то он исправен и не принесет ущерба неожиданным сбоем. Этот тест моментально блокировал загрузку моей конструкции.

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

Чтобы было понятно, это выглядит примерно так:

Снимок работы компьютера

Снимок работы компьютера

Как оказалось, CPU не находил контроллера DMA, который я сначала совсем исключил из схемы, и выполнял команду HLT, т.е. просто останавливался. Я заменил HLT на NOP и теперь тест стал падать на проверке контрольной суммы ROM (логично). Пришлось обойти и эту проверку.

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

Загрузка с ошибками

Загрузка с ошибками

Здесь видно сразу три проблемы.

301 – нет клавиатуры

80000 FF 201 –  проблема с RAM.

Все строки подчеркнуты – мой MDA неправильно интерпретирует байты атрибутов символов, ошибочно думает, что надо подчеркивать.

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

Ошибка клавиатуры решилась исправлением кода в STC, в RAM был непропай (после этого появился тест RAM  на этапе старта).

Постепенно все проблемы были решены или обойдены и мой ХТ издал всем знакомый одиночный бип и загрузился как положено:

Basic

Basic

Т.к. в системе нет никаких дисков для загрузки, то управление передается встроенному Basic от Билла Гейтса. Получился такой чёрно-белый вариант Spectrum или Радио-86РК на максималках. Можно было что-то кодить. А если добавить проводков, то и сохранять программы на магнитофоне.

Print a+b

Print a+b

На этом этапе выглядело все это так:

Первый вариант

Первый вариант

Микросхемы с радиаторами – это КР580ИР82 / ВА86. Я их выбрал потому что они продаются за копейки и имеют удобное расположение выводов. Но, как оказалось, они очень сильно греются при работе. Потом я поменял их на более «холодные». На MDA-карте тоже стоят 4 штуки и без радиаторов. Никаких проблем при этом нет. Только горячие очень.

Еще здесь видно первый вариант  BIOS в обычной ПЗУ, потом я его убрал.

HDD (ЖМД)

IBM PC/XT из коробки умеет работать с ЖМД. Разумеется речь о ЖМД 80-х годов прошлого века. Любой современный накопитель будет непосильной проблемой для XT.

Для подключения ЖМД необходим специальный контроллер, который вставляется в свободный слот ISA.

Но есть вариант проще. CF-карта имеет разъем почти идентичный IDA – это такой разъем под широкий шлейф, уже давно не применяется, но все это можно спокойно купить.

Среди любителей ретрожелеза давно известен проект Сергея Киселева. Можно подключить CF-карту к XT в качестве ЖМД.

От этого проекта я взял только код ROM и общую идею. Сергей предлагает свой контроллер как универсальный модуль для установки в любой PC. Поэтому там есть переключатели для настройки конфигурации под конкретную машину. Мне это не было нужно, потому что я делал этот модуль встроенным в материнку. Так же я совсем отказался от ROM и весь его код положил в ПЗУ STC. Таким образом, и без того простая схема контроллера стала совсем уж примитивной. Она вся на этой картинке:

HDD

HDD

Разъем под CF-карту специально сделан на самом краю, чтобы потом можно было легко извлекать карту через прорезь в корпусе. Я использовал карту на 32 МБ. Невиданная роскошь по тем временам. А потом вообще поставил 250 МБ. Эта конструкция запустилась сразу без отладки и порадовала меня такой картинкой:

Загрузка с HDD

Загрузка с HDD

Как видно, CF-карта корректно распозналась, но это и почти все. Логическим анализатором я установил, что с карты нормально считывается загрузочный сектор (MBR), управление передается ему и на этом все валится. После нескольких неудачных попыток пройти дальше XT выдает сообщение об ошибке.

Проблема была ожидаемая и заключалась просто в том, что карта была отформатирована на современном ПК непонятным для XT образом. Нулевой сектор всегда нулевой, поэтому MBR читается без проблем, а дальше XT просто не может найти на диске нужный сектор. Я потратил немало времени, пытаясь хоть как-то установить MS-DOS на карту так, чтобы XT смог ее увидеть, но все оказалось бесполезно.

Решить проблему можно было только имея работающий ГМД.

FDD (ГМД).

Сначала я вообще не собирался делать FDD. Уже давно прошли те времена, когда FDD был нормой для конфигурации ПК. Но оказалось, что правильно отформатировать CF-карту для работы в качестве жесткого диска можно только если загрузиться с ГМД.

Сейчас даже просто пойти и купить сам привод с разъемом под шлейф скорее всего не получится. Да и за дисками придется побегать. Но к счастью наши друзья из Китая придумали замечательную штуку, которая позволяет эмулировать привод дисков на обычной флешке:

Эмулятор FDD Gotek (картинка из Интернета)

Эмулятор FDD Gotek (картинка из Интернета)

Сам контроллер тоже «эволюционировал» с тех времен, когда это был отдельный большой модуль для ISA разъема, и теперь практически целиком помещает в одной микросхеме M82077 или PC8477B. Нужен только дешифратор портов для того, чтобы CPU мог обратиться к FDD. Это одна дополнительная небольшая микросхема. Поддержка FDD уже встроена в BIOS и не должна вызывать проблем.

И вот тут меня ожидал сюрприз. FDD не работает без DMA. Такая реализация в PC. А я поначалу вообще не хотел делать DMA, потому что, если нет ГМД, то он нужен только для регенерации динамической оперативной памяти, а память я поставил статическую.

Раз уж ГМД возвращался в конструкцию, пришлось эмулировать канал DMA 2 в STC, потому что STC уже реализует DMA при старте.

Была только одна проблема. Я использовал STC8H8K64U в ретро-корпусе на 40 ног, которые уже даже не выпускают, но еще продают. И почти все эти 40 ног уже были задействованы. Подключать FDD было просто некуда.

Самым простым решением было заменить STC. Я взял точно такой-же, но уже в корпусе TQFP-64. Это абсолютно тот же самый чип, но у него выведено больше портов. Даже прошивку менять не пришлось. Только припаял на это же место другую микросхему. Все-таки макетная плата – это удобно.

Было – стало:

Замена STC

Замена STC

Как видно, тут добавился куллер. Я их заказал, когда увидел как греются буферы КР580, и потом прикрутил, но и без них нормально.

Новая STC запустилась без проблем. Бонусом получил возможность загружать родной BIOS без корректировки. К тому времени подъехали другие детали, и на материнке появился контроллер FDD:

Контроллер FDD

Контроллер FDD

Микросхема контроллера не новая, но их уже наверно не производят. Микросхема с номером 23 на фотографии – это дешифратор портов. Таким образом, все детали контроллера FDD поместились на этой картинке. За основу взял другой проект Сергея Киселева только без com-порта, но, справедливости ради, подключение контроллера совершенно типовое как по даташиту. Проект Сергея помог мне просто понять, как это устроено.

Сразу это все не заработало. Микросхема контроллера оказалась неисправной и пришлось покупать другую.

Хотя родной BIOS поддерживает FDD, для использованного микроконтроллера FDD все же лучше подходит специальное расширение BIOS все того же Сергея. Это расширение стандартного BIOS позволяет работать с дисками любого формата.

Код этого расширения аналогично BIOS заливается в RAM при старте.

Долго ждал эмулятор накопителя, и, когда он приехал, запустил все. На экране получил такое:

Старт контроллера FDD

Старт контроллера FDD

Я пробовал разные образы загрузочных дисков, какие нашел в Интернете. Все зависали после старта операционной системы. Ошибка оказалась до обидного простой. Просто заменил в коде STC в одном месте “ &” на “ |” и все заработало.

Найти в Интернете образы дисков с MS-DOS не так уж сложно. Сложнее найти нормальный образ, пригодный для установки. Большинство ориентированы на то, чтобы быть самостоятельными загрузочными дисками для постоянной работы. Можно конечно всегда сделать «format c: /s» и превратить диск C в загрузочный с установленной ОС MS-DOS, но это будет крайне минимальная конфигурация всего из четырех основных файлов. Работать в такой системе можно, но это не будет полноценная система. Придется вручную копировать на диск остальные фалы.

После ряда экспериментов удалось установить на жесткий диск MS-DOS 4.01.

Добавил к системе свой любимый с 90-х годов Volkov Commander и получил такой результат:

Volkov Commander

Volkov Commander

Интересно, что если вставить теперь CF-карту, которая отформатирована в XT, в USB-адаптер, то современный ПК ее вообще не видит. Первоначальный план использовать ее как флешку для переноса файлов не сработал. Теперь понятно, почему в Интерне нет образов жестких дисков XT. Без каких-то хитрых приемов их просто не получится развернуть на CF-карту. И видимо прочитать тоже не получится, чтобы сделать образ. Все дело в нестандартной геометрии разметки «поверхности» диска.

Для переноса файлов оказалось проще использовать запись в образ гибкого диска любой доступной программой, которая понимает образы *.imo или *.img .

На этом этапе компьютер выглядел уже так:

Общий вид с дисками

Общий вид с дисками

Ну и конечно теперь можно было попробовать поиграть во что-нибудь. Игры – это отличный тест системы. С MDA картой сильно не разгонишься, но кое-что можно попробовать. Вот, например, Тетрис:

Tetris

Tetris

Продолжение будет завтра. Уже написано.

UPD:

Продолжение здесь.

Показать полностью 17
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества