Проект: опишите свой дисковый интерфейс — Mac Buster

Subliminal Extacy #03

Проект: опишите свой дисковый интерфейс

Mac Buster

Все чаще я слышу странные разговоры о «тех тупых русских, которые делают свои игры и демки только под дисковый интерфейс „Beta 128“, все их релизы „защищены“, и им плевать на другие дисковые системы».

Почему я считаю это странным? Во-первых, странно, что большинство из тех, кто так говорит, даже не знают, что бывший Советский Союз объединял более 180 различных народов. Большинству этих народов неприятно, когда их всех огульно называют «русскими», но вы этого не замечаете и тем самым оскорбляете людей.

Советский Союз объединял 15 республик, большинство из которых сейчас независимы, а некоторые хотели остаться частью России. С момента распада СССР прошло почти десять лет — у вас было достаточно времени, чтобы выучить, где находится каждая страна и как называются её народы. Во-вторых, насчет этих «защищенных» загрузчиков. Это неправда! По-настоящему защищены лишь около 5% релизов, остальные же просто собраны по схеме «монолоадера» (monoloader). «Защищенный» и «монолоадер» — далеко не одно и то же.

«Защищенный» означает применение хак-стопов для предотвращения взлома и изменений в оригинальном релизе (некоторые странные личности любят исправлять авторский текст и вставлять собственные имена в релизы, к созданию которых не приложили ни малейших усилий). Некоторые из таких защищенных загрузчиков используют весьма интересные и неожиданные трюки — например, регистры звукового сопроцессора и контроллера дисковода (FDC), сбрасывающие содержимое, если их не вычитать за строго определенное количество тактов.

Схема «монолоадера» не имеет ничего общего с настоящей защитой. Зачем же её тогда использовать? Потому что TR-DOS (дисковая операционная система в ПЗУ контроллера «Beta 128») работает с отдельными файлами по очереди ОЧЕНЬ медленно. Позвольте мне объяснить, что такое монолоадер и как он устроен. TR-DOS требуется от 1 до 3 секунд, чтобы найти файл и начать считывать его содержимое. И дело тут вовсе не в сложной таблице FAT или BAM (в TR-DOS ничего подобного нет и в помине, все файлы пишутся последовательно, что как раз и сделало возможным существование монолоадеров). Причина кроется всего лишь в одной очень длинной задержке, добавленной ради совместимости с очень старыми дисководами (помните: «Beta 128» была создана в Великобритании еще в 1986 году). Если вам нужно загрузить более трех-четырех файлов, весь процесс может занять до минуты — то есть в пять раз дольше, чем просто последовательное считывание того же объема секторов с диска в память.

Монолоадеры появились благодаря особенности TR-DOS: при загрузке она считывает в память ровно столько байт, сколько указано в поле длины BASIC в дескрипторе файла, игнорируя остальную часть данных. Вы можете записать на диск подряд BASIC-часть программы (внутри которой обязан быть загрузчик в машинных кодах, поскольку сам монолоадер нельзя обработать средствами Бейсика), сжатую картинку, основной упакованный код и любые другие данные, а затем просто исправить поле «длина файла в секторах» в дескрипторе. Скопируйте этот первый файл на другой диск — и монолоадер готов. TR-DOS считает с диска только бейсиковские байты и запустит их как BASIC-программу. Бейсик передаст управление машинному коду, который сам догрузит и распакует экран, основной код и все остальные данные, если они есть. Таким образом мы экономим до 3 секунд на каждом блоке данных! Другое преимущество монолоадеров — экономия свободных элементов в корневом каталоге диска (TR-DOS видит только первые 128 файлов на диске), а также времени при копировании программы. Кроме того, копируя такую программу в спешке, вы гарантированно не забудете ни один важный файл. Игры обычно сохраняют своё состояние прямо внутри файла монолоадера: для хранения данных используются не занятые хвосты секторов (несколько байт в конце последнего сектора каждого блока данных). Некоторые загрузчики применяют специальные «турбо-лоадеры» для ускорения чтения. Они работают через прямой опрос регистров ВГ93. Это исключает бессмысленные циклы задержек из кода TR-DOS и ускоряет загрузку в 2–4 раза. Но повторюсь: защитой это не является. Вот вам и ответ на вопрос «зачем нужны монолоадеры?».

Теперь поговорим о том, «почему только „Beta 128“?». В 1988 году появилась схема советского клона контроллера «Beta 128». Этот интерфейс оказался предельно дешевым и простым в сборке, а главное — в то время он был ЕДИНСТВЕННЫМ доступным дисковым интерфейсом! Люди стали массово его собирать. Стало появляться все больше и больше программ с поддержкой «Beta 128» (главным образом игр). Разумеется, мы знали о существовании других интерфейсов (FDD3000 в Польше, +3 и MGT в других странах). Но ни у кого здесь их не было, и никто не знал, как под них писать.

Зачем же тратить время на поддержку того, чем никто не пользуется, особенно когда даже не знаешь, КАК это поддержать? Но это лишь первая половина ответа. Позвольте рассказать вторую. Начиная с конца 1992 года, когда мы практически потеряли связь с зарубежными импортерами софта для Speccy (поскольку 99% софтверных компаний свернули разработку под Спектрум), мы пребывали в полной уверенности, что Спектрумом пользуются только жители России и других стран бывшего СССР.

Для нас стало огромным шоком узнать, что в 1995 году кто-то в Европе еще работает на Speccy! Как раз тогда доступ в Интернет стал дешевле. Мы начали выкладывать свои релизы на сайты, и тут случилось самое интересное: нас впервые спросили, почему мы делаем программы только под «Beta 128» и не поддерживаем другие дисковые системы. Обратите внимание: «спросили почему», но не объяснили «как»! С тех пор прошло пять лет, а воз и ныне там: одна сторона продолжает спрашивать «почему», вместо того чтобы рассказать «как». Звучит смешно? Мне так не кажется. Некоторые странные персонажи даже решили, будто это делается назло, и стали выпускать релизы с защитой «анти-Beta-128». Ну и кто после этого тупой? Не знаю, как ответить на этот вопрос. Я пытался изменить положение дел, объяснял «почему» и «зачем», спрашивал «как», но мало кто из тех, к кому я обращался, попытался вникнуть или помочь.

И по сей день я не добился особых успехов: вокруг по-прежнему полно людей, рассуждающих об «этих тупых русских» и «дурацких загрузчиках под BETA 128».

А теперь у меня вопрос к ТЕБЕ. Да-да, лично к ТЕБЕ, дорогой читатель.

Что лично ТЫ сделал, чтобы исправить ситуацию и помочь нам адаптировать наши игры, демосценные работы и утилиты под твой дисковый интерфейс (магнитофон, HDD, CD, Flash-карту или любой другой носитель)? Держу пари — ТЫ не сделал ровным счетом ничего. Единственной командой, которая действительно попыталась нам помочь, была RAMSoft. Они выпустили превосходный документ по программированию интерфейсов MGT DISCiPLE и Plus D. Единственное, чего в нем не хватало — готовых примеров, которые можно было бы просто скопировать в исходники на ассемблере, чтобы вы могли играть в игры и смотреть демки без необходимости тратить минуты или часы на их адаптацию. Но не кажется ли вам диким: существует более 40 различных дисковых интерфейсов — и доступно описание всего ОДНОГО из них?!?! Я сам публиковал документы по программированию под «Beta 128» и системным переменным TR-DOS, но этого мало. Где ВАША помощь? Чего же вы хотите? Повода посудачить о том, насколько глупы те, кто пишет только под «Beta 128»? Или вы действительно хотите видеть новые работы работающими на вашем интерфейсе? Если вы выбрали первый вариант — извините, но у вас явно не все в порядке с головой. Если же вы выбрали второй путь, пожалуйста: найдите все старые руководства и справочники для программистов по вашему дисковому интерфейсу, наберите их текстом или отсканируйте! Позаботьтесь о переводе на английский, если они еще не переведены (попросите англоязычного друга вычитать текст), и отправьте на любой сайт, посвященный Спектруму, для публикации. Не хватает времени? Я прекрасно вас понимаю: порой действительно тяжело выкроить свободные часы даже на срочные и важные дела. В таком случае просто перешлите материалы тому, кто может сделать это за вас. Свяжитесь с кем-нибудь, кто контактирует с авторами популярных дисковых журналов на территории бывшего СССР, и попросите их напечатать документ. Поверьте, это станет реальной помощью для всех нас.

Чем конкретно вы можете помочь и что требуется описать? Вот краткий список пунктов:

  • ТОЧНОЕ название и версия имеющегося у вас интерфейса, включая название и версию дисковой операционной системы (DOS).
  • Кто его разработчик?
  • Когда вы его приобрели?
  • Почему купили именно его, а не другую модель?
  • Характеристики интерфейса:
    • емкость диска;
    • максимальное количество файлов на диске;
    • скорость доступа к диску (как быстро загружается программа на 48K);
    • сколько накопителей можно подключить;
    • ограничения (использование 48K ОЗУ и т. д.).
  • Существовало или существует ли сообщество вокруг этого интерфейса?
  • Выходили ли для него информационные бюллетени (ньюслеттеры)?
  • Сохранились ли у вас копии этих изданий?
  • Есть ли у вас руководство пользователя / руководство программиста?
  • Много ли софта выпущено под данный интерфейс?
  • Как определить из программы, что она запущена именно с этого интерфейса?
  • Каков дисковый формат этого интерфейса:
    • количество сторон;
    • количество дорожек на сторону;
    • количество секторов на дорожке;
    • стандартный размер сектора в байтах;
    • универсальная сигнатура (как определить, что диск предназначен именно для вашей дисковой системы, а не для другой);
    • структура дескриптора корневого каталога;
    • структура дескриптора подкаталога;
    • структура дескриптора файла;
    • структура таблицы размещения файлов (если есть);
    • какая микросхема контроллера дисковода (FDC) используется в интерфейсе?
  • Как обращаться к дисковым функциям из Бейсика?
    • примеры (load/save/cat/delete);
  • Как обращаться к дисковым функциям из машинного кода?
    • примеры (по возможности — готовые к использованию);
  • Сколько ОЗУ установлено в интерфейсе и как его подключать/отключать?
    • пример;
  • Сколько ПЗУ в интерфейсе и как им управлять?
    • пример;
  • Как получить прямой доступ к микросхеме FDC?
    • пример;
  • Как читать диски этого формата на других компьютерах (Amiga/PC/Mac)?
  • Готовы ли вы помочь с тестированием?

Наиболее важная информация помечена звездочкой «*». Разумеется, это лишь примерный, далеко не исчерпывающий список. Добавляйте всё, что поможет тем, кто попытается внедрить поддержку вашего устройства в свои программы или написать для него эмулятор. Пожалуйста, не проявляйте агрессии к тем, кто не делает поддержку вашей системы — с огромной вероятностью они о ней попросту ничего не знают. Свяжитесь с ними и объясните, как добавить поддержку вашего дискового интерфейса. Не надо кричать о том, какие они тупые: этим вы ничего не добьетесь, лишь настроите людей враждебно против себя и потеряете всякую надежду изменить положение дел навсегда.

Зачем нужны именно проверенные и работающие примеры? Позвольте рассказать вам историю. Сейчас она звучит забавно, но тогда мне было не до смеха. В 1995 году мне предложили войти в группу разработчиков, создававших MIDI-интерфейс для Спектрума. Мне выдали несколько сотен страниц ксерокопий под заголовком «Техническая информация / руководство для программиста» и продемонстрировали устройство в действии. Я тогда впервые увидел и услышал MIDI вживую. Впечатление было потрясающим. Я согласился на работу и спросил, что конкретно от меня требуется. Мне ответили, что нужно сделать всё возможное, чтобы облегчить жизнь музыканту. В итоге должен был получиться лучший MIDI-секвенсор для 8-битной машины плюс небольшая управляющая утилита для редактирования, сохранения, загрузки и передачи состояния синтезатора.

Я попросил сам интерфейс и простейший синтезатор, но мне их не дали: любое из этих устройств, даже самый примитивный синтезатор, стоило для них слишком дорого, а подключение MIDI-интерфейса требовало аппаратных доработок, в которых я не слишком разбирался. Тогда я предложил им купить мне модем для Спектрума, объяснив, что это сэкономит кучу времени и денег, ведь я не собирался тратить по часу на дорогу в один конец каждый раз, когда нужно проверить работу программы на реальном «железе». Они согласились. Спустя три месяца была готова первая простая версия графического интерфейса и небольшая утилита для настройки параметров синтезатора. И тут началось самое веселое.

Я позвонил человеку, у которого были и MIDI-интерфейс, и синтезатор, и, разумеется, модем. Передав ему программу и протестировав её, он сказал, что всё здорово, но кое-что нужно доработать. Я выполнил его пожелания за две недели. На его машине снова всё работало отлично, но он попросил сделать еще кое-какие функции для удобства музыкантов. Более полугода мы работали по такой схеме: я писал новые возможности или оптимизировал код, отсылал ему файл, он тестировал и сообщал, что исправить и что добавить. Но однажды он попросил добавить поддержку другого MIDI-протокола. Я сделал это — и тут начались странности.

Синтезатор получал НЕВЕРНОЕ значение — вообще не то, что отправляла управляющая программа! Я спросил: «Могу ли я наконец получить интерфейс и синтезатор к себе?». Он ответил «нет», сославшись на то, что заехать к нему тоже нельзя: он страшно занят и дома его практически не застать. И попросил меня самого отследить ошибку в коде, заверив, что с его стороны всё подключено абсолютно правильно.

Четыре месяца я безуспешно пытался найти причину сбоя. Я был на грани помешательства. Представьте себе: у вас есть пять команд, отправляющих байт в порт, и что-то идет наперекосяк, потому что синтезатор вместо числа 253 принимает 99! Четыре месяца вы смотрите на эти пять команд, тасуете их, переписываете с нуля всеми возможными способами... И ничего не помогает! Пока однажды этот человек не позвонил мне и не сказал, что нашел проблему: он просто забыл переключить протокол передачи данных на синтезаторе! Услышав это, я немедленно разорвал контракт — тем более что незадолго до этого вся команда разработчиков в один голос заявила мне, что я никудышный кодер, раз не способен написать секвенсор для управления синтезатором. Вот так. Я потратил почти год работы на этот проект... Вот к чему приводит ситуация, когда устройства у вас нет, а поддержку под него писать приходится. Поэтому, пожалуйста — присылайте проверенные и гарантированно рабочие примеры кода!

(c) 2000 Mac Buster^Extreme Entertainment

http://bduc.nm.ru/
http://xtm.da.ru/

Поделитесь вашим мнением о статье