User Tag List

Показано с 1 по 10 из 31

Тема: Жесткий диск для УКНЦ и картридж УДС

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #23

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,247
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Прошивка и формат диска

    В присоединенном файле дизассемблированная прошивка с комментариями.

    По поводу формата диска. Все разделы расположены начиная с дорожки 1, разделы выровнены по дорожкам. На нулевой дорожке записаны сектора с описанием геометрии диска и таблицей разделов. Сама прошивка осуществляет поиск по четырём сторонам и первым пяти секторам в дорожке.
    Формат сектора описания разделов:
    Слово 0 - ключ 052251, по этому значению прошивка считает, что это сектор с описанием разделов. В противном случае ищется следующий сектор.
    Слово 1 - 0177757, не используется, назначение не известно;
    Слово 2 - 0177377, не используется, назначение не известно;
    Слово 3 - 02000, не используется, назначение не известно;
    Слово 4 - количество секторов в дорожке на одной сторон;
    Слово 5 - количество секторов в дорожке на всех сторонах. Если это слово (слово 5) поделить на слово 4, то получим количество сторон.
    Со слова 6 по слово 13, всего восемь слов, это таблица начальных дорожек для разделов с HD0 по HD7.
    Со слова 14 по слово 21, всего восемь слов, это таблица размеров разделов в секторах, с HD0 по HD7.
    Если раздела нет, то в соответствующих словах записаны нули.

    Распределение памяти, используемое прошивкой:
    В ОЗУ ЦП используется только ячейка с адресом 0140, так называемый вектор. В нём хранится адрес блока параметров для операций чтения-записи.
    Сам блок параметров состоит из пяти слов:
    Слово 0 - байт ошибок. 0 - ещё идёт операция, положительный байт - операция завершена успешно, отрицательный байт - произошла ошибка.
    Слово 1 - номер начального блока для операции;
    Слово 2 - адрес в памяти ОЗУ ЦП;
    Слово 3 - количество считываемых/записываемых слов. Положительное значение - чтение, отрицательное - запись. Ноль - запрос объёма раздела.
    Слово 4 - номер устройства.
    Для реализации запроса объёма тома (SPFUN 373) необходимо в слово 4 записать номер устройства, а в слово 3 - ноль. Ответ будет получен в слове 1.

    В ОЗУ ПП сама программа и данные располагаются в области векторов прерываний и используют неиспользуемые ячейки.
    0120 - 0171 - там располагается подпрограмма для запуска выполнения операций.
    0204 - байт ошибок;

    С 0206 по 0257 располагается считанная информация с сектора описания разделов:
    0206 - 0177757, не используется, назначение не известно;
    0210 - 0177377, не используется, назначение не известно;
    0212 - 02000, не используется, назначение не известно;
    0214 - количество секторов в дорожке на одной сторон;
    0216 - количество секторов в дорожке на всех сторонах. Если это слово (слово 5) поделить на слово 4, то получим количество сторон.
    0220 - 0237 - таблица начальных дорожек для разделов с HD0 по HD7;
    0240 - 0257 - таблица размеров разделов в секторах, с HD0 по HD7;

    0260 - номер блока. Меняется во время операции.
    0262 - адрес в ОЗУ ЦП в формате РА. Меняется во время операции.
    0264 - количество слов, меняется во время операции.
    0266 - размер текущего раздела.
    0270 - сохраняется ССП перед операцией. Хотя эта ячейка являетя адресом первой видеостроки, но видеострока невидимая, так что никакого эффекта нет.
    0274 - номер устройства * 2, индекс для доступа к таблицам разделов.
    0276 - адрес блока параметров в ОЗУ ЦП в формате РА.

    Блок с 0344 по 0355 используется для засылки в регистры IDE:
    0344 - номер стороны, в регистр 0110002;
    0346 - номер дорожки (старший байт), в регистр 0110004;
    0350 - номер дорожки (младший байт), в регистр 0110006;
    0352 - номер сектора, в регистр 0110010;
    0354 - количество секторов, в регистр 0110012.

    0356 - если при переводе из номера блока с CHS возникла ошибка, то там -1, иначе 0.

    0360-0401 - подпрограмма для запуска начальной инициализации и считывания сектора с описанием разметки. Используется только при первоначальном запуске прошивки.

    Таким образом, чтобы прочесть/записать информацию, необходимо сформировать блок параметров из пяти слов. Обязательно очистить байт ошибок. В ячейку 0140 записать адрес этого блока. В ПП вызвать подпрограмму по адресу 0120. Анализировать байт ошибок. Как только он стал ненулевой, то операция завершилась. Отрицательный байт - ошибка, положительный - всё успешно.
    Вложения Вложения
    Последний раз редактировалось Alex_K; 30.01.2022 в 17:23.

    Эти 6 пользователя(ей) поблагодарили Alex_K за это полезное сообщение:

    dk_spb(30.01.2022), mig_25(31.01.2022), nzeemin(30.01.2022), Radon17(30.01.2022), Titus(30.01.2022), tnt23(31.01.2022)

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. FLASH-картридж на 29ЕЕ010 для УКНЦ.
    от falanger в разделе ДВК, УКНЦ
    Ответов: 112
    Последнее: 20.05.2019, 12:30
  2. Жесткий диск СМ 5509
    от BYTEMAN в разделе Разное
    Ответов: 2
    Последнее: 14.02.2019, 09:13
  3. Жесткий диск для ZX
    от Sonic в разделе Барахолка (архив)
    Ответов: 13
    Последнее: 27.02.2007, 11:24

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •