City #34
06 ноября 1999

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

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

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

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

                    пpодолжение

Адрес 5803.  Выполнение  команды  MOVE.  Установите
23611.
5803  CALL 7541    ;если идет  проверка на  синтак-
                    сис, то возврат
      CALL 5743    ;резервирование  места  в памяти
      CALL 1029    ;настройка на диск
      LD A,(24089) ;стертые файлы на диске есть ?
      OR A
      JP Z,993     ;если нет, то сообщение O.K.
      LD HL,0      ;пока освободилось 0 секторов
      LD (23769),HL
      LD C,255     ;начнем с файла номер 0
5827  INC C        ;следующий файл
      CALL 5715    ;он стерт ?
      JR NZ,5827   ;если нет, то следующий файл
      LD A,C       ;сохранение  номера   стираемого
                    файла
      LD (23764),A
      LD HL,(23787);берем адрес стираемого файла на
                    диске
      LD (23765),HL;сохраняем его
      CALL 5783    ;приращение  счетчика освободив-
                    шихся секторов
5846  INC C        ;следующий файл
      CALL 5715    ;он стерт ?
      JR Z,5846    ;если да, то следующий файл
      CP 0         ;это конец каталога ?
      JP NZ,5904   ;если нет, то  меняем файлы мес-
                    тами
      LD A,(23764) ;берем номер стираемого файла
      LD C,A
5861  INC C        ;следующий файл
      CALL 5715    ;это конец каталога ?
      CP 0
      JR Z,5996    ;если да, то реорганизация  опи-
                    сателя диска
      XOR A        ;конец каталога
      LD (23773),A
      CALL 7744    ;запись описателя файла
      CALL 5783    ;приращение  счетчика освободив-
                    шихся секторов
      JR 5861      ;повтор
5904  LD A,(23786) ;берем размер перемещаемого фай-
                    ла в секторах
      LD (23763),A ;сохраняем его
      LD (23761),A
      LD HL,(23787);берем адрес перемещаемого файла
                    на диске
      LD (23765),HL;сохраняем его
      PUSH BC      ;сохранение номера перемещаемого
                    файла
      CALL 6053    ;перемещение файла
      POP BC       ;восстановление номера перемеща-
                    емого файла
      LD HL,(23796);перемещение продолжится с этого
                    места
      LD (23765),HL
      LD (23787),HL
      XOR A        ;размер  стертого файла - 0 сек-
                    торов
      LD (23786),A
      LD A,(23773) ;сохранение первого символа име-
                    ни файла
      PUSH AF
      LD A,1       ;файл стерт
      LD (23773),A
      CALL 7744    ;запись описателя стертого файла
      POP AF       ;восстановление  первого символа
                    имени файла
      LD (23773),A
      LD A,(23764) ;берем номер стертого файла
      LD C,A
      LD HL,(23771);установка нового адреса переме-
                    щенного файла
      LD (23787),HL;на диске
      LD A,(23761) ;восстановление  размера переме-
                    щенного файла
      LD (23786),A ;на диске
      CALL 7744    ;запись описателя  перемещенного
                    файла
      LD A,(23764) ;берем номер файла после переме-
                    щенного
      INC A
      LD C,A
      CALL 5725    ;чтение его описателя
      LD HL,(23765);установка  его нового адреса на
                    диске
      LD (23787),HL
      CALL 7744    ;запись его описателя
      LD A,(23764) ;берем номер перемещенного файла
      LD C,A
      JP 5827      ;повтор

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

Адpес 5996. Реорганизация описателя  диска. Устано-
вите 23759, 23769 и 23765.
5996  LD HL,(23759);берем адрес рабочего  простран-
                    ства
      LD BC,4096   ;сокращаем его на 4096 байтов
      CALL 7726
      CALL 1021    ;загрузка  в буфер сектора 8 до-
                    рожки 0
      LD HL,(24074);увеличение количества свободно-
                    го места на
      LD DE,(23769);диске
      ADD HL,DE
      LD (24074),HL
      LD A,(24073) ;уменьшение количества файлов на
                    диске на
      LD HL,24089  ;число стертых
      SUB (HL)
      LD (24073),A
      LD (HL),0    ;на  диске  больше  нет  стертых
                    файлов
      LD HL,(23765);установка нового адреса свобод-
                    ного места на
      LD (24070),HL;диске
      PUSH AF      ;сохранение количества файлов на
                    диске
      CALL 7747    ;запись сектора 8 дорожки 0
      POP AF       ;восстановление  количества фай-
                    лов на диске
      LD C,A
      CALL 5725    ;чтение  описателя файла за пос-
                    ледним
      XOR A        ;это конец каталога
      LD (23773),A
      JP 1385      ;запись описателя файла и завер-
                    шение

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




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

Похожие статьи:
Подключение SMUC - Подключение контроллера к плате Scorpion ZS-256 Turbo+.
Вступление - Сделаем сцену чище!
Anigdot №37 - Дааааааа , а вот и мы снова. Только говорить неочем.

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