City #28
15 сентября 1999

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

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

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

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

                    пpодолжение

4754  RST 24       ;печать сообщения
      POP HL       ;восстановление   адреса   19-го
                    байта описателя диска
      LD C,(HL)    ;берем количество стертых файлов
      CALL 7588    ;печать его
      LD HL,4261   ;печать DEL.FILES
      RST 24
      LD HL,4382   ;печать FREE SECTORS:
      RST 24
      LD HL,(23759);4-й байт
      LD BC,4
      ADD HL,BC
      LD C,(HL)    ;берем количество свободных сек-
                    торов
      INC HL
      LD B,(HL)
      CALL 7593    ;печать его
      LD HL,4398   ;печать FILE NAME, START,LENGTH,
                    LINE
      RST 24
      POP BC       ;восстановление  BC  и  текущего
                    адреса в буфеpе
      POP HL
      LD B,16      ;печатать информацию о 16 файлах
4789  CALL 4528    ;проверка достижения конца буфе-
                    ра
      CALL 15744   ;перевод строки
      PUSH BC      ;сохранение количества оставших-
                    ся файлов
      PUSH HL      ;и текущего адреса в буфеpе
      CALL 10552   ;печать имени и расширения файла
      LD BC,13     ;13-й байт описателя файла
      POP HL       ;восстановление текущего  адреса
                    в буфере
      ADD HL,BC
      LD C,(HL)    ;берем размер файла в секторах
      PUSH BC      ;сохраняем его
      LD A,C       ;загружаем его в C
      LD B,2       ;печатать 2 пробела перед числом
      CP 10        ;длина файла меньше 10 секторов? 
      JR C,4816    ;если да, то печать пробелов
      DEC B        ;печатать один пробел
4816  CP 100       ;длина файла   меньше 100 секто-
                    pов ?
      JR NC,4825   ;если  нет, то  пробелы не печа-
                    тать
4820  LD A," "     ;печать пробелов
      RST 16
      DJNZ 4820
4825  POP BC       ;восстановление   длины  файла в
                    секторах
      CALL 7593    ;печать ее
      LD HL,4298   ;16 пробелов
      RST 24
      POP HL       ;восстановление адреса описателя
                    файла в буфере
      PUSH HL      ;и снова сохранение его
      LD BC,9      ;9-й байт описателя
      ADD HL,BC
      LD E,(HL)    ;берем адрес загрузки файла
      INC HL
      LD D,(HL)
      PUSH HL      ;сохранение  текущего  адреса  в
                    описателе файла
      EX DE,HL     ;переброска адреса загрузки фай-
                    ла в HL
      CALL 4445    ;печать его
      LD A," "     ;пробел
      CALL 15746
      POP HL       ;восстановление текущего  адреса
                    в описателе файла
      INC HL       ;следующий адрес
      LD E,(HL)    ;берем длину файла
      INC HL
      LD D,(HL)
      EX DE,HL     ;перенос ее в HL
      CALL 4445    ;печать ее
      POP HL       ;восстановление адреса описателя
                    файла
      PUSH HL      ;и снова сохранение его
      LD BC,8      ;8-й байт
      ADD HL,BC
      LD A,(HL)    ;берем расширение файла
      CP "B"       ;это "B" ?
      CALL Z,4891  ;если да, то печать строки авто-
                    запуска
      POP HL       ;восстановление адреса описателя
                    файла
      POP BC       ;и счетчика файлов
      LD DE,16     ;адрес следующего описателя фай-
                    ла
      ADD HL,DE
      DJNZ 4789    ;повтор до конца
      PUSH HL      ;сохранение   адреса   описателя
                    файла
      CALL 15744   ;2 раза перевод строки
      CALL 15744
      JP 4760      ;повтор с самого начала

───────────────────────────────────────────────────
Адрес 4891. Печать строки  автостарта  прогpаммы на
бейсике. В HL поместите адрес описателя файла  плюс
8 и установите 23759.
4891  LD BC,5      ;берем адрес  длины файла в сек-
                    торах
      ADD HL,BC
      LD B,(HL)    ;берем эту длину
      INC HL       ;следующий адрес в описателе
      LD E,(HL)    ;берем адрес файла на диске
      INC HL
      LD D,(HL)
      DEC B        ;загружать будем 2 сектоpа
      JR Z,4917
      DEC B
      JR Z,4917    ;если  длина файла не больше 2-х
                    секторов, то загрузка
                    секторов
      LD A,16      ;на дорожке 16 секторов
4908  INC E        ;следующий сектор
      CP E         ;конец дорожки ?
      JR NZ,4915   ;если да, то
      LD E,0       ;следующий сектор 0
      INC D        ;и берем следующую дорожку
4915  DJNZ 4908    ;повтор до конца
4917  LD HL,(23759);берем адрес рабочей области
      LD BC,33     ;33 байта уже заняты
      ADD HL,BC
      LD B,2       ;загружать 2 сектора
      PUSH HL      ;сохранение адреса загрузки сек-
                    торов
      CALL 7741    ;загрузка секторов
      LD A,128     ;будем искать конец программы
      POP HL       ;восстановление адреса  секторов
                    в памяти
      LD BC,512    ;длина области - 512 байтов
      CPIR         ;поиск конца программы
      LD A,(HL)    ;берем следующий байт
      CP 170       ;это 170 ?
      RET NZ       ;если нет, то возврат
      INC HL       ;берем номер строки автостарта
      LD C,(HL)
      INC HL
      LD B,(HL)
      LD A,B       ;это 0 ?
      OR C
      RET Z        ;если да, то возврат
      PUSH BC      ;сохранение  номера строки авто-
                    старта
      LD A," "     ;печать пробела
      CALL 15746
      POP BC       ;восстановление  номера   строки
                    автостарта
      CALL 7593    ;печать его
      RET          ;возврат

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



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

Железо - КОНТРОЛЛЕР IBM-совместимой клавиатуры и мыши для любого компьютера типа ZX-SPECTRUM (Инструкция по работе и подключению V 2.0).

Что-где-почем - новый каталог от Nemo и спешу ознакомить вас с его кpатким содеpжанием (21.06.99 г.).

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

Бук - Похождения Штиpлица и дpугие пpиключения Боpмана.

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


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

Похожие статьи:
Друзьям - самый лучший друг группы ZER0 GUYS - группа NORТH SТАR.
Еж - немного о природе.
Смайлик - подборка анекдотов.

В этот день...   16 июля