City #52
24 февраля 2001

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



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

  (c) П.Федин

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

      LD C,127     ;адрес регистра данных
      LD A,E       ;установка номера дорожки
      OUT (63),A
      LD HL,(23784);берем адрес таблицы секторов для проверки
8330  LD B,3       ;3 попытки
      LD A,(HL)    ;берем номер сектора из таблицы
      OUT (95),A   ;установка сектора
      PUSH HL      ;сохранение адреса таблицы секторов
8336  DI           ;запрет прерываний
      LD A,128     ;чтение сектора
      OUT (31),A
      PUSH BC      ;сохранение количества попыток
      CALL 16357   ;чтение  данных  по адресу из HL (в  пзу,  не
                    страшно)
      IN A,(31)    ;все в порядке ?
      AND 127
      POP BC       ;восстановление счетчика попыток
      JR Z,8358    ;если все в порядке, то следующий сектор
      DJNZ 8336    ;следующая попытка
      LD HL,23766  ;есть 1 битый сектор
      INC (HL)
8358  POP HL       ;восстановление адреса таблицы секторов
      LD A,(HL)    ;берем номер текущего сектора
      INC HL       ;берем адрес номера следующего сектора
      CP 1         ;конец таблицы ?
      JR NZ,8330   ;если нет, то повтор
      EI           ;разрешение прерываний
      RET          ;возврат
────────────────────────────────────────────────────────────────
Адрес 8367. Запись байта 1 pаз. В  регистр  D поместите  байт, в
C - 127 и выдайте команду записи на вг-93. Используется  также с
адреса 8369 (запись байта несколько раз; все для 8367  плюс в  B
количество выдач).
8367  LD B,1    ;запись 1 раз
8369  IN A,(255);ожидание DRQ или INTRQ
      AND 192
      JR Z,8369
      RET M     ;если поступил INTRQ, то возврат
      OUT (C),D ;выдача байта
      DJNZ 8369 ;повтор до конца
      RET       ;возврат
────────────────────────────────────────────────────────────────
Адрес 8381. Форматирование диска. Установите 23770, 23767, 23782
и 23784.
8381  LD HL,23767 ;берем число форматируемых дорожек
      LD B,(HL)
      XOR A       ;дорожки проверять
      INC HL
      LD (HL),A
      LD E,255    ;начнем с дорожки 0
      PUSH BC     ;сохранение количества дорожек
8390  INC E       ;следующая дорожка
      LD A,E
      LD B,27     ;позиционирование
      CALL 15940
      CALL 8171   ;выбор верхней стороны диска
      CALL 13021  ;печать номера дорожки и форматирование ее
      LD A,(23770);берем флаг количества сторон
      CP 128      ;форматировать 2 стороны ?
      JR NZ,8417  ;если да, то
      CALL 8182   ;выбор нижней стороны диска
      CALL 13071  ;печать номера дорожки и форматирование ее
8417  POP BC      ;восстановление количества дорожек
      DJNZ 8390   ;если еще не все, то повтор
      RET         ;возврат
────────────────────────────────────────────────────────────────
Адрес 8421. Удаление буфера с изменением памяти. На входе  уста-
новите переменные 23734, 23800, 23820 и 23832.  Выход:  в  23832
записывается 255, а если в 23820 выл 0, то туда также засылается
255. Используется также с адреса 8433 (изменение памяти, работа-
ет только с 23734 и 23832).
8421  PUSH AF     ;сохранение AF
      LD A,(23800);ничего не делать ?
      CP 255
      JR Z,8476   ;если да, то возврат
      POP AF      ;восстановление AF
      CALL 10608  ;удаление буфера
8433  PUSH AF     ;сохранение AF
      LD A,(23734);изменение разрешено ?
      CP 244
      JR Z,8476   ;если нет, то возврат
      XOR A
      LD HL,23832 ;подтверждение есть ?
      OR (HL)
      LD (HL),255 ;в следующий раз подтверждение будет
      JR Z,8476   ;если его не было, то возврат
      LD A,(23820);буфер есть ?
      OR A
      LD HL,23747 ;начало первого блока
      LD DE,23859 ;начало второго блока
      JR NZ,8465  ;если есть буфер, то второй блок смещен на 257
      LD DE,24116 ;байтов
8465  LD B,45     ;длина блоков - 45 байтов
8467  LD C,(HL)   ;меняем блоки местами
      LD A,(DE)
      LD (HL),A
      LD A,C
      LD (DE),A
      INC HL
      INC DE
      DJNZ 8467
8476  POP AF      ;восстановление AF
      RET         ;возврат
────────────────────────────────────────────────────────────────
Адрес 8478. Очистка буфера редактора.
8478  LD HL,(23641);берем адрес буфера редактора
      LD (HL),13   ;ENTER
      LD (23643),HL;установка курсора
      INC HL       ;конец области
      LD (HL),128
      RET          ;возврат
────────────────────────────────────────────────────────────────
Адрес 8490. Восстановление командной строки. Установите 23840.
8490  LD DE,(23641);символы переносить в буфер редактора
      LD HL,23840  ;из 23840
      CALL 688     ;перенос символов
      RET          ;возврат

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




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

Похожие статьи:
Как ZХ F0RМАТ дискутировал... - "Не забудьте написать, что я- тупой писака, помешанный на критикантсве и начисто лишенный чувства юмора".
Coding - Texture Mapping - реализация от SaiR00S/EI.
Конкурс - Конкурс продолжается...

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