City #19
14 июля 1999

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

---------------------------------------------------
                     ЛИКБЕЗ
---------------------------------------------------

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

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

                    пpодолжение


Адрес 1067.  Проверка  второго   символа  командной
строки. Вход: установите 23825. На выходе будет ус-
тановлен флаг Z, если это ENTER и сброшен, если нет
1067  LD HL,(23825);берем адрес начала строки кома-
                    нды
      INC HL       ;берем адрес ее второго символа
      LD A,(HL)    ;берем этот символ
      CP 13        ;сравнение его с ENTER
      RET          ;возврат
───────────────────────────────────────────────────
Адрес 1075. Выполнение команды CAT.Установите 23825
и 23611. Используется  также  с адреса  1145 (вывод
каталога диска; в A - номер потока, в буфере - сек-
тор 8 дорожки 0).
1075  CALL 1067    ;второй  символ  строки  команды
                    ENTER ?
      LD BC,2      ;каталог выводить в поток 2
      LD (23771),BC
      JR Z,1130    ;если второй символ строки ENTER
                    то вывод каталога
      CP "#"       ;второй символ строки "#" ?
      JR NZ,1117   ;если нет, то установка дисково-
                    да и вывод каталога
      LD (23645),HL;установка CH_ADD на второй сим-
                    вол строки
      CALL 7691    ;установка номера потока
      CALL 7564    ;берем текущий символ
      CP 13        ;это ENTER ?
      JR Z,1130    ;если да, то вывод каталога
      CP ","       ;это запятая ?
      JP NZ,7450   ;если   нет,  то  синтаксическая
                    ошибка
      CALL 7722    ;берем следующий символ
      CALL 7613    ;помещение  имени  дисковода  на
                    стек калькулятора
      JR 1120      ;установка дисковода и вывод ка-
                    талога
1117  CALL 7647    ;установка  CH_ADD  и  помещение
                    имени дисковода на стек кальку-
                    лятора
1120  CALL 7541    ;если строка проверяется на син-
                    таксис, то возврат
      CALL 7605    ;снятие имени дисковода со стека
                    калькулятора
      EX DE,HL
      CALL 7297    ;установка дисковода
1130  CALL 7541    ;если проверка на  синтаксис, то
                    возврат
      LD A,(23798) ;помещение   номера  дисковода в
                    23801
      LD (23801),A
      CALL 1029    ;настройка на диск
      LD A,(23771) ;берем номер потока
1145  CP 2         ;выводим в поток 2 ?
      PUSH AF      ;сохранение номера потока
      CALL Z,7575  ;если назначен поток 2, то очис-
                    тка экрана
      POP AF       ;восстановление номера потока
      CP 17        ;он больше 16 ?
Ошибка!!! Всего потоков 15, а не 16.
      JP NC,7450   ;если да, то ошибка
      CALL 7556    ;открытие потока
Ошибка!!! Надо бы проверить, подключен  ли куда-ни-
будь этот поток.
      LD A,255     ;установка 23800 в 255
      LD (23800),A
      LD HL,10743  ;печать TITLE:
      RST 24
      LD HL,24090  ;печать имени диска
      RST 24
      CALL 15744   ;перевод строки
      LD A,(24073) ;вычисление количества нестертых
                    файлов на диске
      LD HL,24089
      SUB (HL)
      PUSH HL
      CALL 7587    ;печать его
      LD HL,10795  ;печать FILES
      RST 24
      POP HL
      LD C,(HL)    ;берем количество стертых файлов
      CALL 7588    ;печать его
      LD HL,10781  ;печать DEL.FILES
      RST 24
      CALL 1000    ;загрузка в  буфер сектора 0 до-
                    рожки 0
      LD HL,23845  ;берем начало буфера
1206  CALL 1270    ;проверка достижения конца ката-
                    лога
      CALL 15744   ;перевод строки
      LD A,(23798) ;печать имени дисковода
      ADD A,"A"
      RST 16
      LD B,2       ;печатаем по 2 имени в строке
1220  CALL 1270    ;если файл стерт, то пропуск его
      PUSH BC      ;сохранение количества имен фай-
                    лов в строке
      LD A,":"     ;печать двоеточия
      RST 16
      PUSH HL      ;сохранение адреса текущего опи-
                    сателя файла в буфере
      CALL 10552   ;печать имени и расширения файла
      LD BC,13     ;вычисление  адреса, по которому
                    находится
      POP HL       ;размер файла в секторах
      PUSH HL
      ADD HL,BC
      LD C,(HL)    ;берем размер файла
      PUSH BC      ;сохраним его
      LD A,C       ;перегрузим его в A
      LD B,2       ;вычисление  количества пробелов
                    перед числом
      CP 10
      JR C,1247
      DEC B
      CP 100
      JR NC,1256
1251  LD A," "     ;печать пробелов
      RST 16
      DJNZ 1251
1256  POP BC       ;восстановление размера файла
      CALL 7593    ;печать его
      POP HL       ;восстановление адреса  текущего
                    описателя файла
      POP BC       ;восстановление  количества имен
                    файлов в строке
      LD DE,16     ;следующий описатель
      ADD HL,DE
      DJNZ 1220    ;если  напечатали только 1 файл,
                    то печать второго
      JR 1206      ;следующая строка


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




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

Похожие статьи:
Построим город - Дисковая версия игры SIM CITY.
AY музыка с цифровыми сэмплами - цифровая музыка в Pro Tracker.3 для General Sound.
Предисловие - О новой газете.

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