Ядро PC XT в ZXDOS+


После появления новой прошивки для ZXDOS+ появилась возможность использования ядра PC XT (до этого было только для ZXUNO и ZXDOS без плюса) для эмуляции IBM PC/XT. Реализация данного ядра основана на проекте Next186 и предоставляет пользователю следующие возможности:

  1. Процессор 30 Мгц (и для 32 бит 166.66 Мгц шину данных)
  2. Память 64 MB DDR3 RAM (DDR3-1333 333.33 МГц)
  3. Поддержку звука (в том числе и Adlib)
  4. Поддержку PS/2 клавиатуры и мыши

В принципе, интересный вариант для запуска разнообразного ПО написанного под DOS, в том числе множества древних игр. Так что данное ядро добавляет ZXDOS+ очередную грань ретрогейминга. Этим-то мне и нравится данное устройство, поскольку оно не только даёт возможность его использования в качестве ZX Spectrum и даже ZX Spectrum Next, но и в качестве множества 8-битных игровых консолей того времени, а сейчас ещё и полноценного IBM PC (хоть и XT).

Установка

С использованием данного ядра у меня сразу начались сложности, оно оказалось очень капризным и в инструкции отнюдь не всё написано. Но начнём с начала — про то что написано. Во-первых, обязательно требуется скоростная (SDHC) карта памяти. И это точно так, при использовании «тормозных» SD-карт на них не видится BIOS для загрузки ОС. Далее. Раздел для ОС обязательно должен быть первым (ну это понятно) и отформатированным в FAT16. Немного жаль остающегося места на SD-карте, потому что после 2 Гб ещё остается большая его часть. Я пробовал создавать и первичные разделы и дополнительные, но ядро PC XT их не видит, поэтому придётся ютиться в этих 2 Гб. Хотя это, конечно же, преувеличение, поскольку сложно представить какими программами и играми для IBM XT можно забить такое пространство. Во время существования подобных устройств НЖМД (накопители на жестких магнитных дисках) могли быть размером и в 2 Мб. У меня даже для первого Pentium в сборке шёл винчестер на 40 Мб, которого тогда уже не хватало, но если б мне тогда дали 2 Гб — я бы и не знал — на кой мне столько места. Остальное же место можно использовать разве что для размещения программ для ZX Spectrum, поскольку существуют оболочки для esxDOS, которые вполне могут использовать не только первый раздел на SD-карте, а сам esxDOS можно разместить и на первом разделе (в мануале упоминается только про конфликт с ядром MSX, поскольку используются одинаковые имена файлов).

Во-вторых, на SD-карту надо записать BIOS: Next186_BIOS_zxdos_ddr3.COM. Но не просто записать файл, а нужно содержимое файла записать на определенные сектора диска. У меня с этим возникли проблемы в Windows, поскольку предложенная инструкцией утилита HxD (Hex editor for Windows) у меня хоть и запускалась, зато при попытке открыть диск сразу выдавала ошибку. Другие подобные утилиты в основном либо платные, либо не работают напрямую с диском, либо не записывают на него. Хорошо, что у меня есть ещё и Linux, с помощью которого по инструкции сразу же всё и получилось (ну там просто настолько простые команды, что не получиться просто не может). Надо просто определить название диска, на который надо записать BIOS, потом командой fdisk -l /dev/устройство определить количество секторов на нём (где устройство — это именно диск, а не раздел), а затем записать файл на диск командой sudo dd if=Next186_BIOS_zxdos_ddr3.COM of=/dev/устройство bs=512 seek=номер сектора, где номер сектора — это общее количество секторов минус 16. И да, записывать лучше в конец диска.

В-третьих, надо на первый раздел карты установить операционную систему для IBM XT. Для этого вполне подходят MS-DOS, PC-DOS, FreeDOS (я их все перепробовал — все устанавливаются и работают). Но это не такая простая задача, ведь на самом ZXDOS+ невозможно подсунуть флоппи диск для установки. А поставить DOS на SD-карту на современных ПК — это нетривиальная задача. В инструкции это подробно не расписано, но рекомендуется использовать программы виртуализации с подключением SD-карты как жесткого диска. Тут уже приходится искать способы это сделать и, например, для VirtualBox решение находится. Опять придётся поработать в командной строке (теперь уже в Windows):

  1. С помощью команды wmic diskdrive list brief получаем список устройств
  2. Далее с помощью команды VBoxManage internalcommands createrawvmdk -filename "путь до файла\sdcard.vmdk" -rawdisk "\.\PHYSICALDRIVE1" (тут название вашего устройства) создаём файл, который по сути представляет ссылку на реальное устройство.
  3. Далее запускаем VirtualBox с правами администратора и подключаем этот файл в качестве жесткого диска.

После этого можно приступать к установке ОС. Дополню, что у меня несколько раз Virtual Box во время использования данного способа выдавал ошибки по невозможности записи или чтения определенных секторов. Скорее всего, это связано с тем, что программа виртуализации должна иметь эксклюзивный доступ к устройству, а при создании тома Windows по умолчанию присваивает ему букву, а затем какое-то излишне активное приложение пытается что-то делать с этим томом. Решение — убрать с тома букву и при вторичном создании тома она уже не будет присваиваться.

Далее потребуются источники, откуда будем устанавливать ОС:

  1. Для MS-DOS можно скачать файлы отсюда. Выбираем версию 6.22 английскую (потом поясню почему), в которой три основных установочных диска и один дополнительный. Ставится на неразмеченный диск (т.е. на SD-карте должны быть заранее удалены все разделы) стандартным образом, достаточно только вовремя подсовывать «дискеты» в виртуалку.
  2. PC DOS 7 тоже можно взять с того же сайта (я брал образы от SokilOff), ставится подобным образом.
  3. FreeDOS берётся прямо с официального сайта (я брал версию 1.2 стандартный CD-образ). При установке надо прервать запуск клавишей F8 для пошагового проведения команд и отказаться от команды запускающей HIMEMX. Далее отказываемся от AUTOEXEC.BAT, выпадаем в консоль — запускаем там же его же (иначе пришлось бы вручную прогонять все его команды):
Кстати, в версии 1.3RC4 такой проблемы уже нет, так что можно попробовать и её

А теперь самое интересное. В инструкции нигде не написано, что загрузка менеджера дополнительной памяти (XMS) типа HIMEM.SYS вызывает зависание ядра PC XT:

Типа можно же догадаться, что HIMEM.SYS минимально требует 386-го процессора, а у нас максимум 286-й? Понятно это стало только тогда, когда я включил режим поочередного запуска команд (F8) и проверил что вызывает зависание. И после того, как я отключил запуск HIMEM.SYS в файле CONFIG.SYS загрузка MS-DOS прошла удачно.

Однако тут же я попал на другую проблему — моя USB-клавиатура Microsoft Digital Media Keyboard 3000, которая прекрасно работает через переходник PS/2 в остальных ядрах ZXDOS+ в ядре PC XT отказалась опознаваться. В телеграмм-канале ZXDOS FPGA (@zxdosfpga) мне предложили использовать другой вариант BIOS (SCANCODE_SET_2), но оказался глючным (что и было признано) — опознаваться клавиатура стала, но все символы вводились дважды и оказались перепутаны: вместо 1 набиралась буква «u», вместо 2 буква «a» и т.п. Пришлось приобрести настоящую PS/2 клавиатуру — A4Tech X7-G700 Black PS/2:

Обратите внимание на QAOP вместо WASD 🙂

Выбор на самом деле очень невелик. Либо это совсем дешевые клавиатуры, которые непонятно из чего сделаны, либо дорогущие игровые монстры. Но до этого я уже брал укороченную клавиатуру из той же серии для игр в Windows: A4Tech X7-G100 Black USB, которая себя вполне прилично показала, несмотря на свою низкую цену, так что выбор был сделан легко.

Ну и в завершение данного раздела. Чтобы не устанавливать DOS вручную, можно воспользоваться уже проделанной работой: на форуме ZXDOS+ есть страница с выложенными образами: sdcard_pcxt_4GB_2020_05_16.rar и sdcard_pcxt_4GB_2021_04_06.rar. Их можно скачать, распаковать и записать на SD-карту (например, с помощью RMPrepUSB). На них уже проделана установка ОС (вроде как PC DOS) и размещены некоторые программы и игры, можно сразу пользоваться.

Настройка памяти

Без использования дополнительных менеджеров памяти у пользователя IBM PC останется пресловутые 640 Кб оперативной памяти, коих по Биллу Гейтсу хватит всем.

Но у нас-то памяти гораздо больше, жалко если она окажется незадействованной. Но ни HIMEM.SYS в MS DOS, ни HIMEMX.SYS в FreeDOS не работают, хорошо что в FreeDOS есть менеджер дополнительной памяти XMS для 286 процессоров: FDXMS286 и его можно подключить в CONFIG.SYS командой DEVICEHIGH=FDXMS286.sys INT15=128

Видно, что после запуска драйвера MS-DOS располагается в HMA, освобождая нам драгоценные килобайты памяти в тех самых 640 Кб.

Далее можно установить драйвер расширенной памяти для 286 PC: EMM286 с помощью команды в CONFIG.SYS: DEVICEHIGH=EMM286.exe 2048

После этого у нас уже появляется EMS память:

Ну и добить это всё можно с помощью эмуляции 386 процессора, для этого есть драйвер EMU386. Установить его можно опять же командой в CONFIG.SYS: DEVICEHIGH=EMU386s.exe Это даст возможность запускать программы, которые не проверяют тип процессора и работают только в реальном режиме. На самом деле, я не встречал подобных программ, так что не могу однозначно советовать.

Русский язык

Поддержки русского языка и вообще любых кодировок скорее всего нет. Я перепробовал и MS DOS, и PC DOS, и FreeDOS — всё равно оставались крякозябры. С одинаковыми настройками запускалась SD-карта в виртуальной машине и в ZXDOS+ и результат был одинаков: в виртуалке всё нормально, в ядре PC XT — некорректные символы вместо русских букв:

В телеграмм-канале подсказали, что это может быть из-за того, что драйвер VGA нестандартный (тут указано что VGA: A custom VGA core which implements the text mode 3h 80x25x256, the MCGA graphic mode 13h 320x200x256, VESA graphic mode 101h 640x480x256, mode 12h 640x480x16 planar, mode 0dH 320x200x16 planar, ModeX. Unlike the standard VGA, the mode 13h can support 8 hardware pages.) Возможно из-за этого команда загрузки шрифтов ни к чему не приводит. Это лишает нас возможности использовать русифицированные программы. Но к счастью (или к сожалению) из тех что запускаются на ядре PC XT их очень немного.

Использование

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

Что касается всяких расширений памяти — тут вопрос тонкий. Оно работает и увидеть это можно, как минимум, на скриншоте запуска Wolfenstein 3D:

Но я так и не смог найти ни одной игры, которая отказалась бы запускаться на базовой памяти и запускалась бы только с XMS и EMS. Возможно, такие и есть под 286 процессор, но мне они не попались. При этом драйвер расширенной памяти отнимает основную, поэтому некоторым играм не хватает именно основной и они не грузятся. Поэтому в CONFIG.SYS весьма актуально наличие меню, позволяющего выбрать — какой вариант загружать: только базовые 640 Кб, XMS или EMS.

Гораздо больше программ, которые требуют именно 386 процессора и их не устраивает его эмуляция. И ещё больше тех, которым кроме 386 процессора нужен ещё и защищенный режим. Они все сразу вываливаются с ошибкой: protected mode available only with 386 or 486

Так что если вы хотели поиграть в Warcraft, Quake, Settlers II, Z и прочие крутые и замечательные игры — то тут облом, 286 процессор и реальный режим — вот наш максимум.

Но унывать не стоит, никто и не обещал нам возможности Pentium 🙂 Вполне достаточно хороших игр, в которые можно рубиться часами. Например, Prince Persia и первая, и вторая часть:

Я, кстати, в 90-е прошёл порт Принца Персии на ZX Spectrum и он абсолютно также играбелен, но версия для IBM PC мне всё-таки нравится больше — в ней гораздо больше атмосферности.

Зато Laser Squad я предпочитаю на ZX Spectrum из-за его более ярких цветов (плюс конфликт атрибутов в подобных играх не так сильно выражен из-за ходьбы по квадратам).

А вот, кстати, Hero Quest, в который я играл часами на ZX Spectrum:

Тут у IBM PC сильное преимущество: и графика и музыка однозначно круче. На ZX Spectrum вся графика практически монохром, плюс всё очень мелкое и пиксельное. И послушайте музыку в начале игры — на Спектруме явно не хватает таких низких частот. Так что можно переиграть ещё разок и под IBM PC/XT.

Но вот для Space Crusade, я, пожалуй, всё-таки выберу Спектрум для игры, несмотря на неплохую графику в версии IBM PC:

Outrun — ещё один представитель тех игр, в которые я играл на Спектруме. Тут опять же — графика более красочная, несмотря на более тусклую палитру, поскольку на Спектруме опять же давит монохром.

Для любителей стратегий — Centurion: Defender of Rome. Часами сидели в учебных классах университета.

Невозможно пройти мимо Kigs Bounty — «прародительницу» игр серии Heroes of Migth and Magic.

А вот и Kings Bounty 2 (обратите внимание — на русском языке):

Эк меня занесло-то!

А вот и прикол с видеорежимами в начале Kings Bounty 2:

И такое тоже бывает в разных играх и по разному. В Dyna Blaster при старте экран просто начинает дублировать справа своё продолжение, но в самой игре всё отлично — квадрат-квадратом:

Короче, можно перечислять и перечислять. Наверное, тысячи игр выходили для IBM PC/XT и десятки из них до сих вполне играбельны, несмотря на свой почтенный возраст. Многие жанры уже просто вымерли, так что приходится откапывать «динозавров», чтобы вспомнить — а как оно вообще было.

Эмуляторы ZX Spectrum

Напоследок я ещё пробежался по эмуляторам Спектрума под DOS, не корысти ради, а интересу для. Чтобы просто проверить — а работают ли они и как сказывается это железо на них (всё-таки они сильно заточены под всякие аппаратные нюансы). И сразу выяснилось, что большинство эмуляторов под DOS требуют защищенный режим и не запускаются.

Хоть как-то заработало у меня в итоге только два эмулятора: один из них от Лунтера (Z80), которому, кстати, потребовалась зачем-то EMS-память. И работал он только в EGA-режиме. Но толком не мог загрузить практически ни один мой снэпшот. Что-то иногда загружалось, но даже то, что загружалось было с артефактами на экране:

Зато не тормозило — рейтинг производительности эмулятор выдавал около 274%.

И ещё работал (и даже с музыкой) первый отечественный эмулятор от Константина Углекова: UKV. Но он оказался очень медленным на данном железе и работал в режиме slow-mo. На скриншоте ниже запечатлено, как он попиксельно отрисовывает каёмку у главного меню 128 Кб Спектрума:

Даже не надо пытаться поймать момент, спокойно можно сделать несколько фоток в момент отрисовки

Зато загружаются все игры, и в них можно даже вдумчиво поиграть, попивая кофе между нажатиями клавиш. Этакий эстонский вариант.

Программирование

А что мы всё об играх, да об играх? Данное ядро всё-таки не совсем игровая приставка, это всё-таки целый персональный компьютер! На нём можно не только запускать программы, но ещё и писать их. Я попробовал установить Borland Pascal — он вполне себе установился и заработал (конечно же, без компонент для защищенного режима).

А моя игра (Cross Ways), написанная лет 20 назад, отличненько откомпилировалась:

И запустилась так, как будто ничего за эти годы не поменялось:

Итог

Ядро PC XT оказалось вполне рабочим на ZXDOS+. После всех пертурбаций с установкой, дальше можно спокойно пользоваться и запускать любимые игры детства и юношества. Кроме игр можно также пользоваться ПО и даже программировать на Pascal и С, хотя это вряд ли кому-то сейчас захочется. При этом ничего не шуршит вентиляторами и не глючит из-за старых электронных компонент. Т.е. это неплохая альтернатива покупке подержанного IBM PC/XT на барахолке и попытке его использования. Я уж молчу про размер: ведь ZXDOS+ размером с 3-дюймовый дисковод, а огромный ящик IBM PC ещё надо где-то размещать.

Единственный минус — не работает русский язык в DOS. Сомневаюсь, что это когда-нибудь пофиксят, ибо для англоязычной аудитории это не имеет никакого значения. Ну и надо понимать, что, безусловно, хотелось бы полноценной реализации IBM PC/AT с хотя бы 386 процессором, но ZXDOS+ чисто аппаратно это не потянет. И если нужно играть в более современные игры для DOS, то надо либо устанавливать этот самый DOS на современные ПК (я, например, использую свой мини-ПК), либо использовать эмуляторы, типа DOSBOX, либо искать более продвинутую железную реализацию на FPGA.

Ядро PC XT в ZXDOS+: 2 комментария

  1. Более продвинутая реализация- это в ядре для MiSTer — приблизительно sx486 на 100МГц, вполне запускается Win98.
    Но я сейчас не об этом. ZXDOS+ скорее всего тоже существует в нескольких вариантах, как вот этот, с памятью DDR3 и вариант с памятью SDRAM, что при использовании в ядрах этой памяти лишает их всякой совместимости между собой):
    А так то обзор хороший, обстоятельный. Спасибо.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s