City #41
06 марта 2000

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

<b>Ликбез</b> - полный дизассемблер ПЗУ (часть 31).
┌─────────────────────────────────────────────────┐
│   ***************   ЛИКБЕЗ   ****************   │
└─────────────────────────────────────────────────┘

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

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

                    пpодолжение

Адрес 6804. Вычисление адреса сектора файла на дис-
ке по его номеру в файле. Вход: установите  23767 и
23769 и поместите в регистр B длину файла в  секто-
рах, а в DE - адрес файла на диске. Выход: в DE бу-
т адрес сектора на диске, а в B помещается 1.

6804  LD A,(23769) ;берем номер сектора в файле
      LD C,B
      LD B,A
      LD A,C
      CP B         ;он  меньше,  чем  количество
                    секторов в файле ?
      JR C,6838    ;если нет, то ошибка
Внимание, ошибка! Вы не сможете загрузить последний
сектор файла, т.к. его номер равен количеству  сек-
торов в файле.
      LD A,B       ;он равен 0 ?
      OR A
      JP Z,7450    ;если   да,  то   синтаксическая
                    ошибка
      DEC B        ;он был равен 1 ?
      JR Z,6832    ;если да, то его  адресом  будет
                    адрес файла
      LD A,16      ;на дорожке 16 секторов
6823  INC E        ;вычисление  адреса  сектора  на
                    диске
      CP E
      JR NZ,6830
      LD E,0
      INC D
6830  DJNZ 6823
6832  LD B,1       ;загружать надо 1 сектор
      LD HL,(23767);берем адрес загрузки сектора
      RET          ;возврат
6838  LD HL,10733  ;адрес сообщения REC.O/F
      LD A,5       ;код ошибки - 5
      JP 7242      ;обработка ошибки
───────────────────────────────────────────────────
Адрес 6846. Проверка  наличия  файла  и  свободного
места в каталоге. Имя файла поместите на стек каль-
кулятора. Используется также с адреса 6852 (провер-
ка наличия свободного места в каталоге диска).

6846  CALL 10543  ;установка имени и поиск файла
      JP Z,7248   ;если нашли, то FILE EXISTS
6852  CALL 1021   ;загрузка в буфер сектора  8  до-
                   рожки 0
      LD A,(24073);на диске 128 файлов ?
      CP 128
      JP Z,10019  ;если да, то сообщение  DIRECTORY FULL
      RET         ;иначе возврат
───────────────────────────────────────────────────
Адрес 6864.  Выполнение  команды  SAVE.  Установите
23611 и 23825. Используется также с адресов: 6951 -
запись  программы  на  бейсике.  Установите 23773 и
23781. 6995 -запись файла. Установите 23773, 23781,
23767, 23769 и 23771.
6864  CALL 6226    ;обнуление 23824
      LD HL,0      ;автостарт бейсика  не  произво-
                    дить
      LD (23761),HL
      CALL 7647    ;помещение  имени  файла на стек
                    калькулятора
      CALL 7564    ;берем текущий символ
      CP 175       ;это CODE ?
      JR Z,6969    ;если да, то прием начала и дли-
                    ны
      CP 202       ;это LINE ?
      JR NZ,6904   ;если нет, то проверка остальных
                    расширений
      CALL 7691    ;прием строки автостарта бейсика
      CALL 7541    ;если проверка на  синтаксис, то
                    возврат
      LD HL,(23771);установка   строки   автостарта
                    бейсика
      LD (23761),HL
      LD HL,23781
      JR 6943      ;переход на запись бейсика
6904  CP 170       ;текущий символ SCREEN$ ?
      JR NZ,6925   ;если нет, то проверка  расшире-
                    ния DATA
      LD HL,16384  ;начало файла - 16384
      LD (23767),HL
      LD HL,6912   ;его длина - 6912 байтов
      LD (23769),HL
      LD (23771),HL
      JR 6984      ;запись  файла с  расширением  C

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



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

От редакции - Pовно год назад, в такой же пpедпpаздничный маpтовский день вышел пеpвый номеp саpанской бесплатной компьютеpной газеты.

Железо - новая схема сканеpа, pазpаботанного волгодонскими спектpумистами В. Юдиным и А.Дpемовым.

Смайлик - УHИвеpсальное Телегpафное Агентство Сpочных Сообщений.

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

Бух - ПАПАХИ НА БАШНЯХ.

Реклама - Минуточку внимания пожалуйста!


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

Похожие статьи:
Дискуссия - о том, кто же придумал наш журнал, кто дал название и кто был идейным воплотителем.
Интервью - интервью у Борисова Миши, известного как, BOGO или BARMALEY.
Проекты - Сетевой "Спектрум". Соображения о направлении развития Спектрума как сетевого компьютера.
Вступление - Активность ZX-Hаpода pастет, но очень медленно.
Help for games - разбор игры "HIJACK" ("ЗАХВАТ ЗАЛОЖНИКОВ").

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