City #53
14 мая 2001

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

  (c) П.Федин

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

Адрес 8501. Принятие команды. Установите 23823 и если  там не 0,
то и 23840.
8501  LD A,(23823) ;ошибка была?
      OR A
      PUSH AF      ;сохранение результата проверки
      CALL NZ,8490 ;если да, то восстановление первых трех сим-
                    волов
Не надо этого делать!!! COPY портит буфер по адресу 23840, а бу-
фер редактора всегда остается цел.
      POP AF       ;восстановление результата проверки
      CALL Z,8478  ;если   ошибки  не  было, то  стирание старой
                    строки
      LD HL,(23641);эта команда тоже не нужна
      CALL 15744   ;перевод строки
      LD A,(23833) ;берем номер дисковода по умолчанию
      ADD A,"A"    ;печать его имени
      RST 16
      LD A,">"     ;печать ">"
      RST 16
      LD HL,23610  ;для нормального выхода из редактора
      LD (HL),255
      JP 7568      ;ввод команды и возврат
────────────────────────────────────────────────────────────────
Адрес 8536.  Прием числа.  CH_ADD  установите  на  символ  перед
числом. Число, увеличенное на 1, будет помещено в 23767,  а  со-
держимое 23771 будет скопировано в 23769. Число  не  должно рав-
няться 0.
8536  CALL 7722    ;следующий символ
      CALL 7564
      CP ","       ;это запятая?
      JP NZ,7450   ;если да, то ошибка
      LD HL,(23771);сохранение 23771
      LD (23769),HL
      CALL 7691    ;помещение числа на стек калькулятора
      CALL 7541    ;если идет проверка на синтаксис, то возврат
      LD HL,(23771);число равно 0?
      LD A,
      OR L
      JP NZ,7450   ;если да, то ошибка
      INC HL       ;еще будет байт ENTER
      LD (23767),HL;установка числа
      LD HL,(23769);восстановление 23771
      LD (23771),HL
      RET          ;возврат
────────────────────────────────────────────────────────────────
Адрес 8578. Выполнение команды OPEN#.  Установите 23825 и 23611.
8578  LD HL,(23825);установка CH_ADD
      LD (23645),HL
      CALL 7691    ;принятие номера потока
      CALL 7632    ;принятие имени файла на стек калькулятора
8590  CALL 7564    ;берем текущий символ
      CP "A"       ;он меньше "A"?
      JR NC,8602   ;если нет, то проверка режима файла
      CALL 7722    ;следующий символ
      JR 8590      ;повтор
8602  CP 165       ;это RND?
      PUSH AF      ;сохранение символа и результата проверки
      CALL Z,8536  ;если это RND, то обработка длины записи
      POP AF       ;восстановление символа и результата проверки
      JR Z,8622    ;если это RND, то открытие потока
      AND 223      ;буква заглавная
      CP "R"       ;это "R"?
      JR Z,8622    ;если да, то открытие потока
      CP "W"       ;это "W"?
      JP NZ,7450   ;если нет, то ошибка
8622  LD (23817),A ;сохранение буквы режима файла
      CALL 7541    ;если идет проверка на синтаксис, то возврат
      LD A,"#"     ;расширение файла - "#"
      LD (23781),A
      LD A,0       ;поиск начинать с блока 0
      LD (23782),A
      CALL 8667    ;поиск последнего блока файла
      PUSH AF      ;сохранение флага результата поиска
      CALL 8719    ;проверка потока
      POP AF       ;восстановление флага результата поиска
      PUSH AF      ;сохранение флага результата поиска
      CALL NZ,8840 ;если файл не был найден, то создание блока 0
      POP AF       ;восстановление флага результата поиска
      CALL 8770    ;открытие потока
      LD HL,(23825);коррекция  переменной  с  адресом  командной
                    строки
      LD BC,292
      ADD HL,BC
      LD (23825),HL
      JP 467       ;завершение
────────────────────────────────────────────────────────────────
Адрес 8667. Поиск блока файла данных. Вход: поместите  имя файла
на стек калькулятора, установите  23773 и  23817 и  поместите  в
23782 номер первого блока файла. Выход: если файл найден, то бу-
дет считан описатель последнего или первого блока в  зависимости
от 23817 и обнулен аккумулятор и установлен флаг Z; иначе флаг Z
будет сброшен, а в аккумуляторе будет байт из 23817.
8667  LD A,10     ;поиск файла ведем по 10 байтам
      LD (23814),A
      CALL 7344   ;установка имени файла и поиск файла
      PUSH AF     ;сохранение результата поиска
      CALL 1029   ;настройка на диск
      POP AF      ;восстановление результата поиска
      JR NZ,8710  ;если файл не найден, то проверка режима файла
      LD A,(23817);открываем файл для чтения?
      CP "R"
      JR Z,8705   ;если да, то выход
8689  LD HL,23782 ;следующий блок
      INC (HL)
      CALL 7347   ;поиск блока
      JR Z,8689   ;если блок найден, то следующий блок
      LD HL,23782
      DEC (HL)    ;последний существующий блок
      CALL 7347   ;определение его номера в каталоге
8705  CALL 5725   ;чтение его описателя
      XOR A       ;обнуление аккумулятора и установка флага Z
      RET         ;возврат
8710  LD A,(23817);открываем файл для чтения?
      CP "R"
      RET NZ      ;если да, то возврат
      JP 985      ;сообщение NO FILE

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



Other articles:


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

Similar articles:

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