City #26
30 августа 1999

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

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

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

                    пpодолжение

Адрес 4261. Сообщения команды LIST.
4261  DEFM " Del."
4265  DEFM " File(s)"
      DEFB 0
4275  DEFM "Title:"
      DEFB 160
4282  DEFB 23,17
      DEFM "Disk Drive: "
      DEFB 0
4298  DEFB 23,16," ",0
4302  DEFM " 40 Track S.Side"
      DEFB 0
4322  DEFM " 80 Track S.Side"
      DEFB 0
4342  DEFM " 40 Track D.Side"
      DEFB 0
4362  DEFM " 80 Track D.Side"
      DEFB 0
4382  DEFB 23,16
      DEFM " Free sector "
      DEFB 0
4398  DEFB 13,13
      DEFM "  File Name    Start Length Line"
      DEFB 0
───────────────────────────────────────────────────
Адрес 4433. Выделение 546 байтов в рабочей области.
Устанавливает 23759.
4433  LD HL,(23649);берем адрес рабочей области
      LD (23759),HL;установка адреса пространства
      LD BC,546    ;выделять 546 байтов
      JP 7715      ;выделение области и возврат
───────────────────────────────────────────────────
Адрес 4445. Печать числа из HL с нулями.
4445  XOR A      ;в числе 0 десятков тысяч
      LD DE,10000
4449  SBC HL,DE  ;вычитание из числа 10000
      JR C,4456  ;если   получилось   число  меньше
                  10000, то следующий разряд
      INC A      ;следующий десяток тысяч
      JR 4449    ;повтор
4556  ADD A,"0"  ;печать десятков тысяч
      CALL 4520
      ADD HL,DE  ;восстановление остатка числа
      XOR A      ;в числе 0 тысяч
4446  LD DE,1000
      SBC HL,DE  ;вычитание из числа 1000
      JR C,4473  ;если   получилось   число  меньше
                  1000, то следующий разряд
      INC A      ;следующая тысяча
      JR 4446    ;повтор
4473  ADD A,"0"  ;печать тысяч
      CALL 4520
      ADD HL,DE  ;восстановление остатка числа
      XOR A      ;в числе 0 сотен
      LD DE,100
4483  SBC HL,DE  ;вычитание из числа 100
      JR C,4490  ;если получилось число меньше 100,
                  то следующий разряд
      INC A      ;следующая сотня
      JR 4483    ;повтор
4490  ADD A,"0"  ;печать сотен
      CALL 4520
      ADD HL,DE  ;восстановление остатка числа
      XOR A      ;в числе 0 десятков
      LD DE,10
4500  SBC HL,DE  ;вычитание из числа 10
      JR C,4507  ;если получилось  число меньше 10,
                  то следующий разряд
      INC A      ;следующий десяток
      JR 4500    ;повтор
4507  ADD A,"0"  ;печать десятков
      CALL 4520
      ADD HL,DE  ;восстановление остатка числа
      LD A,L     ;печать единиц
      ADD A,"0"
      CALL 4520
      RET        ;возврат
───────────────────────────────────────────────────
Адрес 4520. То же, что и 15746.
4520  PUSH HL   ;сохранение HL и DE
      PUSH DE
      CALL 15746;печать символа
      POP DE    ;восстановление DE и HL
      POP HL
      RET       ;возврат
───────────────────────────────────────────────────
Адрес 4528. Проверка  достижения  конца  буфера при
работе с каталогом.  Установите  23801 и 23756, а в
HL поместите текущий адрес буфера. Если конец буфе-
ра достигнут,  то в буфер загрузится следующий сек-
тор каталога, а в HL будет 23845.
4528  PUSH HL      ;сохранение HL и BC
      PUSH BC
      LD A,(23801) ;берем номер  дисковода из 23801
      LD HL,23798  ;берем номер текущего  дисковода
      CP (HL)      ;назначен другой дисковод ?
      CALL NZ,15819;если да, то  выбор назначенного
                    дисковода
      POP BC       ;восстановление HL и BC
      POP HL
      CALL 1292    ;проверка достижения конца буфе-
                    ра
      LD A,(HL)    ;берем первый символ имени файла
      OR A         ;конец каталога ?
      JP Z,467     ;если да, то завершение
      CP 1         ;файл стерт ?
      CALL Z,1287  ;если да, то пропуск файла
      RET NZ       ;иначе возврат
      JR 4528      ;если файл был пропущен, то пов-
                    тор

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



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

От редакции - получил из Hовосибиpска каталог пpогpамм от FIKUSa/ FLASH/ASM.

Железо - о зоновском контpоллеpе клавиатуpы и мыши для ZS Scorpion.

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

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

Реклама - Пpодам четыpехканальную музыкальную плату SOUNDRIVE v 1.02.


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

Похожие статьи:
8) - Юмор
Поэма - про вампира.
Интервью - Jоntаn Niddle, автор эмулятора.

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