City #49
20 октября 2000

Ликбез - ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ TR-DOS 5.04 (5.03)

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

  ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ TR-DOS 5.04 (5.03)
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ДЛЯ ПРОФЕССИОНАЛОВ, А ТАКЖЕ ДЛЯ ТЕХ, КТО ХОЧЕТ ИМИ СТАТЬ
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                          продолжение

Адрес 7726. Удаление области памяти. В HL поместите начало об-
ласти, в DE - длину.
7726  RST 32
      DEFW #19E8
      RET
────────────────────────────────────────────────────────────────
Адрес 7734. Загрузка регистра дорожки. Установите 23761. При вы-
ходе по ошибке в 23831 помещается 255. Можно использовать с адр-
еса 7738 для прямого вывода в порт 63.
7734  CALL 16050;определение номера дорожки, на которой стоит головка
      LD A,H    ;установка регистра дорожки
7738  OUT (63),A
      RET       ;возврат
────────────────────────────────────────────────────────────────
Адрес 7741. Загрузка секторов. Вход: в HL - адрес загрузки,
в D - номер дорожки, в E - номер сектора, в B - кол-во секторов.
7741  XOR A  ;признак загрузки
      JR 7780;переход к подпрограмме загрузки / записи секторов
────────────────────────────────────────────────────────────────
Адрес 7744. Запись информации о файле. На входе в C должен быть
номер файла. Используется также с адресов:
7747 - запись сектора из буфера. Вход: в 23796 установите номер
сектора+1, а в 23797 - номер дорожки.
7757 - запись секторов. В HL - адрес, в D - номер дорожки, в E -
номер сектора, в B - кол-во секторов.
7780 - загрузка / запись секторов. Предварительные установки
как и для предыдущей подпрограммы плюс в A установите 0 для заг-
рузки или что-нибудь другое для записи.
7744  CALL 5739    ;чтение сектора с описателем файла и замена описателя
7747  LD DE,(23796);берем номер сектора для записи
      DEC DE
      LD B,1       ;записывать 1 сектор
      LD HL,23845  ;записывать будем из буфера
7757  PUSH HL      ;сохраним адрес секторов на диске и в памяти
      PUSH DE
      CALL 15889   ;берем тип дисковода
      BIT 7,(HL)   ;он 40-дорожечный ?
      JR Z,7776    ;если да, то записывать можно
      BIT 0,(HL)   ;используем 40 дорожек на 80-дорожечном ?
      JR NZ,7776   ;если нет, то записывать можно
      LD HL,10712  ;адрес сообщения READ ONLY
      JP 7465      ;переход на обработку ошибок
Внимание, ошибка!!! В аккумуляторе забыли установить код ошибки.
7776  POP DE       ;восстановление адресов секторов
      POP HL
7778  LD A,255     ;признак записи
7780  LD (23758),A ;установка признака операции
7783  LD (23796),DE;установка адреса секторов на диске
      PUSH BC      ;сохранение количества секторов
      PUSH HL      ;и адреса загрузки / записи
      CALL 7734    ;чтение индексной области дорожки
      POP HL       ;восстановление адреса загрузки / записи
      POP BC       ;и количества секторов
      XOR A        ;количество секторов равно 0 ?
      OR B
      RET Z        ;если да, то возврат
7797  PUSH BC      ;сохраняем адрес и кол-во секторов
      PUSH HL
      CALL 16134   ;установка адреса загрузки / записи секторов
      LD A,(23796) ;установка номера сектора
      CALL 16130
      LD A,(23797) ;позиционирование головки на дорожку
      CALL 15971
      LD A,(23758) ;берем флаг операции
      OR A         ;загрузка?
      PUSH AF
      CALL Z,16142 ;если да, то загрузка сектора
      POP AF
      CALL NZ,16138;иначе запись сектора
      POP HL       ;берем адрес следующего сектора
      LD DE,256
      ADD HL,DE
      PUSH HL      ;сохраняем его
      LD A,16      ;на дорожке 16 секторов
      LD HL,23796
      INC (HL)     ;следующий сектор
      CP (HL)      ;конец дорожки ?
      JR NZ,7847   ;если да, то номер следующего сектора 0
      LD (HL),0
      LD HL,23797  ;и берем следующую дорожку
      INC (HL)
7847  POP HL       ;восстановление адреса следующего сектора
      POP BC       ;и количества секторов
      DJNZ 7797    ;если не все, то повтор
      RET          ;возврат

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



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

Преамбула - исполнилась мечта Nik-O услышать свою музыку в моей газете :-)

Планета шелезяка - Буфер шины адреса CPU Z80 (продолжение).

Смайлик - У Вас глисты есть?

Ликбез - ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ TR-DOS 5.04 (5.03)

Бук - Лабиринт Отражений.

Beatles - В наших глазах.

Двигатель торговли - Пpиобpету pазличную инфоpмацию по "железу" Spectruma (особенно Scorpiona): схемы, чеpтежи, ПО.


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

Похожие статьи:
Ассоциация - новая ассоциация спектрумистов - Partyzans.
STORY-2 - Дилогия "Червь". Книга первая: Князь тьмы (глава 4-15).
Всё о музыке - Отечественные синглы.

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