Этот текст, в основном, предназначен для желающих освоить "Агат" сейчас, когда реальные
машины становятся редкостью и добыв некоторое железо из чужого тёмного угла хочется чтобы оно
сначала хоть как -то заработало и было возможно оценить: какой объём усилий ещё придется вложить,
прежде чем оно заработает на полную ? Некоторые советы могут пригодится и тем, кому для ознакомления
достаточно освоения эмуляторов.
Понятно, что для полного погружения нужно прочитать документацию, тем более она
вполне доступна, но, во первых - некоторые важные замечания там отсутствуют, во вторых
- даже если они там есть, их ещё нужно заметить среди прочего текста. Таким образом можно назвать
эту страничку "Конспект неочевидных особенностей". Я не буду здесь подробно описывать методики
ремонта, речь пойдет только о диагностике с точностью до блока, более глубокие подробности
не являются чисто агатовскими и многократно описывались.
Внешние и некоторые другие отличия Агат-7 и Агат-9
Сначала надо определится с моделью машины. Кратко:
Семёрка - (она же восьмёрка без принтера) - процессор в отдельном модуле, базовая память 32 кб,
реальный софт требует ещё двух допмодулей памяти по 32 кб - иначе не работает. Также в наличии модуль
универсального последовательного-параллельного интерфейса. Комплектовалась поначалу дисководами на 140 кб, потом
840 кб, безболезненно допускает их одновременную установку. Может аппаратно эмулировать Apple ][
при наличии специального модуля "Ячейка 121".
Девятка - процессор на материнке, базовая память - 128 кб, некоторый софт может использовать
допмодули памяти по 128 кб (но может работать и без них). В наличии модуль параллельного интерфейса
для подключения принтера. Аппаратно эмулирует Apple ][. Выпускалась с дисководами 840 кб, но 140 кб тоже нормально воспринимает.
Отличить материнку девятки от семёрки легко: у девятки процессор находится вблизи разъёма питания,
на семёрке его просто нет. На плате семёрки только одна микросхема ПЗУ,
у девятки - куча ПЗУшек с окошками.
Слоты и разъёмы расширения, plug-and-play
Работая с Агатом следует различать два понятия: слот и разъём. Разъём - механическое устройство.
Слот - разъём, имеющий собственное адресное пространство. Нередко эти понятия путают,
тем более что слот 1 соответствует разъёму X1, но уже разъём X2 не является полноценным слотом в семёрке.
Разъёмы расширения в девятке и семёрке идут в разном порядке:
Семёрка - разъём X7 рядом с разъёмом питания, затем X6, X5...
Разъёмы внешних устройств: от края к центру: Пульт, Магнитофон, Клавиатура, Видеосигнал, RGB.
Девятка - рядом с разъёмом питания - X1, затем X2 и т.д..
Разъёмы внешних устройств: от края к центру: Пульт, Магнитофон, RGB, Видеосигнал, Клавиатура.
Расположение разъемов и их типичное назначение в базовой комплектации
Нередко программы, взаимодействующие
с устройствами в слотах, сообщают или запрашивают номер разъёма, в котором установлено "их" устройство,
однако они имеют ввиду именно номер слота.
Агат аппаратно является p'n'p-машиной, никаких конфликтов прерываний или адресов у него
не возникает, т.к. каждый слот имеет собственное адресное пространство (а прерываний вообще всего два на всю
систему и те редко используются), но некоторым программам лень проверять конфигурацию (или у них есть ошибки в
механнике p'n'p) и они предполагают, что работают на стандартном Агате:
Часть адресного пространства этого слота отдана контроллеру базовой памяти,
в этот разъём можно устанавливать только устройства, предназначенные для этого разъёма.
Например Nippel Clock Card или Nippel Mouse Card.
Аппаратные особенности некоторых разъёмов приводят к следующим ограничениям: * Разъём иногда не впаивался в плату и предназначался, вероятно, для некоторых
версий "Ячейки 121" и некоего "Secam-кодера" (мы бы хотели найти эти устройства!). Имеющиеся у нас версии "Ячейки 121" предназначены
для других слотов. Разъём имеет ряд дополнительных сигналов: с гнезда RGB и дисплейного контроллера,
расположенного на системной плате. ** Этот разъём выпадает
из общего адресного пространства и правил формирования адресов для слотов. Некоторые сигналы к нему
не подведены, некоторые из контактов использованы не так, как на других модулях. Этот слот используется
только модулем процессора, компьютер без этого модуля будет не особенно интересен. *** Модуль ДопОЗУ девятки можно устанавливать только сюда, иначе возможен конфликт с базовым ОЗУ. **** Этот разъём на семёрке в чём-то похож на X2 девятки. Только в него
допустимо устанавливать модуль ДопОЗУ семёрки, если объём базового ОЗУ превышает 32 Кб.
Однако нам не известно о существовании серийных семёрок с таким объёмом. Если найдёте подобный
компьютер - сообщите нам :)
Если при сборке машины вы отклоняетесь от этой конфигурации - что нибудь может не заработать. Сисмон
работает в любом случае (если процессор на месте).
Можно также говорить о существовании слота 7, но он не имеет разъёма и используется встроенным
в системную плату дисплейным контроллером (ДК), а также некоторыми глобальными программными переключателями.
Если в машину устанавливается два устройства, использующих общее адресное пространство
(на практике это относится к одинаково сконфигурированным модулям памяти), они должны быть установлены
в соседние слоты - при этом задействуется механизм подавления - т.е. устройства не будут пытаться
отзываться одновременно на одни и те же адреса. Эта ситуация не возникает в стандартной конфигурации,
но возможна в нестандартной - читайте мануал для подробностей, если захочется поэкспериментировать
(более-менее стандартный случай: модуль ДопОЗУ 128 кб в девятке).
Модули ДопОЗУ и ЭмПЗУ семёрки - одно и то же устройство, но сконфигурированное различным образом.
Отличия в перемычках или переключателях. Здесь все подробности.
Как проверить конфигурацию ? Если машина отзывается и приглашение сисмона есть ("*"), ничего не загружая,
включив машину, пишем: Cx00 и нажимаем Ввод. Вместо x подставляем цифры от 1 до 6 включительно (это номер
слота, который нас интересует). Получаем ответы устройств. Что они означают ?
FF - нет устройства (в семёрке) либо модуль последовательного-параллельного интерфейса;
Cx - нет устройства (в девятке);
00 - на слоте 1 в девятке (т.е. по адресу C100) - нормальный отклик контроллера базовой памяти;
A2 - контроллер дисковода, но также может быть любое другое устройство загрузки, например, сетевая карта;
80 - ЭмПЗУ-7;
00 - ДопОЗУ-7 или ДопОЗУ-9 (уточнить можно, посмотрев остальные адреса Cx00-CxFF: у модуля ДопОЗУ-7
значение будет повторяться, у ДопОЗУ-9 будет 16 групп различных значений);
18 - модуль принтера.
Другое число - либо ОС загружена сейчас или ранее, либо вы нашли что-то интересное, либо поломка машины.
Блок питания начинает вырабатывать питающие напряжения: +5в, +12в, -12в. +5в - питание логики,
этого напряжения достаточно, чтобы увидеть осмысленное изображение на экране. По этой линии потребляется
примерно 1.5..3а - в зависимости от версии машины. +12в нужно дисководу и магнитофонному входу.
-12в - только магнитофонному входу. Потребление по линии +12в зависит от модели дисковода, обычно
в пике может достигать 1.5а. -12в - несколько мА.
Общесистемный сигнал RESET вырабатывает клавиатура. Если она не подключена - машина не запустится.
Переключатели РУС/ЛАТ на клавиатуре - аппаратные, срабатывают при нажатии соответствующих кнопок
вместе с клавишей РЕГ, передают сигнал в системный блок, но не могут им управляться (как в AT-клавиатурах).
Одновременно запускается контроллер дисплея. Вы уже должны видеть растр; скорее всего в графическом
режиме 64x64x16 (семёрка) или что-то похожее (девятка).
Запускается ЦПУ, начинает исполнять программу из ПЗУ. Поэтому если вы работаете с семёркой - модуль процессора
должен быть уже установлен.
Программа из базового ПЗУ (системный монитор, сисмон) очищает экран, включает текстовый режим 32x32x16,
выводит надпись "** Агат **" или "Агат-9" и начинает поиск устройства загрузки, которым обычно оказывается
дисковод, но может быть и, например, сетевая карта. Поиск ведётся от старших слотов к младшим (в семёрке)
или наоброт (в девятке).
Если устройство загрузки найдено, управление будет передано его ПЗУ, иначе будет выведено приглашение
сисмона - "*".
Загрузчик дисковода включит нулевой привод, подключенный к своему контроллеру (могут быть установлены
несколько одинаковых контроллеров, ПЗУ контроллера всегда работает со "своим" экземпляром железа),
отведёт головку к нулевому треку (внешней стороне дискеты) и будет ждать поле адреса нулевого сектора.
Если дождётся - прочитает содержимое сектора в память по адресу $800 и, проанализировав результат, либо
передаст управление по адресу $801 либо продолжит чтение. Никаких таймаутов или иной диагностики
загрузчик не выполняет. Если ему что-то не нравится, он просто будет ждать чуда, в надежде найти на диске нечто, которое
его удовлетворит. Загрузчик не умеет двигать головку от нулевой дорожки, поэтому если она зашевелилась
от нулевого трека - значит дисководом уже управляет какой -то код, считанный с дискеты.
Вы можете нажать УПР-СБР чтобы прервать загрузку и передать управление другому устройству. Просто
в ответ на приглашение сисмона обозначте своё желание явно: например, передать управление ПЗУ
устройства в пятом слоте: C500G.
Это всё хорошо, если есть картинка на мониторе. А если нет ? Можно ориентироваться на динамик - если при
включении машины он явно пискнул - значит, как миниум, ЦПУ и сисмон работают - синтез звука в Агате только
программный.
Насчёт дисководов
Вероятно, вы уже знаете, что дисководы Агата - которых было два: от Apple ][ на 140 кб и свой
собственный - на 840 кб, совместимы только сами с собой. Причем даже дискеты записанные
в дисководе на один формат не будут читаться в дисководе другого формата. Однако физический
привод дисководов 840 кб является вполне стандартным и в его качестве, при некотором умении,
может даже выступать дисковод от PC - нужно только снизить скорость вращения шпинделя
с 360 об/м до 300 об/м (иногда для этого достаточно переключить джампер, иногда - перепаять
один провод). Но вот приводы 140 кб - это нечто. И о нём замечания ниже:
Если дисковод долго лежал без движения у него может уплыть скорость вращения шпинделя. Есть программы
для её тонкой регулировки, но при сильном уходе вы просто не загрузите ОС. Грубо отрегулировать дисковод
можно по стробоскопическим полоскам, нанесенным на нижний маховик шпинделя: внутренее кольцо
выглядит стоящим на месте в свете обычной лампы накаливания, включенной в розетку 220в. Внешнее
медленно вращается. В первые минут 10 при первом включении скорость может плыть сама по себе.
Привод головки у этих дисководов не жесткий и даже если шаговый двигатель куда-то дергается,
это ещё не значит, что головка двигается правильно. Разберитесь в конструкции движения (большая белая
улитка, по ней бегает пружинистая лапка головки) - лапка при нормальной работе привода не выскакивает
из дорожки улитки. Если выскакивает - где-то есть проблемы со смазкой.
Шаговый двигатель крепится двумя здоровыми винтами, они покрыты мазками фиксирующей краски.
Если дисковод разбирали - краска будет сбита, значит, возможно, придётся подстраивать этот узел.
Случается интересная ситуация, когда дискета отказывается крутится в конверте, хотя все узлы
дисковода вроде бы исправны и шпиндель крутится. Во всяком случае крутится двигатель шпинделя.
Дисковод выглядит работающим, но ничего не читается и не пишется. Обратите внимание, чтобы дискета
действительно крутилась и не проскальзывала. Может быть нужно распотрошить конверт дискеты и собрать
снова (хорошо помогает), может быть заменить дискету, может быть сменить пассик привода.
Элементарное загрязнение головки тоже возможно. Агаты эксплуатировались, в основном, в школах,
а там особо хирургической чистоты не бывает.
Вообще, этот дисковод не отличается особой надёжностью хранения данных и очень быстро приучает
делать бекапы. 840к более надёжен.
У вас есть дискета, которая вроде загрузочная, ну хотя бы агатовская, но загрузить машину не удаётся ?
Во первых - убедитесь что дисковод отводит головку ко внешней стороне дискеты. Во вторых:
попробуйте после пяти секунд вращения дискеты нажать УПР-СБР и в ответ на приглашение "*"
набрать команду 801L. Вылезет экран текста - это дизассемблированный участок памяти. Вопрос
в том - осмысленной он или нет ? Осмысленный участок не содержит слишком большого числа "???"
(недокументированная команда), не будет часто ссылаться на области памяти
за пределами 00..FF, 800..8FF и C000..FFFF и не будет содержать большого количества
одинаковых команд (однако, вы можете встретить четрые подряд идущих команды ASL - это расчёт адреса загрузчика из
номера слота дисковода).
Если дисковод ничего не читает (т.е. имеет поломку лично, либо шлейф, либо контроллер),
то любые попытки шевелить головку руками, прижимать крышки и прочее шаманство в результате
приведут к тому, что участок с адреса 801 будет заполнен мусором (точнее, его содержимое не будет меняться после включения машины).
Если же что-то прочитается
(и не просто "что-то" - драйвер загрузки будет читать данные только если получит корректное поле адреса)
- в ответ на команду 801L вы увидите вполне осмысленный код. Он может различатся для разных операционок,
но отличить его от мусора можно в две секунды одним глазом. Таким образом, если буфер чем-то заполнился,
но ОС не грузится - проблема, вероятно, в испорченной дискете (или не соответствующей версии машины), грязной головке, неправильной юстировке
шагового двигателя. Практически невероятно, чтобы виноват был контроллер (разве что повреждены последние байты
ПЗУ загрузчика).
Аппаратная совместимость компонент
Девятка и семёрка, а также их модификации от разных заводов, имеют похожие и одинаковые
блоки, которые иногда можно взаимозаменять:
Блоки питания - некоторые блоки питания имеют дополнительный выход +12в для питания монитора. Если монитор подключить к блоку, не предназначенному для такой нагрузки - может сработать защита от перегрузки, особенно при включении дисковода. В остальном существенных отличий нет.
Не должно быть причин, по которым Агат не смог бы работать с PC-шным блоком питания. Только разъём нужен другой.
Клавиатуры - клавиатура семёрки имеет вход блокировки передачи, который на материнской плате девятки подключен совсем не туда и может неожиданно блокировать клавиатуру. Если этот вход клавиатуры отпаять от штеккера и замкнуть на "общий" - она будет работать как с семёркой так и с девяткой. Клавиатура девятки должна нормально работать с семёркой.
Модули допамяти - софт, обычно, не ожидает их найти в "не своих" машинах. Работать модули на "не своей" машине корректно не могут: у семёрки и девятки по разному устроено согласование базового ОЗУ и дополнительного.
Контроллеры дисководов - контроллеры как 140кб так и 840кб нормально работают на обеих архитектурах, лишь бы ОС их поддерживала. Однако, контроллер 140кб существует в двух версиях, вторая версия не полностью работоспособна на семёрке, подробности здесь.
Дисководы - 140-ка может быть заменена некоторыми, теперь уже редкими, моделями импортных дисководов, но им может понадобится дополнительное питание -12в. А вот 840-ка легко заменяется PC-шными трех- и пятидюймовками.
Мониторы - обычно взаимозаменяемы, но материнки девятки выводят некоторые дополнительные сигналы, например, гашение обратного хода. Обычно эти сигналы мониторам не важны, но если монитор их всё таки ожидает - возможны варианты. Кроме того, версии Агатов, предназначенные для работы с монитором "Юность 404", не имеют динамика и каскада его усилителя, звук они выводят на гнездо RGB.
Контроллеры принтера - выпускались для девятки, работают в семёрке, но старые версии ОС, выпущенные до появления этого контроллера, могут путать его с другими устройствами.
Контроллеры последовательного и параллельного интерфейсов - не проверялось, но должно работать. Ими комплектовались семёрки, стандартный софт семёрки использовал их только как контроллеры принтера. Следует знать, что параллельный интерфейс построен на микросхеме 580вв55, которая имеет довольно слабые выходы к внешним устройствам. В частности, типичный матричный PC-шный принтер, требует заметно более высоких токов управления. Таким образом нужно либо дорабатывать такой принтер для работы с Агатом (возможно, увеличивать входные резисторы) либо использовать промежуточный буфер на каких нибудь шинных формирователях (лн2, ап, ви...).
Сбои памяти
Агатовская память имеет тенденцию к деградации. То ли там изоляционные свойства диэлектрика
ухудшаются, то ли ещё какая-то бяка, но по мере использования незаметно подкрадывается пушной
зверёк. Например, через 2-3 года интенсивного использования. Т.е. вообще -то любые детали могут ломаться, но диагностировать сбои памяти наиболее сложно.
Деградация диэлектрика приводит к тому, что динамическая память, которая, как известно, требует регенерации,
начинает её требовать уж очень часто: такая ячейка хранит информацию
меньшее время, чем период регенерации. Т.е. процессор записал в неё число, она его помнит несколько микросекунд,
а потом "забывает". Если в тесте памяти просто выполнить запись в ячейку, а потом чтение с проверкой,
то память сработает правильно. И только если к ячейке долгое время нет обращения - данные в ней разрушатся.
Причем чем выше температура микросхемы, тем меньшее время данные будут храниться. До стационарной температуры
память в Агате греется примерно 1-2 минуты. Т.е. если какая нибудь ОС, например, нормально загружается
на холодную машину и начинает глючит через пару минут и потом вообще отказывается загружаться -
начинать поиск проблем нужно с памяти. Остальные детали если уж дохнут - то сразу и однозначно.
Вычислить микруху можно охлаждением - для этого есть, например, специальные химические средства.
УПР-СБР, управление памятью, перезагрузка
Общесистемный сигнал сброса генерируется клавиатурой, повторно его можно получить, нажав одновременно две
клавиши: УПР и СБР. По сигналу сброса процессор запрашивает в конце адресного пространства вектор сброса
(т.е. адрес, с которого следует продолжить работу). Хитрость в том, что контроллер памяти может подсунуть
на эти адреса как ПЗУ так и ОЗУ. Т.е. после включения машины стоит именно ПЗУ, но затем операционная
система может подключить в качестве обработчика сброса произвольный код. Теоретически, это делается
для того, чтобы, например, остановить выполнение зависшей пользовательской программы, даже если
она двоичная, и корректно вернуть управление операционной системе. Практически же, вектор сброса
любят переключать на себя и пользовательские программы. Кто-то таким образом блокирует пользователя от
случайного нажатия УПР-СБР, кто-то не хочет, чтобы пользователь мог изучить код программы после запуска...
Так как УПР-СБР можно заблокировать, а остальные клавиши анализируются только программно,
машина может зависать целиком и полностью - до выключения питания.
Кроме того, в девятке есть бит Признак Машины, который переключается в состояние "Apple]["
программно, но не может программно переключится в состояние "Агат". Только через выключение питания.
Неизвестно, почему разработчики не предусмотрели на системном блоке простой кнопки полного
сброса. Это было бы удобнее и безопаснее для выключателя блока питания, чем каждый
раз щелкать тумблером. Я делал себе такую кнопку - работало хорошо и удобно.
Теоретически, кнопка тоже может не срабатывать, т.к. в ОЗУ есть две ячейки, сопоставляя
значение в которых, системный монитор делает предположение о том, была ли машина уже включена
перед сбросом или нет? Если есть признак того, что была - управление передаётся на заданный в ОЗУ
адрес (код по которому мог, например, снова зависнуть), иначе выполняется обычная процедура первоначального запуска. Но на практике это не мешало.
Теперь взгляд на перезагрузку системы с другой стороны: это не полностью продуманные
и коряво реализованные процедуры определения конфигурации в некоторых ОС. Особенно это касается
семёрочных ОС. Когда загружается такая система, она пытается найти контроллеры дополнительной
памяти по характерному для холодной загрузки состоянию регистров. Но если до этого была уже
загружена другая ОС, то состояние регистров будет неожиданным. Что и сбивает с толку некоторые
операционки. Те, что поумнее, сначала пытаются вызвать сброс контроллеров (даже
если и не видят их), а потом уже читают регистры.
RESUME1: в отличие от Спектрумов, PC и прочих машин, у Агата очень замысловато сделана
перезагрузка (даже не зависшей) системы. Даже имея доступ к командной строке, корректно перезагрузить
семёрку непросто. Нужно либо использовать специальные утилиты либо ввести в любое место памяти
небольшую программку из двух-трех команд (одна-две - сброс модулей памяти, третья - передача управления загрузчику),
либо действовать немного наугад, в надежде, что повезет (для штатной конфигурации, выход из Бейсика):
CALL-151
3F4:0
C200:0
машина зависнет, нужно нажать УПР-СБР - пойдёт перезагрузка. Более универсальный способ (различные отладчики,
в которых не нормальной функции выхода (тоже для штатной
конфигурации)):
3000:8D 0 C2 4C 0 C3
3000G
Перезагрузка начнётся сразу (с контроллера в третьем слоте).
У девятки операционки умнее, можно просто использовать команду PR#5 - загрузка с пятого слота.
RESUME2: Поэтому многие крупные программы, работающие со своей личной операционкой,
имели (кроме Агат-Автора!) команду "выхода" - это не выход в оболочку операционной системы,
а именно перезагрузка. В частности, выход из РАПИРЫ:
ВКЛ МЕНЮ;
Из Best Tool Kit и Диалогового Отладочного Комплекса:
[EXIT
Некоторые самостоятельные программы в качестве сигнала к перезагрузке воспринимают УПР-СБР:
Alv graf, Копировщик дисков (из "Школьницы")...
Видеопамять и картинки
Как правило, графические файлы на Агате хранились либо в виде файла формата конкретного
редатора (тогда их может просматривать только этот редактор), либо в формате видеопамяти (если ожидалось, что их будет выводить какая нибудь Бейсиковская
программа). Т.к. разные видеорежимы используют всего три размера буферов видеопамяти, отличить
файлы изображений от других, как правило, легко: это будут файлы типа B, реже - К, а их размер будет
составлять 9-10 либо 32-33 либо 63-64 блока (последнее - только на девятке).
Просмотреть их можно, например, в Бейсике: перейдите в системный монитор командой CALL-151,
прочитайте файл в свободную область памяти: BLOAD <имя файла>,A¤4000 и затем
вам предстоит перебором найти нужный видеорежим. Т.к. видеоконтроллер перестанет отображать
текст, набирать нужно вслепую:
Семёрка:
C720, C722, C7A2 - для файлов 9-10 блоков, режимы: 64x64x4, text 32x32, text 64x32;
C721, C723 - для файлов 32-33 блока, режимы: 128x128x4, 256x256x1.
Девятка:
C722, C7A2 - для файлов 9-10 блоков, режимы: text 32x32, text 64x32;
C721, C723 - для файлов 32-33 блока, режимы: 128x128x4, 256x256x1;
C720, C7A3 - для файлов 63-64 блоков, режимы: 256x256x2, 512x256x1;
C050+C055+C052 - для файлов Apple][, 32-33 блока, режим: 280x192xX.
В девятке, в некоторых режимах, можно переключать палитры: C058 или C059, C05A или C05B.
Если на экране виден мусор - значит файл содержал не картинку. Вернутся назад в текстовый режим
можно комбинацией УПР-СБР.
Форматы файлов, кодовая таблица
Всего штатная файловая система поддерживает восемь типов файлов:
T I A B S П К Д. Обозначения условные
и в различных ОС могут слегка отличаться, особенно последние четыре.
Формат файлов различен, и, как правило, операционная система будет отказываться читать
содержимое файла одного типа командой, относящейся к файлам другого типа (ошибка FILE TYPE MISMATCH). Т.е. не следует считать,
что тип файла - это что-то вроде расширения в других ОС, которое можно легко сменить.
Наиболее стабильные типы (т.е. одинакого понимаемые различными программами и ОС) следующие:
T - текстовый файл. Читается и пишется некоторыми редакторами текстов, а также может быть прочитан и записан
(но только медленно и посимвольно или построчно) Бейсиковскими программами. Также в этом формате хранятся программы РАПИРЫ
и Робика. Представляет собой последовательность символов, оканчивающихся символом с кодом 0.
Так как обычно воспринимается как текст, можно говорить и о кодовой таблице - она совпадает со знакогенератором
Агата (а он, в свою очередь, более всего напоминает КОИ-8, но со странно расставленными тремя старшими битами).
I - по легенде, это файлы блока переменных Бейсиковских программ. Судя по всему, имеющимися операционными
системами Агата не поддерживаются (недокументированные команды STORE и RECALL) или поддерживаются
неполностью (поэтому и недокументированы). По другой легенде - это файлы с программами эпловского
"Integer BASIC", который на Агат не был перенесён, тогда тип "A" происходит от "Applesoft BASIC".
A - слегка кодированная Бейсик-программа. Ключевые слова, длинные имена переменных, номера строк и некоторые
другие структуры хранятся в упакованном виде. Первые два байта - длинна файла.
Команды чтения/записи таких файлов не могут содержать указаний на точку загрузки и размер - их
операционка получает из блока данных Бейсик-интерпретатора. С точки зрения ДОС - эти файлы
представляют просто дамп памяти, поэтому хитрованы-программисты иногда, кроме прямого назначения,
использовали этот тип для хранения двоичных или смешанных программ (различное чередование бейсик-кода
и бинарного). Классика жанра - системная программа SPEED, шедшая в штатной поставке компьютера:
её пользовательский интерфейс построен на Бейсике, но в конец A-файла добавлен приличный
кусок кодов, которые, собственно и измеряют скорость. Epic fail: в книжке Мымрина приводится
распечатка только её бейсик-части.
B - двоичные файлы ДОС. Пишутся и читаются по заданным пользователем адресам, длинна и точка
загрузки хранятся в первых четырех байтах. В первую очередь в таких файлах содержатся двоичные программы,
но также часто их использовали в качестве файлов данных - из за быстрого чтения и записи под любыми
ОС, а также из-за отсутствия ограничений на содержимое. Некоторые текстовые редакторы хранят
в B-файлах тексты, причем иногда - в собственных кодовых таблицах (первым в этот грех впал "Агат-Автор").
Те же хитрые программисты, которые в A-файлы добавляли двоичный код, случается, в B-файлах хранят
бейсик-код. Причины этих вывертов просты: объединить в одном файле A- и B- данные, а заодно запутать
потенциального реверс-инженера. Реже была ещё одна причина: если для автозапуска операционка ожидает
A- файл, но нужно, чтобы запускался B- код: можно либо сделать A- файл с командой BRUNxxx, либо ... Ну вы поняли ? :)
S - резидентные программы Best Tools Kit. По сути, тот же дамп памяти, но с фиксированным адресом загрузки
плюс небольшой блок служебной-сопровождающей информации.
П - перемещаемый двоичный файл, генерируется некоторыми трансляторами ассемблера.
К - двоичные файлы ОС Школьница. Почти соответствуют B, но используются, в основном, только в Школьнице.
Отличие (не совсем приятное), в том, что размер и длинна хранятся в TSList-е - служебной структуре,
которая содержит координаты файла на диске. Не все копировщики файлов будут правильно работать с таким
"расширенным" TSListом. Тут важно знать, что в РАПИРе не было принято использовать двоичные программы.
Команды чтения и запуска К-файлов есть только в Диалоговом Отладочном Комплексе Школьницы, внутри самого интерпретатора
РАПИРы их нет. Однако если всё же авторам хотелось использовать К-файлы, писался небольшой
код, вызывающий соответствующие процедуры операционки и это позволяло прочитать К-файл в память. Обычно,
этот код назывался КЧИТ или ЧИТ_ЗАП. Практически наверняка, если вы встретите где нибудь К-файл, это будет либо
картинка либо небольшая библиотечка для другой программы. Иногда К- тип использовался графическими
редакторами наравне с B- типом для хранения изображений.
Д - этот тип, например, использует для своих данных редактор Alv Graf. Буковой Д могут быть также отмечены
подкаталоги в расширенных вариантах файловой системы BTK и Master Basic. Стандартными ОС они не обслуживаются.
Типы П, К и Д ранние ОС отображали так же как оригинальная DOS3.3 - R, A и B соответственно.
Агатовская файловая система не использовала расширений файлов (Маки их по сию пору не используют, но типы файлов из одной
буквы фиксированного списка превратились в целых 8 произвольных букв: четыре - file creator и ещё 4 - file type), имена имеют 30 знаков, если короче -
подразумеваются пробелы справа, никаких ограничений на используемые символы нет, но разные ОС могли
специальным образом трактовать некоторые символы, поэтому рекомендуется придерживаться разумной достаточности
(например, в штатной ДОС не начинать имена с пробелов и не использовать в имени ",". В других ОС не
всегда получится использовать в именах " " - пробел).
Регистр символов важен. Вообще, базовые агатовские ОС не имели каких либо готовых функций преобразования регистра,
хотя, с другой стороны, кодовая таблица была такова, что регистр букв задавался старшим битом, так что
преобразование было очень простым.
Некоторые программы могли включать в имена своих файлов нечто, похожее на расширения, но это, в значительной
степени, либо дань моде (закос под популярную тогда MS-DOS), либо уточнения базовых типов (т.е. для некоторого
удобства некоторых пользователей). Для ядер операционных
систем такие имена всё равно оставались просто именами.
Некоторые операционки по команде
вывода каталога отображают неполные имена, ограничиваясь, например, первыми 20..24-я знаками. Это было нужно,
чтобы каждая запись помещалась на одну строку в текстовом режиме 32x32. Например, так сделано в ранней ДОС, которая шла с
Бейсик-60 и в её близких родственниках, вроде ALV Super DOS.
Про Школьницу, РАПИРу и Робика
Тут запутаться не сложно, но дело обстоит так: в Новосибирске ВЦ СОАН, в начале 80-х, была предпринята попытка
разработать комплект программ для обучения программированию детей. Строго русскоязычных: русский синтаксис паскаль-подобного
языка (с расширениями типа кортеж и ещё кой чем, что сейчас популярно в php, например) и всякое прочее (простые программки-примеры, обучающие программки,...). Исходно её начинали
делать под Apple ][, может быть даже закончили (не видел, не знаю), но затем, в связи с появлением Агата, переориентировали на него.
Официально всё это вместе назвали "Программный комплекс Школьница". Именно так было указано в заставке.
Полное название можно было эротично сокращать до одного слова: "мне нужна Школьница" или "я хочу Школьницу" ;)).
Пожалуй, сейчас сложно сказать, был ли это синоним термина "операционная система" - архитектура комплекса была
не совсем похожа на нынешние ОС.
Комплекс состоял из трех компонент: Копировщик дисков (копировал посекторно 1:1, использовал всю доступную память,
поэтому не уживался с другими компонентами), Диалоговый Отладочный Комплекс (ДОК, включал в себя отладчик двоичных программ, текстовый редактор и компилятор ассемблера) и Интерпретатор РАПИРА.
РАПИРА имел два режима работы - собственно РАПИРА и Робик. У них сходный синтаксис, но Робик был предназначен
для разработки т.н. "исполнителей". Если программы на РАПИРА - привычные, процедурно-ориентированные, то РОБИК
- скорее уклон в сторону объектного программирования. Здесь не было объектов в нынешнем привычном виде, но некоторые процедуры
можно объявить как вызываемые из диалога интепретатора. Т.е. после запуска Робик-программы пользователь
возвращался в режим командной строки интерпретатора, но теперь из неё можно было, помимо
стандартных команд, вроде "КАТАЛОГ;" или "РАПИРА;", вызывать команды запущенного "исполнителя". Например:
"вверх;", "вниз;" - какая-нибудь "черепашка", "дежурик" или "машинист" ползли в нужную сторону или делали что нибудь ещё.
Т.е. в Робике разделялись интерпретация команд и исполнительное ядро программы.
Переключение режимов вызывалось командами: "РОБИК;" и "РАПИРА;".
ДОК и РАПИРа имели общий исходный и загрузочный код трех компонент: RWTS (драйвер дисковода), IOSub (драйвера текстового режима
видеосистемы и клавиатуры) и DOS (драйвер файловой системы). В версии "Школьницы" для седьмого Агата эти части хранились
в одном экземпляре. Также общим был и встроенный текстовый редактор, но его загрузочные версии всё же различались и хранились отдельно.
RWTS Копировщика дисков тоже имела общий исходник с основной RWTS, но загрузочные версии отличались расположением в памяти.
В дальнейшем, с появлением ИКП (Инструментальный Комплекс Программиста) и девятого Агата, комплекс разделили и от названия "Школьница" отказались.
Вроде бы, это было связано с какими-то особенностями оформления документов на программный продукт. Копировщик
дисков был заброшен (его заменил просто "Копировщик", который работал не только с дисками, но и с файлами,
к тому же поддерживал 840кб-дисководы), а РАПИРА и ДОК стали отдельными продуктами (хотя общего между ними осталось очень много),
входящими в состав ИКП.
Другие мелочи...
... которые сразу не угадаешь:
Клавиша F1 в Школьнице (т.е. в РАПИРе, Робике, Диалоговом Отладочном Комплексе) очень часто
используется для отмены различных операций.
Боковая клавиатура Агата - белые клавиши с цифрами и математическими знаками - функциональная.
Т.е. необязательно, что программы будут воспринимать эти клавиши просто как цифры.
Чтобы отличать их от трех красных F1, F2, F3, белые, в инструкциях к Агату, предваряются литерой "ф":
ф1, ф2...ф=.
РАПИРА имеет свое название не от холодного оружия. Это - аббривеатура:
Расширенный Адаптированный Поплан-Интерпретатор, Редактор, Архив. Такая расшифровка упоминается не только в
Википедии, но и в довольно старом бумажном словаре по информатике.
Клавиша РЕД, имеющая код клавиши Escape - 27, в штатном Бейсике, системном мониторе, Школьнице
и многих других ОС имеет одно и то же назначение - свободное перемещение курсора. Это очень просто:
если вы нажимаете стрелку влево - из введенной командной строки выбрасывается последний введенный символ
(с экрана он при этом не исчезает), если нажимаете стрелку вправо - в строку добавляется символ, на котором стоял
курсор. Т.е. чтобы вновь выполнить команду, которая ещё видна на экране, или ввести имя файла из
каталога, выведенного ОС, достаточно просто пробежать по нему курсором. Ну а клавиша РЕД отменяет
эту возможность и позволяет просто перемещать курсор по экрану (не затрагивая буфер ввода).
Во многих играх и программах её назначенние
также стандартизировано - отказ от текущей операции, выбора...
Дисковые объёмы: свободное пространство или размеры файлов на Агате принято считать в блоках.
Блок - 256 байт или четверь килобайта. Но есть небольшое отличие между разными ОС: учитывать ли
в каталожном размере файла TSList или нет ? Примерно на каждую сотню блоков приходится по одному
TSListу. DOS3.3, когда записывает файл, учитывает TSList - т.е. размер указывает на занятое
файлом пространство, в то время как Школьница не учитывает TSList - т.е. размер соответствует
объёму сохраненных данных. Никаких особых проблем это не вызывает, т.к. каталожный размер не используется
операционными системами для файловых операций, он нужен лишь при выводе каталога пользователю.
Нулевой слот принтера в Агат-Авторе: если в настройках печати указать нулевой слот
в качестве слота принтера - Агат-Автор будет пытаться показать предпечатный вариант текста - отформатированный,
с номерами страниц, колонтитулами.
Значки "?" или "/" или "*" или "=" в некоторых программах и ОС, будучи подставленными вместо имени файла,
иногда могут иметь неожиданный эффект - программа или ОС выведет каталог файлов и предложить выбрать
один из них. В таком же качестве выступает и клавиша "стрелка вправо" в СЧМ.
Порядок именования дисководов в Агате следующий: обычно, ДОСу явно можно указать нужный контроллер
и дисковод в параметрах командной строки, например так: CATALOG, S5, D2 - второй дисковод на контроллере
в пятом слоте. Но, например, в Школьнице дисководы обозначаются одной цифрой от "1" и далее - сколько найдено.
Причём в ранних версиях Школьницы нельзя было выбирать слот, а цифра обозначала только один из
двух дисководов на текущем контроллере (т.е. Школьница не поддерживала более одного контроллера, если это не предусмотрено
пользовательской программой). В более поздних версиях (вероятно, начиная с ИКПшной) Школьница стала искать все доступные дисководы и нумеровать
их "насквозь" от "1". В других ОС также придерживаются либо этого способа либо ДОС-овского.
УПР-S или ф4 - во многих играх, даже если это не указано явно, переключают звук.