≡ Передовица » Hardware » Полезное » Начинающему агатоводу
Начинающему агатоводуЭтот текст, в основном, предназначен для желающих освоить "Агат" сейчас, когда реальные машины становятся редкостью и добыв некоторое железо из чужого тёмного угла хочется чтобы оно сначала хоть как -то заработало и было возможно оценить: какой объём усилий ещё придется вложить, прежде чем оно заработает на полную ? Некоторые советы могут пригодится и тем, кому для ознакомления достаточно освоения эмуляторов. Понятно, что для полного погружения нужно прочитать документацию, тем более она вполне доступна, но, во первых - некоторые важные замечания там отсутствуют, во вторых - даже если они там есть, их ещё нужно заметить среди прочего текста. Таким образом можно назвать эту страничку "Конспект неочевидных особенностей". Я не буду здесь подробно описывать методики ремонта, речь пойдет только о диагностике с точностью до блока, более глубокие подробности не являются чисто агатовскими и многократно описывались до меня. И всё же - небольшой текст по ремонту Агата. Внешние и некоторые другие отличия Агат-7 и Агат-9Сначала надо определится с моделью машины. Кратко:
Отличить материнку девятки от семёрки легко: у девятки процессор находится вблизи разъёма питания, на семёрке его просто нет. На плате семёрки только одна микросхема ПЗУ (точнее - две: одна над другой), у девятки - куча ПЗУшек с окошками. Слоты и разъёмы расширения, plug-and-playРаботая с Агатом следует различать два понятия: слот и разъём. Разъём - механическое устройство. Слот - разъём, имеющий собственное адресное пространство. Нередко эти понятия путают, тем более что слот 1 соответствует разъёму X1, но уже разъём X2 не является полноценным слотом в семёрке. Разъёмы расширения в девятке и семёрке идут в разном порядке:
Нередко программы, взаимодействующие с устройствами в слотах, сообщают или запрашивают номер разъёма, в котором установлено "их" устройство, однако они имеют ввиду именно номер слота. Агат аппаратно является p'n'p-машиной, никаких конфликтов прерываний или адресов у него
не возникает, т.к. каждый слот имеет собственное адресное пространство (а прерываний вообще всего два на всю
систему и те редко используются), но некоторым программам лень проверять конфигурацию (или у них есть ошибки в
механнике p'n'p) и они предполагают, что работают на стандартном Агате:
Аппаратные особенности некоторых разъёмов приводят к следующим ограничениям: * Разъём иногда не впаивался в плату и предназначался, вероятно, для некоторых версий "Ячейки 121" и некоего "Secam-кодера" (мы бы хотели найти эти устройства!). Имеющиеся у нас версии "Ячейки 121" предназначены для других слотов. Разъём имеет ряд дополнительных сигналов: с гнезда RGB и дисплейного контроллера, расположенного на системной плате. ** Этот разъём выпадает из общего адресного пространства и правил формирования адресов для слотов. Некоторые сигналы к нему не подведены, некоторые из контактов использованы не так, как на других модулях. Этот слот используется только модулем процессора, компьютер без этого модуля будет не особенно интересен. *** Модуль ДопОЗУ девятки можно устанавливать только сюда, иначе возможен конфликт с базовым ОЗУ. **** Этот разъём на семёрке в чём-то похож на X2 девятки. Только в него допустимо устанавливать модуль ДопОЗУ семёрки, если объём базового ОЗУ превышает 32 Кб. Однако нам не известно о существовании серийных семёрок с таким объёмом. Если найдёте подобный компьютер - сообщите нам :) Если при сборке машины вы отклоняетесь от этой конфигурации - что нибудь может не заработать. Сисмон работает в любом случае (если процессор на месте). Можно также говорить о существовании слота 7, но он не имеет разъёма и используется встроенным в системную плату дисплейным контроллером (ДК), а также некоторыми глобальными программными переключателями. Если в машину устанавливается два устройства, использующих общее адресное пространство (на практике это относится к одинаково сконфигурированным модулям памяти), они должны быть установлены в соседние слоты - при этом задействуется механизм подавления - т.е. устройства не будут пытаться отзываться одновременно на одни и те же адреса. Эта ситуация не возникает в стандартной конфигурации, но возможна в нестандартной - читайте мануал для подробностей, если захочется поэкспериментировать (более-менее стандартный случай: модуль ДопОЗУ 128 кб в девятке). Модули ДопОЗУ и ЭмПЗУ семёрки - одно и то же устройство, но сконфигурированное различным образом. Отличия в перемычках или переключателях. Здесь все подробности. Как проверить конфигурацию ? Если машина отзывается и приглашение сисмона есть ("*"), ничего не загружая, включив машину, пишем: Cx00 и нажимаем Ввод. Вместо x подставляем цифры от 1 до 6 включительно (это номер слота, который нас интересует). Получаем ответы устройств. Что они означают ?
Больше подробностей о шине Агата можно узнать на страничке "Сигналы системной шины Агата". Первое включениеВключение машины происходит таким образом:
Это всё хорошо, если есть картинка на мониторе. А если нет ? Можно ориентироваться на динамик - если при включении машины он явно пискнул - значит, как миниум, ЦПУ и сисмон работают - синтез звука в Агате только программный. Насчёт дисководовВероятно, вы уже знаете, что дисководы Агата - которых было два: от Apple ][ на 140 кб и свой собственный - на 840 кб, совместимы только сами с собой. Причем даже дискеты записанные в дисководе на один формат не будут читаться в дисководе другого формата. Однако физический привод дисководов 840 кб является вполне стандартным и в его качестве, при некотором умении, может даже выступать дисковод от PC - нужно только снизить скорость вращения шпинделя с 360 об/м до 300 об/м (иногда для этого достаточно переключить джампер, иногда - перепаять один провод). Но вот приводы 140 кб - это нечто. И о нём замечания ниже:
У вас есть дискета, которая вроде загрузочная, ну хотя бы агатовская, но загрузить машину не удаётся ? Во первых - убедитесь что дисковод отводит головку ко внешней стороне дискеты. Во вторых: попробуйте после пяти секунд вращения дискеты нажать УПР-СБР и в ответ на приглашение "*" набрать команду 801L. Вылезет экран текста - это дизассемблированный участок памяти. Вопрос в том - осмысленной он или нет ? Осмысленный участок не содержит слишком большого числа "???" (недокументированная команда), не будет часто ссылаться на области памяти за пределами 00..FF, 800..8FF и C000..FFFF и не будет содержать большого количества одинаковых команд (однако, вы можете встретить четрые подряд идущих команды ASL - это расчёт адреса загрузчика из номера слота дисковода). Если дисковод ничего не читает (т.е. имеет поломку лично, либо шлейф, либо контроллер), то любые попытки шевелить головку руками, прижимать крышки и прочее шаманство в результате приведут к тому, что участок с адреса 801 будет заполнен мусором (точнее, его содержимое не будет меняться после включения машины). Если же что-то прочитается (и не просто "что-то" - драйвер загрузки будет читать данные только если получит корректное поле адреса) - в ответ на команду 801L вы увидите вполне осмысленный код. Он может различатся для разных операционок, но отличить его от мусора можно в две секунды одним глазом. Таким образом, если буфер чем-то заполнился, но ОС не грузится - проблема, вероятно, в испорченной дискете (или не соответствующей версии машины), грязной головке, неправильной юстировке шагового двигателя. Практически невероятно, чтобы виноват был контроллер (разве что повреждены последние байты ПЗУ загрузчика). Аппаратная совместимость компонентДевятка и семёрка, а также их модификации от разных заводов, имеют похожие и одинаковые блоки, которые иногда можно взаимозаменять:
Сбои памятиАгатовская память имеет тенденцию к деградации. То ли там изоляционные свойства диэлектрика ухудшаются, то ли ещё какая-то бяка, но по мере использования незаметно подкрадывается пушной зверёк. Например, через 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 и затем вам предстоит перебором найти нужный видеорежим. Т.к. видеоконтроллер перестанет отображать текст, набирать нужно вслепую: Семёрка:
Девятка:
В девятке, в некоторых режимах, можно переключать палитры: C058 или C059, C05A или C05B. Если на экране виден мусор - значит файл содержал не картинку. Вернутся назад в текстовый режим можно комбинацией УПР-СБР. Форматы файлов, кодовая таблицаВсего штатная файловая система поддерживает восемь типов файлов: T I A B S П К Д. Обозначения условные и в различных ОС могут слегка отличаться, особенно последние четыре. Формат файлов различен, и, как правило, операционная система будет отказываться читать содержимое файла одного типа командой, относящейся к файлам другого типа (ошибка FILE TYPE MISMATCH). Т.е. не следует считать, что тип файла - это что-то вроде расширения в других ОС, которое можно легко сменить. Наиболее стабильные типы (т.е. одинакого понимаемые различными программами и ОС) следующие:
Типы П, К и Д ранние ОС отображали так же как оригинальная 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кб-дисководы), а РАПИРА и ДОК стали отдельными продуктами (хотя общего между ними осталось очень много), входящими в состав ИКП. Другие мелочи...... которые сразу не угадаешь:
А теперь читайте документацию ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |