Вернуться на ГЛАВНУЮ
страницу
Вернуться к СПИСКУ СТАТЕЙ
Автор: Максим Тимонин aka Максагор
Дата: 14.10.2004 г.
Примечание: опубликовано в газете "Абзац" №21
Два года назад в 10-м номере газеты «АБЗАЦ», вышла моя статья «TR-DOS и винчестер - братья навек?», где поднималась проблема вопиющей отсталости ОС TR-DOS. Она, будучи жестко вшита в ПЗУ, не развивалась практически с момента создания и не учитывает, кроме дисковода, все множество настоящих и потенциальных устройств внешней памяти, самым желанным из которых (и на сегодняшний день самым распространенным после дисковода) является винчестер. Это особенно сейчас актуально, когда для хранения софта Спектрума, меньше чем сотни полторы дискет (носителей весьма ненадежных) запасать не стоит.
Тогда, рассмотрев различные варианты, было принято решение идти по пути SMUC на Скорпионе (в программном плане, конечно). То есть путем переделки TR-DOS таким образом, чтобы эта система через точку #3D13 (правда, из-за этого не идет очень большое количество программ с турболоадерами и прочими дисковыми изворотами) могла обращаться не к флоппи-диску, а к винчестеру, который представал бы перед системой как коллекция виртуальных TRD-дискет, по 640 Кб каждая. При этом существовала бы возможность путем дополнительно встроенных в TR-DOS средств назначать диск реальным или виртуальным, а также подключать к приводу тот или иной TRD-образ из коллекции на винчестере.
Но после начала работы над проектом многое предстало в другом свете, в том числе и благодаря постепенно копившемуся опыту. В результате первоначальная концепция претерпела сильные, можно даже сказать, радикальные изменения. Мысль программно повторить в общих чертах SMUC была признана нерациональной, накладывающей сильные ограничения на использование винчестера, который окажется сильно привязанным к одной ОС, которая, несмотря на доработку, намного совершеннее не станет. А вот универсальность применения винчестера пострадает сильно.
Новая же концепция предусматривала возможность вообще отвязать TR-DOS от каких-либо носителей, расположив образ виртуальной дискеты в верхней памяти, и подсоединяя ее к нужному логическому приводу. Таким образом, винчестер от TR-DOS не зависит (впрочем, как и дисковод) и он может использоваться любой другой системой (на сегодня это CP/M и iS-DOS). То есть практически все ПО TR-DOS можно будет хранить в виде файлов *.TRD и *.SCL под настоящими операционными системами на винчестере или любом другом носителе (например, CD или USB-FLASH, если ее подключат). А уж эти системы будут усилиями собственных утилит загружать файлы *.TRD в виртуальную дискету, подключать ее к логическому драйву, после чего передавать управление TR-DOS, которая с этой дискеты загрузит все, что надо. А по возвращении в систему (да, будет сделана возможность вернуться почти из любой TRD-программы!), эта же утилита сможет записать изменения на виртуальную дискету, если они были (например, сохраненное состояние игры, или новый рисунок из ART-STUDIO), обратно на винчестер в исходный или новый TRD-файл.
Правда, есть один недостаток. Для такой системы требуется Спектрум с памятью не менее 1024 Кб. Но тут выручает статистика, которая говорит, что большинство ZX компьютеров, имеющих контроллер винчестера - это Профи 5.x, KAY-1024, ATM-turbo 2(+), Спринтер и Скорпион. При этом, за исключением Скорпиона (у которого проблема доступа TR-DOS к винчестеру как-никак, но решена) с 256 Кб ОЗУ, практически у всех остальных компьютеров количество памяти как раз 1024 Кб. ATM-turbo 2 (без плюса) - 512 Кб, но его легко можно доработать до 1024 Кб, а KAY 256 с винчестерами мало , а у Спринтера - вообще 4096 Кб. Остальным (за исключением Пентагонов с напаянными 1Mb SIMM’ами) придется «курить» в сторонке, к сожалению. Повторюсь, конечно, это недостаток, но не фатальный. Да и когда реальный прогресс обходился без жертв? У меня самого и занимающихся непосредственной разработкой друзей стоят ATM-turbo 2+. Сама же новая концепция очень многое позаимствовала из идей, реализованных в KAY-1024, где TR-DOS доработана так, что может работать с виртуальной дискетой, и управляется все это хозяйство из-под iS-DOS. В чем же отличие нашей идеи?
Основных отличий два. Причем они существенны:
Первое: самое важное. Если в KAY-1024, также как и в SMUC на Скорпионе, связь с виртуальной дискетой доступна только по стандартной функциональной точке входа #3D13, из-за чего много программ отказывается запускаться, то у нас был выработан совершенно другой подход. Было решено реализовать не просто перехват обращений к дисководу в вышеупомянутой точке, а сделать это на низком уровне, а конкретнее, на уровне портов, к которым, как известно, можно добраться лишь опосредовано. Фактически это означало написание программного эмулятора микросхемы 1818ВГ93. И такой эмулятор был сделан. Не буду подробно его описывать. Расскажу лишь общий принцип действия. В подпрограммах ПЗУ чтения-записи вместо обращения к портам ВГ были поставлены перехватчики JR или JP (иногда перехватчики ставились не вместо обращения к конкретным портам, а вместо целых процедур), которые анализировали текущие настройки системы. Если включена реальная дискета, идет обращение к потам ВГ, если виртуальная - то работа с блоками памяти в страницах выше стандартных 128 Кб. Я, конечно, описываю все поверхностно. На самом деле там было очень много «подводных камней» и преград. Но как результат, эмулятор готов, хотя пока только под ATM-turbo 2+, на котором все и создавалось. Ниже приведен скриншот заставки новой TR-DOS. Версия 1.66 не означает, что по сравнению со стандартными 5.03/04 система «прыгнула» в древность. Здесь сообщается версия эмулятора ВГ, ядро которого является особой независимой частью ОС (располагающейся в ранее свободной части ПЗУ), связанной со стандартной системой лишь перехватчиками портов и некоторыми подпрограммами.
Степень эмуляции довольно высока - идет более 90 % программ (например, Черный Ворон, НЛО-1 и НЛО-2, Звездное наследие, Real Commander, Honey-Commander и пр., даже музыкальные загрузчики (хотя подтормаживают и музыка соответственно подвывает)). Но есть и потери: программы, пытающиеся определить наличие диска в дисководе, а также имеющие особо хитрые ксорки, «завязанные» на содержимом ПЗУ TR-DOS (вернее, на временные интервалы исполнения ее подпрограмм), работать отказываются. Это, к примеру, Винни Пух, Best View, RDS. Причем RDS в новой системе не идет даже с реального диска, так как она оказалась слишком чувствительна к изменению временных характеристик подпрограмм TR-DOS. Конечно, программ, не идущих под такой TR-DOS не много, и их процент небольшой, находящийся в пределах, оправдывающих нововведения. Но все-таки, хотелось бы как-то избежать и этих жертв. С этой целью в ATM-turbo 2+ (где можно установить любое ПЗУ вплоть до 1 Мб) будет две прошивки TR-DOS - новая и стандартная. Последняя будет «висеть» всегда по умолчанию и вызываться как обычно из основного меню. А новая будет использоваться только при запуске TRD из-под других систем, которые будут ее включать (и выключать обратно) через специально сделанную точку входа. Пользователям других клонов, если они не смогут поставить расширенное по объему ПЗУ, придется довольствоваться какой-то одной версией, или если на их компьютере есть КЭШ, загружать новую прошивку туда.
Второе отличие тоже важное и касается выхода из TRD-программ обратно в систему. В KAY-1024 приходится жать «Сброс», после чего заново загружать ОС. Чаще всего это неудобно. У нас же будет использован позаимствованный из ATM резидент-перехватчик кнопки «сброс», который располагается в начальных адресах той страницы ПЗУ, куда передается управление после сброса (а также обязательно по начальным адресам TR-DOS). Он продолжит нормальную процедуру отработки сброса только после того, как по специальным меткам определит отсутствие в специально отведенных страницах верхней памяти какой-нибудь резидентно висящей (а точнее, специально загруженной) программы. Если же такая программа будет найдена, то управление передастся ей. По такому принципу уже работает на ATM оболочка HONEY-Commander. Уже ясно, что в качестве резидента можно сохранить и вызвавшую TRD-образ систему, со всеми ее настройками. Кроме перехватчика кнопки «сброс», сделан еще и перехватчик кнопки «MAGIC». Теперь можно пользоваться как стандартной процедурой ПЗУ, так и загрузить в ОЗУ свой обработчик NMI.
Планировалось и третье (собственно из-за него мы так задерживали выход прошивки, хотя сам эмулятор ВГ был готов где-то полгода назад), только для ATM-turbo 2(+), нововведение. А именно перехват, по тому же принципу, что и в эмуляции ВГ, дополнительных портов ATM2+, которые также лежат в области ПЗУ TR-DOS и доступны лишь косвенно. Прежде всего, нас интересовала возможность перехватывать порт диспетчера памяти и организовать на этой основе в TR-DOS систему внешних (в ОЗУ) драйверов управления ОЗУ (например, грузить не реальные страницы, а участки памяти с винчестера и т.д.). Но в связи с проблемами на работе и вообще отсутствием свободного времени у основного кодера, Юры UKMS[z], было решено отложить эти планы в долгий ящик, а готовую прошивку выпустить в свет, иначе она этого света не увидит еще долго. Многие спектрумисты и так уже неоднократно спрашивали, когда же все будет готово. Поэтому сейчас производится итоговая сборка и проверка всего сделанного в единую прошивку, и, думаю, что в самом ближайшем времени, она появится для широкого доступа.
Как итог, кратко опишу, что это будет за прошивка. Рассчитана она будет ТОЛЬКО под ATM-turbo 2(+) с памятью 1024 Кб. Делать локализацию под другие клоны у нас сейчас нет возможности и времени. Однако для утешения к ней будут прилагаться описание и исходники, чтобы желающие смогли сами адаптировать прошивку под себя. В ATM такая прошивка будет устанавливаться, и работать без всяких переделок и доработок компьютера - воткнул перешитую ПЗУ в панельку, и все заработало. А в других клонах (кроме, разве что, Спринтера), необходима небольшая доработка - нужно будет сделать порт чтения страниц памяти #7FFD. Дело в том, что, работая с виртуальной дискетой, эмулятор активно использует переключение памяти. Но в ATM2+ это можно сделать (и делается) при помощи дополнительных портов, при временно отключенном порте #7FFD, соответственно, не меняя последнего значения, записанного туда программой пользователя. При возвращении из ПЗУ порт #7FFD опять включается и пользовательская программа даже не догадается, что без ее ведома «щелкались» страницы памяти. Эта же возможность есть и у Спринтера. А вот у Профи и Кая при переключении страниц, помимо дополнительных портов обязательно участвует и порт переключения страниц #7FFD. В результате перед эмулятором ВГ встает задача предварительного программного определения текущей страницы ОЗУ, что возможно, но требует слишком много процессорного времени. В результате нормальная эмуляция становится невозможной и список не работающего под этой прошивкой ПО возрастает на несколько порядков (почти до уровня точки #3D13). Реализация же возможности прочитать порт #7FFD (напайка 1-2 микросхем) позволит избежать этой проблемы.
Итак, была проделана огромная работа, позволившая решить проблему TR-DOS, которая из-за своей архаичности и тесной привязки к железу флоппи-дисководов тормозила развитие Спектрума, в том числе и в плане использования винчестера. «Виртуализация» TR-DOS наконец-то ее от этого железа оторвала и помогла решить эту проблему.
P.S. Так как этот проект некоммерческий, прошивка будет выложена на сайте http://atmturbo.narod.ru для свободного скачивания. После выхода прошивки, она будет поставляться в комплекте с собранными платами компьютера ATM-turbo 2+ (v7.10).