City #20
14 июля 1999

        ООООООООООООООООООООО
     ОООООООООО  ЛИКБЕЗ  ОООООООООО
            ООООООООООООООООООООО

╔════════════════════════════════════════╗
║                                        ║
║  ПОЛНОЕ ОПИСАНИЕ + ПОЛНЫЙ ДИЗАССЕМБЛЕР ║
║                    ПЗУ                 ║
║                                        ║
║          TR-DOS 5.04T (5.03)           ║
║                                        ║
║           ДЛЯ ПРОФЕССИОНАЛОВ,          ║
║                                        ║
║             А ТАКЖЕ ДЛЯ ТЕХ,           ║
║                                        ║
║           КТО ХОЧЕТ ИМИ СТАТЬ.         ║
║                                        ║
╚════════════════════════════════════════╝

               продолжение





 П.Федин
Адрес 1270.  Проверка переменной  23801  и
проверка достижения конца каталога при его
печати.

1270  PUSH HL      ;сохранение HL и BC
      PUSH BC
      LD A,(23801) ;берем  номер дисковода
                    для выдачи каталога
      LD HL,23798  ;назначен  этот  диско-
                    вод ?
      CP (HL)
      CALL NZ,15755;если нет, то о послед-
                    ствиях читайте в конце
Ошибка в программе!! Об этом особо в конце
                     текста.
      POP BC       ;восстановление HL и BC
      POP HL
      JP 12230     ;проверка    достижения
                    конца каталога и возв-
                    рат
Обратите  особое  внимание на команду CALL
NZ,15755.  В  аналогичной подпрограмме для
LIST стоит CALL NZ,15819.В нашем же случае
управление  будет  передано в подпрограмму
печати символа  (ее адрес 15744) на адрес,

где  находятся  2  байта адреса от команды
CALL 15764. Программа с этого адреса будет
такой:
SUB H
DEC A
CALL 8433
POP DE
POP BC
POP HL
RET
Таким образом произойдет изменение памяти,
если оно  разрешено,  затем со стека будут
сняты 3 адреса и помещены в регистры и за-
тем произойдет возврат.  Последствия всего
этого  определяются  программой, вызвавшей
1270.
──────────────────────────────────────────
Адрес 1287. Прибавление 16 к HL.
1287  LD DE,16
      ADD HL,DE
      RET

──────────────────────────────────────────
Адрес 1292.  Проверка и обработка достиже-
ния  конца  буфера при работе с каталогом.
Установите 23756  и поместите в HL текущее
место буфера. Если достигнут его конец, то
в HL будет  начало  буфера  и в него будет
загружен следующий сектор каталога.
1292  PUSH HL    ;сохранение HL и BC
      PUSH BC
      LD BC,41435;достигнут конец буфера ?
      ADD HL,BC
      JR C,1303  ;если да,то загрузка сле-
                  дующего сектора
      POP BC     ;восстановление HL и BC
      POP HL
      RET        ;возврат
1303  LD HL,23756;следующий сектор
      INC (HL)
      CALL 1004  ;загрузка его в буфер
      POP BC     ;восстановление BC и HL


      POP HL
      LD HL,23845;помещение  в  HL  адреса
                  начала буфера
      RET        ;возврат
──────────────────────────────────────────
Адрес 1316. Вычисление номера дисковода по
его имени.  Имя  поместите  в А, на выходе
там будет номер.
1316  AND 223   ;буква заглавная
      SBC A,65  ;вычисление  номера диско-
                 вода
      JP C,7450 ;если  именем  был  символ
                 меньше "A", то ошибка
      CP 4      ;номер получился больше 3?
      JP NC,7450;если да, то ошибка
      RET       ;возврат
──────────────────────────────────────────
Адрес 1338. Выполнение  команды NEW. Уста-
новите 23825 и 23611. Используется также с
адреса  1385  (запись  информации о файле;
номер файла задайте в регистре C).

1338  CALL 7629   ;прием  имен  файлов  на
                   стек калькулятора
      CALL 7541   ;если  идет  проверка на
                   синтаксис,  то  возврат
      CALL 4142   ;прием расширения  файла
      CALL 7344   ;установка старого имени
                   файла
      LD A,(23798);берем номер дисковода
      LD (23800),A;сохраняем его
      JP NZ,985   ;если файл не найден, то
                   ошибка
      PUSH BC     ;сохранение номера файла
      CALL 5725   ;загрузка описателя фай-
                   ла
      CALL 7344   ;установка  нового имени
                   файла
      PUSH AF     ;сохранение   результата
                   проверки имени файла
      LD A,(23800);в  новом  имени   файла
                   назначен  другой диско-
                   вод

      LD HL,23798
      CP (HL)
      JP NZ,7450  ;если да, то ошибка
      CALL 1029   ;настройка на диск
      POP AF      ;восстановление  резуль-
                   тата   проверки   имени
                   файла
      JP Z,7248   ;если   такой  файл  уже
                   есть, то ошибка
      POP BC      ;восстановление   номера
                   файла
1385  CALL 5739   ;загрузка сектора с опи-
                   сателем файла  и замена
                   описателя
      CALL 7747   ;перезапись сектора
      JP 993      ;сообщение O.K.
──────────────────────────────────────────
Адрес 1394. Проверка переменной 23824. Со-
ответственно содержимому  будет установлен
флаг Z,а само содержимое будет в аккумуля-
торе.

1394  LD A,(23824)
      OR A
      RET
──────────────────────────────────────────
Адрес 1399.  Проверка  количества  стертых
файлов. Установите
23825. Если  там 0,  то будет сообщение NO
FILE, иначе O.K.
1399  LD A,(23825);берем  количество стер-
                   тых файлов
      OR A        ;оно равно 0 ?
      JP Z,985    ;если да, то NO FILE
      JP 993      ;иначе O.K.




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



Other articles:


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

Similar articles:
Weakly pass - Description-passing game Monstrland (mission 2). Description of-passage from Homer's 81%.
Solitude - Kq: "There are several degrees of loneliness in the big cities. First seen on the streets clogged up to the limit, which is not what step to step without preparation it is impossible - there is even a sip of air to be on tiptoes pre-climb "...
Likbez - Methods for non-commercial distribution of software.

В этот день...   23 November