City #45
09 июня 2000

Ликбез - полное описание и полный дизассемблер ПЗУ TR-DOS (продолжение).

             @@@                    @@@@
            @  @                    @
           @   @                     @
           @   @  @   @   @  @@    @@@@    @@@    @@@
           @   @  @   @   @@@  @  @    @  @   @  @   @
           @   @  @   @   @ @     @    @@ @@@@  @    @
        @  @   @  @   @  @@  @  @ @    @  @    @   @@
         @@     @@ @@@ @@ @   @@   @@@@    @@@@      @
                                                  @@@ @
                                                 @    @
(c) П.Федин                                       @@@@

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

Адрес 7332. Определение адреса описателя файла в буфере по его
номеру в секторе. В C должен быть номер описателя в секторе. На
выходе в HL будет его адрес.
7332  LD L,C     ;перевод номера описателя файла в двухбайтную
      LD H,0     ;форму
      ADD HL,HL  ;умножение его на 16
      ADD HL,HL
      ADD HL,HL
      ADD HL,HL
      LD BC,23845;адресуемся от начала буфера
      ADD HL,BC
      RET        ;возврат
────────────────────────────────────────────────────────────────
Адрес 7344. Установка и проверка имени файла. Имя файла должно
быть помещено на стек калькулятора. Выход: если файл с таким
именем есть, то будет установлен флаг Z, а в рег. C и в 23838
будет его номер, а если такого файла нет, то флаг Z сбросится.
Используется также с адреса 7347 (поиск файла, установите 23773
и 23781, выход как и из 7344).
7344  CALL 7255   ;установка имени файла
7347  CALL 1000   ;начнем с сектора 0
      LD B,128    ;всего 128 файлов
      LD C,0      ;начнем с нулевого описателя в секторе
7354  PUSH BC     ;сохраним номер файла и счетчик
      CALL 7332   ;определим начало описателя в буфере
      CALL 1292   ;проверка и обработка достижения конца буфера
      POP BC      ;восстановление номера описателя в секторе и
      PUSH BC     ;счетчика файлов без изменения стека
      LD A,C      ;просмотрен весь сектор ?
      CP 16
      JR NZ,7373  ;если да, то
      POP BC      ;снятие номера описателя и счетчика со стека
      LD C,0      ;нулевой описатель в секторе
      JR 7354     ;повтор проверки
7373  LD DE,23773 ;берем адрес части описателя для проверки
      LD A,(23814);берем длину этой части
      LD B,A
      XOR A       ;конец каталога ?
      CP (HL)
      JR NZ,7387  ;если нет, то переход на проверку описателя
      POP BC      ;снятие номера описателя и счетчика со стека
      JR 7396     ;выход с флагом NZ
7387  CALL 10003  ;сравнение частей описателей
      POP BC      ;восстановление номера описателя и счетчика
      JR Z,7399   ;если части описателей совпали, то на выход
      INC C       ;следующий описатель
      DJNZ 7354   ;повтор до конца
7396  OR 255      ;выключение флага Z
      RET         ;возврат
7399  LD A,128    ;определение номера файла
      SUB B
      LD C,A
      LD (23838),A;помещение его в 23838
      XOR A       ;сброс флага Z
      RET Z       ;возврат
────────────────────────────────────────────────────────────────
Адрес 7408. Поиск файла. Часть описателя,  подлежащую  проверке,
установите по адресу  23773 и  установите 23814.  Если  файл  не
найден, то будет сброшен флаг Z и в 23823 будет 255, а если най-
ден, то включится флаг Z, а номер файла будет в рег. C и по ад-
ресам 23823 и 23838.
7408  CALL 7347  ;поиск файла
      LD HL,23823
      LD (HL),C  ;загрузка регистра C в 23823
      RET Z      ;если файл найден, то возврат
      LD (HL),255;помещаем в 23823 255
      RET        ;возврат
────────────────────────────────────────────────────────────────
Адpес 7419. Выполнение команды RETURN. Установите 23611, 23836 и
23827.
7419  CALL 7541    ;если идет проверка на синтаксис, то  возврат
      CALL 8421    ;изменение памяти
      RES 3,(IY+1) ;установка режима ввода "K"
      CALL 562     ;восстановление старого ERR_SP
      LD SP,(23836);восстановление стека
      LD HL,(23613);берем адрес перед адресом из ERR_SP
      DEC HL
      LD A,18      ;там находится 18 ?
      CP (HL)
      JR NZ,7449   ;если нет, то возврат
      DEC HL       ;установка ERR_SP на адрес ниже
      LD (23613),HL
7449  RET          ;возврат

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




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

Похожие статьи:
ZXNet - Устав телекоммуникационной сети ZXNet.
Nonsense - логические операторы.
News - Ldir снимает с аукциона свой Pentagon. Не успело пройти года со дня смерти Dr. Envelope.

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