City #51
09 декабря 2000

Ликбез - ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ TR-DOS 5.04 (5.03)

    ░░░     ░░░░  ░░░░  ░░░░ ░░░░░ ░░░░▒▒▒▒░ ░░░░▒▒▒▒░  ░▒▒▒░
   ▒▓█▒    ░▓█▓░ ░▓█▓▓  ▒█▓▓ ▓▓█▓░ ▓▓█▓█▓█▓░ ▒▓█▓█▓█▓  ▒▓█▓█▓░
  ░▓█▓▓    ▒█▓▓░ ▒▓▓█▓ ░█▓▓▓▒▓▓▓░ ░██▓▓▓█▓█  ▓▓▓█▓▓▓▓  ▓█▓▓▓█▓░
  ▓█▓█▓░   ▓▓█▓░░█▓█▓▓ ▒▓█▓▓▓█▓▓  ▒█▓█▓█▓█▓  ▓▓█▓█▓█▒  ▒▓▓▒█▓█░
  ░▓█▓▓▒    █▓▓░▓▓▓▓█▓  ▒▓▓▓█▓▓░   ▒█▓▓       ▓▓█░      ░░░▓█▓░
  ▒█▓█▓▓    ▓█▓▓▓█▓█▓▓  ▒█▓█▓█▒    ▒▓█▓░▒▒░   ▓█▓▒▒▒▒    ░▓█▓▓
  ▓▓█▓▓▓░   █▓▓▓█▓▓▓█▓  ▒▓▓▓█▓▒    ▒█▓▓▓█▓▓░  ▓▓█▓▓▓▓    ▒▓▓▓░
 ░▓█▓▒▓█▒   ▓█▓█▓█▓█▓▓  ▒█▓█▓█▓░   ▒▓█▓▓▓█▓▓  ▓█▓▓▒▒▒    ░▓█▓▓░
 ▒▓▓▒░▓▓▓   █▓▓▓█▒▒▓█▓  ▒▓▓▓█▓▓▒   ▒█▓▓ ▓▓▓▓░ ▓▓█░     ░░ ░██▓▓
░▓▓█░ ▓█▓░  ▓█▓█▓░▒█▓█▒ ▒█▓▓▒█▓█░  ▒▓█▓ ▒█▓█░ ▓█▓█▓█▓░░▓▓▓▓█▓█▓
▒▓▓▓  ▒▓█▓  █▓▓▓░ ▒▓█▓░ ▒▓▓▓░▓▓▓▓  ▒█▓▓▓█▓▓▓  ▓▓█▓▓▓█ ▓▓█▓▓▓█▓▒
▒█▓▒  ░█▓▓░ ▓█▓▓  ▒█▓▓  ▒█▓▓ ▒▓█▓░ ▒▓█▓█▓█▓░  ▓█▓█▓█▓ ░▓▓█▓█▓▓░
░░░░   ░░░░ ░░░░  ░░░░  ░░░░  ░░░░ ░░░░░░░    ░░░░░░░   ░░░░░

  (c) П.Федин

  ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ TR-DOS 5.04 (5.03)
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ДЛЯ ПРОФЕССИОНАЛОВ, А ТАКЖЕ ДЛЯ ТЕХ, КТО ХОЧЕТ ИМИ СТАТЬ
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                          продолжение

Адрес 8138. Определение количества дорожек дисковода. Вход: ус-
тановите время перемещения головки дисковода.  Выход: в 23767 и
регистре A будет количество дорожек дисковода.
8138  CALL 15880  ;берем время перемещения головки
      OR 17       ;позиционирование на дорожку 50
      LD B,A
      LD A,50
      CALL 15940
      LD A,2      ;затем на дорожку 2
      CALL 15940
      CALL 15869  ;задержка в 725779 тактов
      IN A,(31)   ;головка в исходном положении ?
      AND 4
      LD A,80     ;если нет, то у дисковода 80 дорожек
      JR Z,8167
      LD A,40     ;иначе 40
8167  LD (23767),A;установка количества дорожек
      RET         ;возврат
────────────────────────────────────────────────────────────────
Адрес 8171. Выбор верхней стороны диска.  Установите 23830.  Ис-
пользуется также с адреса  8176  (загрузка  системного регистра,
код - в  аккумуляторе).  Вы  можете  также использовать с адреса
8179 для прямого вывода в порт 255.
8171  LD A,(23830);берем копию системного регистра
      OR 60       ;формат MFM, верхняя сторона, выключение сбро-
                   са и готовности
8176  LD (23830),A;запоминаем копию системного регистра
8179  OUT (255),A ;установка системного регистра
      RET         ;возврат
────────────────────────────────────────────────────────────────
Адрес 8182. Выбор нижней стороны диска. Установите 23830.
8182  LD A,(23830);берем копию системного регистра
      AND 111     ;формат MFM, нижняя сторона, выключение сбро-
                   са и готовности
      JR 8176     ;установка системного регистра
────────────────────────────────────────────────────────────────
Адрес 8189. Форматирование дорожки. В регистр Е поместите ее но-
мер и спозиционируйте головку дисковода. Из переменных установи-
те 23768, 23782, 23784 и  обнулите 23766.  Используется  также с
адреса 8137 (проверка дорожки; установите 23768, 23784 и обнули-
те 23766 и спозиционируйте головку).
8189  DI           ;запрет прерываний
      LD A,244     ;запись дорожки
      OUT (31),A
      LD HL,(23782);берем адрес  таблицы секторов для форматиро-
                    вания
      LD C,127     ;адрес регистра данных
8199  LD B,10      ;10 раз 78 (первый пробел)
      LD D,78
      CALL 8369    ;запись байта заданное число раз
      LD B,12      ;синхропромежуток
      LD D,0
      CALL 8369
      LD B,3       ;синхроимпульс
      LD D,245
      CALL 8369
      LD D,254     ;1 раз 254 (адресная метка идентификатора)
      CALL 8367    ;запись байта 1 раз
      LD D,E       ;номер дорожки
      CALL 8367
      LD D,0       ;номер стороны (в TR-DOS всегда 0)
      CALL 8367
      LD D,(HL)    ;номер сектора из таблицы
      CALL 8367
      LD D,1       ;длина сектора - 256 байтов
      CALL 8367
      LD D,247     ;запись контрольной суммы
      CALL 8367
      LD B,22      ;второй пробел
      LD D,78
      CALL 8369
      LD B,12      ;синхропромежуток
      LD D,0
      CALL 8369
      LD B,3       ;синхроимпульс
      LD D,245
      CALL 8369
      LD D,251     ;адресная метка данных
      CALL 8367
      LD B,0       ;данные (256 нулей)
      LD D,0
      CALL 8369
      LD D,247     ;запись контрольной суммы
      CALL 8367
      LD B,60      ;третий пробел
      LD D,78
      CALL 8369
      LD A,(HL)    ;берем адрес номера следующего сектора
      INC HL
      CP 16        ;конец таблицы ?
      JR NZ,8199   ;если нет, то форматирование  следующего сек-
                    тора
      LD B,0       ;пробел до конца дорожки
      CALL 8369
      JP M,8310
      CALL 8369
8310  IN A,(31)    ;берем состояние контроллера
      AND 64       ;запись запрещена ?
      JP NZ,16185  ;если да, то сообщение READ ONLY
8317  LD A,(23768) ;дорожку проверять ?
      OR A
      RET NZ       ;если нет, то возврат
Внимание!!! Перед возвратом или выходом по ошибке надо разрешать
прерывания.

                    продолжение следует ...




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
F-lame - Смокеры откопали топор войны: Always VS Body.
Рассказ - Игра (окончание).
Hidden Part - Данный текст был набран в состоянии невменяемости...

В этот день...   25 сентября