City #35
04 декабря 1999

Ликбез - полный дизассемблер ПЗУ (часть 27).

┌─────────────────────────────────────────────────┐
│   *************   ЛИКБЕЗ   ******************   │
└─────────────────────────────────────────────────┘


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

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

                    пpодолжение

  Адрес 6053. Перемещение файла. Установите  23763,
23843, 23759, 23765 и 23767.
6053  LD A,(23763) ;перемещен весь файл ?
      OR A
      RET Z        ;если да, то возврат
      PUSH HL      ;сохранение HL
      LD HL,23843  ;буфера хватит на остаток ?
      SUB (HL)
      POP HL       ;восстановление HL
      JR NC,6109   ;если буфера не хватит, то пере-
                    мещаем часть файла
      LD A,(23763) ;берем количество оставшихся се-
                    кторов
      LD B,A
      XOR A        ;переместили все
      LD (23763),A
6074  PUSH BC      ;сохранение количества перемеща-
                    емых секторов
      LD HL,(23759);берем адрес рабочей области
      PUSH HL      ;сохранение его
      LD DE,(23765);берем адрес части перемещаемого
                    файла на старом месте
      CALL 7741    ;загрузка секторов
      LD HL,(23796);установка адреса следующей час-
                    ти файла
      LD (23765),HL
      POP HL       ;восстановление  адреса  рабочей
                    области
      POP BC       ;и количества перемещаемых  сек-
                    торов
      LD DE,(23767);берем адрес части перемещаемого
                    файла на новом месте
      CALL 7757    ;запись секторов
      LD HL,(23796);установка адреса следующей час-
                    ти файла
      LD (23767),HL
      JR 6053      ;повтор
6109  LD (23763),A ;установка количества оставшихся
                    секторов
      PUSH HL      ;сохранение HL
      LD HL,23843  ;берем длину  рабочей  области в
                    секторах
      LD B,(HL)
      POP HL       ;восстановление HL
      XOR A        ;обнуление аккумулятора
      JR 6074      ;перемещение секторов

───────────────────────────────────────────────────

Адрес 6121. Загрузка в буфер  сектора с  описателем
файла и перенос описателя. В регистре C- номер фай-
ла, в A- направление перемещения (0 - в переменные,
иначе - в прочитанный сектор).
6121  PUSH AF    ;сохранение направления  перемеще-
                  ния
      LD HL,23756;первый сектор каталога - 0
      LD (HL),0
      LD A,C     ;определение номера сектора с опи-
                  сателем файла
6128  SUB 16
      JR C,6135
      INC (HL)
      JR 6128
6135  ADD A,16   ;берем номер описателя в секторе
      LD C,A
      PUSH BC    ;сохраним его
      CALL 1004  ;загрузка в буфер сектора с описа-
                  телем
      POP BC     ;восстановление номера описателя в
                  секторе
      POP AF     ;и направление перемещения
      CALL 7332  ;определение адреса описателя фай-
                  ла в буфере
      LD DE,23773;берем второй адрес для LDIR
      LD BC,16   ;берем длину описателя
      OR A       ;установка направления перемещения
      JR Z,6157
      EX DE,HL
6157  LDIR       ;перенос описателя файла
      RET        ;возврат

───────────────────────────────────────────────────

Адрес 6160. Выполнение команды  VERIFY.  Установите
23825 и 23611. Используется также с адресов:
6165 - выполнение команды LOAD.  Установите 23825 и
23611;
6168 - выполнение команды LOAD, PEEK или POKE.  Ус-
тановите 23825, 23611 и 23824.
6160  LD A,255    ;верификация файла
      LD (23801),A
6165  CALL 6226   ;обнуление 23824
6168  CALL 6198   ;обработка параметров и  загрузка
                   файла
      CALL 7541   ;если идет проверка на синтаксис,
                   то возврат
      LD A,255    ;выполняется команда LOAD
      LD (23824),A
      LD A,(23801);выполняется VERIFY ?
      CP 255
      JP Z,993    ;если да, то O.K.
      LD A,(23781);расширение файла B ?
      CP "B"
Внимание! Если была операция с одним сектором  фай-
ла, то надо выходить независимо от расширения.
      JP Z,298    ;если да, то обработка строки ав-
                   тостарта
      JP 993      ;иначе O.K.

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



Другие статьи номера:

От редакции - я получил два письма от VEL'а/PXM и по одному от Hardy/FLASH и Nemo.

Железо - три схемы согласования модема со Spectrum'ом.

Что-где-почем - Hачну с того, что мне пpислал на этот pаз VEL.

Смайлик - кучка анекдотов.

Ликбез - полный дизассемблер ПЗУ (часть 27).

Beatles - Сегодня у нас самая известная песня гpуппы "Евpопа" - "Последний отсчет".

Наш смак - несколько pецептов пpиготовления самогона, веpнее заквасок.

Реклама - Пpодам, куплю ,обменяю пpогpаммы для ZX Spectrum.


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

Похожие статьи:
Tест - как всегда.
Крик Души - спектрум заполонили логические игры!
Анекдотец - Учитeльница прихoдит в класс и видит, чтo на дoскe написанo...

В этот день...   12 декабря