Полное описание и дизассемблер ПЗУ TR-DOS 5.04T (5.03) 1995 г.

Глава 13 - полный дизассемблер ПЗУ TR-DOS 5.04T. (адреса 9212-10272).


Адрес 9212. Запись текущего сектора файла данных. Откройте по-
ток, связанный с файлом.

9212  CALL 9251;вычисление адреса текущего сектора файла на диске
      CALL 8993;вычисление адреса текущего фрагмента текста в описателе канала
      LD B,1   ;записывать 1 сектор
      CALL 7757;запись сектора

Внимание!!! После записи сектора надо снова открывать поток,
связанный с файлом данных, так как при дисковой ошибке открыва-
ется поток 0.

      LD C,15  ;15-ый байт описателя канала
      RST 40
      LD A,(HL);файл прямого доступа ?
      CP 127
      RET Z    ;если да, то возврат
      CALL 8993;вычисление адреса текущего фрагмента текста в описателе канала
      XOR A    ;сектор заполнять нулями
      LD B,A   ;длина его - 256 байтов
9235  LD (HL),A;очистка байта
      INC HL   ;следующий байт
      DJNZ 9235;повтор до конца
      RET      ;возврат
────────────────────────────────────────────────────────────────
Адрес 9240. Загрузка текущего сектора в описатель канала. От-
кройте поток, связанный с файлом данных.

9240  CALL 9251;вычисление адреса текущего сектора на диске
      CALL 8993;вычисление адреса сектора в описателе канала
      LD B,1   ;загружать 1 сектор
      JP 7741  ;загрузка сектора и возврат

Внимание!!! После загрузки сектора надо снова открывать канал,
связанный с файлом данных, так как при ошибках открывается поток
0.
────────────────────────────────────────────────────────────────
Адрес 9251. Вычисление адреса текущего сектора файла на диске.
Откройте поток, связанный с файлом данных. На выходе в DE будет
адрес сектора на диске.

9251  LD HL,(23633);берем адрес 30-го байта описателя канала
      LD BC,30
      ADD HL,BC
      LD E,(HL)    ;берем адрес файла на диске
      INC HL
      LD D,(HL)
      LD C,14      ;14-ый байт
      RST 40
      LD B,(HL)    ;берем номер текущего сектора файла
      DEC B        ;он равен 0 ?
      INC B
      PUSH AF      ;сохранение AF
      LD A,16      ;на дорожке 16 секторов
      JR Z,9281    ;если номер текущего сектора файла pавен 0, то выход
9272  INC E        ;следующий сектор
      CP E         ;конец дорожки ?
      JR NZ,9279   ;если да, то
      LD E,0       ;сектор 0
      INC D        ;и следующая дорожка
9279  DJNZ 9272    ;повтор до конца
9281  POP AF       ;восстановление AF
      RET          ;возврат
────────────────────────────────────────────────────────────────
Адрес 9283. Установка дисковода для операций с файлом данных.
Откройте поток, связанный с файлом.

9283  LD C,11  ;берем адрес 11-го байта описателя канала
      RST 40
      LD A,(HL);берем номер дисковода, на котором находится файл
      JP 15819 ;выбор дисковода
────────────────────────────────────────────────────────────────
Адрес 9290. Вывод символа в файл данных. Символ поместите в ак-
кумулятор и откройте поток, связанный с файлом.

9290  LD HL,23746 ;адрес переключателя ПЗУ на бейсик
      PUSH HL     ;помещение его на стек
      LD HL,8433  ;адрес подпрограммы изменения памяти
      PUSH HL     ;помещение его на стек
      PUSH AF     ;сохранение символа
      CALL 8433   ;изменение памяти
      LD A,10     ;файл искать по 10 байтам описателя
      LD (23814),A
      POP AF      ;восстановление символа
      CALL 9378   ;работа с файлом прямого доступа
      PUSH AF     ;сохранение символа
      CALL 9808   ;файл открывался для чтения ?
      JR Z,9374   ;если да, то ошибка
      POP AF      ;восстановление символа
      CALL 8983   ;вычисление адреса текущего символа в текущем секторе
      LD (HL),A   ;запись символа
      JP 9002     ;проверка достижения конца сектора в описателе канала
────────────────────────────────────────────────────────────────
Адрес 9326. Проверка достижения конца блока. Используется также
с адресов:
9362 - обработка ошибки END OF FILE через ПЗУ бейсика.
9364 - обработка ошибок через ПЗУ бейсика. Код ошибки поместите
в аккумулятор.

9326  LD C,13     ;берем адрес 13-го байта описателя канала
      RST 40
      LD A,(HL)   ;берем младший байт длины пройденной части файла
      LD BC,14    ;27-й байт
      ADD HL,BC
      CP (HL)     ;сравнение младших байтов длин пройденной и записанной
                  ;частей блока
      RET NZ      ;если они не равны, то возврат
      LD C,14     ;аналогично со старшими байтами
      RST 40
      LD BC,14
      ADD HL,BC
      CP (HL)
      RET NZ
      LD HL,23734 ;адрес переменной разpешения изменения памяти
      LD A,(HL)   ;берем ее значение
      CP 244      ;интерфейс-1 есть?
      JR Z,9362   ;если нет, то ошибка
      BIT 4,(HL)  ;выполняется команда LOAD интерфейса-1 ?
      JR Z,9362   ;если да, то ошибка
      OR 1        ;сброс флага C
      POP HL      ;снятие со стека адреса возврата
      RET         ;возврат по следующему адресу
9362  LD A,7      ;код ошибки END OF FILE
9364  LD (23610),A;установка кода ошибки
      CALL 8421   ;изменение памяти
      RST 32      ;обработка ошибки
      DEFW #0058
────────────────────────────────────────────────────────────────
Адрес 9373. Команда RET.

9373  RET
────────────────────────────────────────────────────────────────
Адрес 9374. Обработка ошибки INVALID I/O DEVICE через ПЗУ бейси-
ка.

9374  LD A,23;код ошибки - 23
      JR 9364;обработка ошибки чеpез ПЗУ бейсика
────────────────────────────────────────────────────────────────
Адрес 9378. Работа с файлом произвольного доступа. Очередной
символ поместите в A и откройте поток, связанный с файлом дан-
ных. Если окончен прием записи или файл последовательного досту-
па, то происходит простой возврат, иначе происходит возврат из
программы, вызвавшей эту подпрограмму.

9378  LD D,A       ;сохранение символа
      LD C,15      ;берем адрес 13-го байта описателя канала
      RST 40
      LD A,(HL)    ;файл произвольного доступа ?
      CP 127
      LD A,D       ;восстановление символа
      RET NZ       ;если файл произвольного доступа, то возврат
      LD BC,19     ;34-ый байт
      ADD HL,BC
      LD A,(HL)    ;принимаем номер записи ?
      OR A
      LD A,D       ;восстановление символа
      JR NZ,9429   ;если номер записи принят, то запись символа
      DEC HL       ;33-ий байт
      LD A,(HL)    ;это 0 ?
      OR A
      JR NZ,9410   ;если нет, то рабочая область уже есть
      PUSH BC      ;сохранение числа 19,
      PUSH HL      ;адреса 33-го байта описателя канала и
      PUSH DE      ;символа
      CALL 9464    ;выделение 16 байтов в рабочей области
      POP DE       ;восстановление символа,
      POP HL       ;адреса 33-го байта описателя канала и
      POP BC       ;числа 19
9410  LD C,(HL)    ;берем относительный адрес символа
      LD A,D       ;восстановление символа
      EX DE,HL
      LD HL,(23759);берем адрес рабочей области
      ADD HL,BC    ;вычисление адреса для символа
      CP 6         ;символ CHR$ 6 ?
      LD (HL),A    ;помещение символа в рабочую область
      CALL Z,9476  ;если символ CHR$ 6, то номер записи принят
      LD C,33      ;33-ий байт
      RST 40
      INC (HL)     ;записали 1 символ
      POP HL       ;снятие со стека адреса возврата
      RET          ;возврат по следующему адресу
9429  DEC HL       ;33-ий байт
      LD A,(HL)    ;берем относительный адрес символа
      DEC HL       ;32-й байт
      INC A        ;место для символа ENTER
      CP (HL)      ;конец записи ?
      INC HL       ;33-ий байт
      INC (HL)     ;записали 1 символ
      PUSH HL      ;сохранение адреса 33-го байта описателя
      PUSH AF      ;канала и результата проверки наличия места для символа
      LD C,35      ;35-ый байт
      RST 40
      LD (HL),255  ;сектор переписывать
      POP AF       ;восстановление результата проверки наличия места
      POP HL       ;для символа и адреса 33-го байта описателя канала
      JR C,9454    ;если места для символа нет, то следующая запись
      LD A,D       ;восстановление символа
      CP 13        ;это ENTER ?
      JR Z,9458    ;если да, то следующая запись
      POP BC       ;снятие со стека адреса возврата
      RET          ;возврат по следующему адресу
9454  LD A,D       ;восстановление символа
      CP 13        ;это ENTER ?
      RET NZ       ;если нет, то возврат
9458  XOR A        ;относительный адрес символа - 0
      LD (HL),A
      INC HL       ;34-ый байт
      LD (HL),A    ;будем принимать номер записи
      LD A,D       ;восстановление символа
      RET          ;возврат
────────────────────────────────────────────────────────────────
Адрес 9464. Выделение 16 байтов в рабочей области памяти. Уста-
навливает 23759.

9464  LD HL,(23649);берем адрес рабочей области памяти
      LD (23759),HL;установка его
      LD BC,16     ;выделять 16 байтов
      JP 7715      ;выделение области и возврат
────────────────────────────────────────────────────────────────
Адpес 9476. Обработка номера записи. Поместите в память номер
записи в виде текста и поместите его адрес в 23759, а в HL по-
местите адрес последнего символа номера записи плюс 1.

9476  LD (HL),13   ;конец строки
      LD HL,(23645);сохранение CH_ADD
      LD (23767),HL
      LD HL,(23759);установка CH_ADD на номер записи
      LD (23645),HL
      LD HL,23611  ;проверка на синтаксис
      RES 7,(HL)
      CALL 7617    ;перевод числа в 5-байтную форму
      LD HL,23611  ;выполнение
      SET 7,(HL)
      LD HL,(23759);установка CH_ADD на номер записи
      LD (23645),HL
      CALL 7617    ;прием числа на стек калькулятора
      CALL 7609    ;снятие его оттуда
      PUSH BC      ;перенос его в DE
      POP DE
      LD C,32      ;берем адрес 13-го байта описателя канала
      RST 40
      LD B,(HL)    ;берем длину записи
      XOR A
      LD HL,0      ;вычисление относительного адреса записи в
      LD (23771),HL;секторе, номера сектора и номера блока
9528  ADD HL,DE    ;извините, не понял, как это pаботает
      JR NC,9540
      PUSH HL
      LD HL,(23771)
      INC HL
      LD (23771),HL
      POP HL
9540  DJNZ 9528
      LD (23769),HL
      LD A,(23771) ;в блоке всего 16 секторов
      LD HL,23770
      AND 15
      LD (23771),A
      LD HL,(23767);восстановление CH_ADD
      LD (23645),HL
      CALL 9576    ;открытие записи
      LD C,33      ;33-ий байт
      RST 40
      LD A,255     ;относительный адрес текущего символа будет 0
      LD (HL),A
      INC HL       ;34-ый байт
      LD (HL),A    ;номер записи принят
      RET          ;возврат
────────────────────────────────────────────────────────────────
Адрес 9576. Открытие записи. Установите 23767, 23769 и 23771.

9576  LD C,25      ;берем адрес 25-го байта описателя канала
      RST 40
      LD A,(23770) ;берем номер открываемого блока
      CP (HL)      ;блок уже открыт ?
      JP NZ,9604   ;если нет, то открытие блока
      LD C,14      ;14-ый байт
      RST 40
      LD A,(23771) ;берем номер сектора в открываемом блоке
      CP (HL)      ;сектор уже считан ?
      JP NZ,9639   ;если нет, то загрузка сектора
9695  LD C,13      ;13-ый байт
      RST 40
      LD A,(23769) ;берем относительный адрес открываемой записи
      LD (HL),A    ;установка его
      RET          ;возврат
9604  CALL 9674    ;проверка и обнуление 35-го байта
      CALL NZ,9667 ;если надо, то запись сектора
      LD A,(23770) ;берем номер открываемого блока
      LD C,25      ;25-ый байт
      RST 40
      LD (HL),A    ;установка номера блока
      LD C,16      ;16-ый байт
      RST 40
      LD DE,23773  ;установка описателя блока
      LD BC,16
      LDIR
      CALL 7347    ;поиск блока

Ошибка!!! После поиска файла надо снова открывать канал файла
данных, так как при ошибке будет открыт поток 0.

      JP NZ,9682   ;если блок не найден, то создание блока
      CALL 9188    ;открытие блока
      JR 9645      ;загрузка сектора из блока
9639  CALL 9674    ;проверка и обнуление 35-го байта
      CALL NZ,9667 ;если надо, то запись сектора
9645  LD A,(23771) ;берем номер считываемого сектора
      LD C,14      ;14-ый байт
      RST 40
      LD (HL),A    ;установка номера сектора
      PUSH HL      ;сохранение адреса 14-го байта
      CALL 9283    ;установка дисковода
      CALL 9240    ;загрузка сектора
      POP HL       ;восстановление адреса 14-го байта
      DEC HL       ;13-ый байт
      LD A,(23769) ;установка относительного адреса открываемой
      LD (HL),A    ;записи
      JR 9596      ;выход
────────────────────────────────────────────────────────────────
Адрес 9667. Запись текущего сектора. Откройте канал файла дан-
ных.

9667  CALL 9283;установка дисковода
      CALL 9212;запись сектора
      RET      ;возврат
────────────────────────────────────────────────────────────────
Адрес 9674. Проверка и обнуление 35-го байта описателя канала.
Соответственно содержимому будет установлен флаг Z, а само со-
держимое будет в аккумуляторе. Откройте нужный канал.

9674  LD C,35  ;берем адрес 35-го байта описателя канала
      RST 40
      LD A,(HL);берем его содержимое
      OR A     ;проверка его
      LD (HL),0;обнуление байта
      RET      ;возврат
────────────────────────────────────────────────────────────────
Адрес 9682. Создание блока файла данных. Установите 23767,
23769 и 23771.

9682  LD HL,(23770);берем номер блока
      LD H,32
      LD (23767),HL;установка его
      LD HL,(23769);сохранение относительного адреса открываемой
      PUSH HL      ;записи
      LD HL,(23771);и номера сектора
      PUSH HL
      CALL 9089    ;создание блока
      POP HL       ;восстановление номера сектора
      LD (23771),HL
      POP HL       ;и относительного адреса открываемой записи
      LD (23769),HL
      JR 9645      ;загрузка сектора из блока
────────────────────────────────────────────────────────────────
Адрес 9711. Ввод из файла данных. Откройте поток, связанный с
файлом данных. При вызове из редактора вводит всю строку и про-
изводит выход из редактора, иначе возвращает символ из файла в
A.

9711  CALL 8433    ;изменение памяти
      LD HL,23612  ;pежим не менялся
      RES 3,(HL)
      LD HL,(23613);берем адрес подпрограммы обработки ошибок
      LD E,(HL)
      INC HL
      LD D,(HL)
      OR A         ;он pавен 4223 ?
      LD HL,4223
      SBC HL,DE
      JR NZ,9766   ;если нет, то подпрограмма вызвана не из редактора
      LD SP,(23613);очистка стека редактора
      POP DE       ;снятие адреса подпрограммы обработки ошибок
      POP DE       ;восстановление адреса дна стека
      LD (23613),DE;установка его
9743  CALL 9771    ;ввод символа из файла
      JR C,9757    ;если был введен символ, то посылка его в буфер редактора
9748  LD HL,23746  ;адрес переключателя ПЗУ на бейсик
      PUSH HL      ;помещение его на стек
      LD HL,8421   ;адрес подпрограммы удаления буфера и изменения памяти
      PUSH HL      ;помещение его на стек
      RET          ;изменение памяти и возврат
9757  CP 13        ;символ ENTER ?
      JR Z,9748    ;если да, то выход
      RST 32       ;ввод символа в буфер редактора
      DEFW #0F85
      JR 9743      ;повтор
9766  CALL 9771    ;ввод символа из файла
      JR 9748      ;возврат
────────────────────────────────────────────────────────────────
Адрес 9771. Ввод байта из файла данных. На выходе байт будет в
аккумуляторе. Откройте поток, связанный с файлом данных.

9771  LD A,10     ;файл искать по 10 байтам описателя
      LD (23814),A
      CALL 9808   ;файл открыт для чтения ?
      JR Z,9794   ;если да, то
      CP 127      ;файл произвольного доступа ?
      JP NZ,9374  ;если нет, то ошибка
      LD BC,19    ;берем адрес 34-го байта описателя канала
      ADD HL,BC
      LD (HL),0   ;подпрограмма вывода будет принимать номер записи
      JR 9797
9794  CALL 9326   ;
9797  CALL 8983   ;вычисление адреса текущего символа
      LD A,(HL)   ;берем этот символ
      PUSH AF     ;сохраняем его
      CALL 9115   ;проверка достижения конца сектора
      POP AF      ;восстановление символа
      SCF         ;был введен символ
      RET         ;возврат
────────────────────────────────────────────────────────────────
Адрес 9808. Проверка 15-го байта описателя текущего канала. Со-
ответственно его содержимому установится флаг Z, а само содержи-
мое будет в регистре A.

9808  LD C,15  ;берем адрес 15-го байта описателя канала
      RST 40
      LD A,(HL);берем этот байт
      OR A     ;проверка его на 0
      RET      ;возврат
────────────────────────────────────────────────────────────────
Адрес 9814. Выполнение команды CLOSE#. Установите 23825 и 23611.

9814  LD HL,(23825);установка CH_ADD
      LD (23645),HL
      CALL 7691    ;прием номера потока
      CALL 7541    ;если идет проверка на синтаксис, то возврат
      LD A,(23771) ;берем номер потока
      RST 32       ;берем относительный адрес описателя канала
      DEFW #1727
      LD A,B       ;поток закрыт ?
      OR C
      JP Z,467     ;если да, то завершение
      PUSH HL      ;сохранение адреса элемента STRMS
      LD HL,(23631);берем адрес области описателей каналов
      ADD HL,BC    ;вычисляем адрес первого байта описателя канала
      LD A,(HL)    ;берем старший байт адреса подпрограммы вывода
      LD HL,15630  ;он равен 61 ?
      CP H
      POP HL       ;восстановление адреса элемента STRMS
      JP NZ,8744   ;если старший байт адреса подпрограммы вывода не равен 61,
                   ;то сообщение NOT DISC FILE

Дурацкая проверка!!! Мало ли что может изменить пользователь!

      LD (HL),0    ;закрытие потока
      INC HL
      LD (HL),0
      LD (23769),BC;сохранение относительного адреса описателя канала
      LD HL,(23631);вычисление адреса описателя канала
      ADD HL,BC
      DEC HL
      LD (23767),HL;сохранение его
      CALL 9934    ;запись остатка файла, если нужно
      LD HL,(23767);восстановление адреса описателя канала
      LD BC,292    ;его длина - 292 байта
      CALL 7726    ;уничтожение области описателя канала
      LD HL,23568  ;берем начало таблицы STRMS
      LD B,16      ;всего 16 потоков
9885  PUSH BC      ;сохранение количества потоков
      LD BC,(23769);берем относительный адрес описателя канала
      LD E,(HL)    ;берем адрес из таблицы
      INC HL
      LD D,(HL)
      EX DE,HL     ;переносим его в HL
      SBC HL,BC    ;он меньше нашего адреса ?
      EX DE,HL     ;переброска его в DE
      JR C,9916    ;если он меньше нашего адреса, то следующий элемент
      LD D,(HL)    ;снова берем адрес из таблицы
      DEC HL
      LD E,(HL)
      INC HL
      PUSH HL      ;сохранение адреса текущего элемента таблицы
      EX DE,HL     ;переброска адреса из таблицы в HL
      LD BC,292    ;коррекция адреса
      SBC HL,BC
      EX DE,HL     ;перенос его в DE
      POP HL       ;восстановление адреса текущего элемента таблицы
      LD (HL),D    ;установка нового адреса
      DEC HL
      LD (HL),E
      INC HL
9916  INC HL       ;следующий элемент
      POP BC       ;восстановление количества элементов
      DJNZ 9885    ;повтор до конца
      LD HL,(23825);коррекция адреса командной строки
      LD BC,292
      SBC HL,BC
      LD (23825),HL
      JP 467       ;завершение
────────────────────────────────────────────────────────────────
Адрес 9934. Запись текущего сектора файла данных. При записи от-
крывает поток, связанный с файлом. Поместите в HL и 23767 адрес
описателя канала.

9934  LD BC,15     ;берем адрес 15-го байта описателя канала
      ADD HL,BC
      LD A,(HL)    ;файл открывался для чтения ?
      OR A
      RET Z        ;если да, то возврат
      LD HL,(23767);открытие потока
      LD (23633),HL
      CALL 9953    ;запись описателя блока
      JP 9212      ;запись текущего сектора и возврат
────────────────────────────────────────────────────────────────
Адpес 9953. Запись описателя текущего блока файла данных. От-
кройте поток, связанный с файлом данных и поместите в HL адрес
описателя канала.

9953  LD BC,13   ;берем адрес 13-го байта описателя канала
      ADD HL,BC
      LD E,(HL)  ;берем длину пройденной части блока
      INC HL
      LD D,(HL)
      LD BC,13   ;берем адрес 26-го байта описателя канала
      ADD HL,BC
      LD (HL),E  ;установка длины записанной части блока
      INC HL
      LD (HL),D
      LD C,16    ;16-ый байт
      RST 40
      LD DE,23773;установка описателя блока
      LD BC,16
      LDIR
      CALL 9283  ;установка дисковода
      LD C,12    ;12-ый байт
      RST 40
      LD C,(HL)  ;берем номер блока в каталоге
      CALL 5739  ;замена описателя блока
      JP 7741    ;запись сектора с описателем и возврат

Внимание!!! После записи сектора надо снова открывать поток,
связанный с файлом данных, так как при дисковой ошибке открыва-
ется поток 0.
────────────────────────────────────────────────────────────────
Адрес 9991. Печать строки. В HL поместите ее начало. Последний
символ должен быть либо CHR$ 0, либо с поднятым седьмым битом.

9991  LD A,(HL) ;берем символ из строки
      OR A      ;это CHR$ 0 ?
      RET Z     ;если да, то возврат
      AND 127   ;сброс бита 7
      RST 16    ;печать символа
      BIT 7,(HL);бит 7 установлен ?
      RET NZ    ;если да, то возврат
      INC HL    ;берем адрес следующего символа
      JR 9991   ;повтор
────────────────────────────────────────────────────────────────
Адрес 10003. Сравнение областей памяти. В HL и DE поместите на-
чала сравниваемых областей, а в B - их длину. При несовпадении
флаг Z сброшен, иначе включен.

10003 LD A,(DE) ;сравнение байтов из областей
      CP (HL)
      RET NZ    ;если они не совпали, то возврат
      INC HL    ;следующие байты
      INC DE
      DJNZ 10003;повтор до конца
      RET       ;возврат
────────────────────────────────────────────────────────────────
Адрес 10011. Обработка ошибки NO DISC без установки TAPE LOADING
ERROR.

10011 LD HL,10236;адрес сообщения NO DISC
      LD A,6     ;код ошибки - 6
      JP 7242    ;обработка ошибки
────────────────────────────────────────────────────────────────
Адрес 10019. Обработка ошибки DIRECTORY FULL.

10019 LD HL,10221;адрес сообщения DIRECTORY FULL
      LD A,4     ;код ошибки - 4
      JP 7242    ;обработка ошибки
────────────────────────────────────────────────────────────────
Адрес 10027. Установка кода ошибки TAPE LOADING ERROR для пзу
бейсика.

10027 LD A,26 ;код ошибки TAPE LOADING ERROR
      JR 10033;установка кода ошибки
────────────────────────────────────────────────────────────────
Адрес 10031. Установка кода ошибки INVALID I/O DEVICE для пзу
бейсика. Используется также с адрес 10033 (установка кода ошибки
для пзу бейсика; код ошибки поместите в A).

10031 LD A,18     ;код ошибки INVALID I/O DEVICE
10033 LD (23610),A;установка кода ошибки
      RET         ;возврат
────────────────────────────────────────────────────────────────
Адрес 10037. Установка кода ошибки OUT OF MEMORY для пзу бейси-
ка.

10037 LD A,3  ;код ошибки OUT IF RAM
      JR 10033;установка кода ошибки
────────────────────────────────────────────────────────────────
Адрес 10041. Проверка дорожки. В регистре D задайте физический
номер дорожки. По окончании в 23766 получите число битых секто-
ров на дорожке.

10041 XOR A        ;дорожку проверять
      LD (23768),A
      LD (23766),A ;дефектных секторов пока не нашли
      IN A,(31)    ;сохраним состояние контроллера дисководов
      LD (23757),A
      LD E,D       ;перегрузка номера дорожки в E
      PUSH DE      ;сохранение номера дорожки
      LD A,E       ;помещение номера дорожки в регистр данных
      OUT (127),A
      LD A,24      ;позиционирование
      CALL 15770
      LD A,(23757) ;берем состояние контроллера до операции
      AND 128      ;дисковод был готов ?
      CALL NZ,16032;если нет, то задержка в 2168937 тактов
      POP DE       ;восстановление номера дорожки
      CALL 12987   ;проверка дорожки по таблице секторов для быстрого диска
      LD A,(23766) ;битых секторов нет ?
      OR A
      RET Z        ;если да, то возврат
      LD A,7       ;дисковая ошибка
      LD (23823),A
      RET          ;возврат
────────────────────────────────────────────────────────────────
Адрес 10086. Сообщения TR-DOS.

10086 DEFM "O.K."
      DEFB 0
10091 DEFM "Verify error."
      DEFB 141
10105 DEFM "BACKUP DISK"
      DEFB 141
10117 DEFM "Insert Destination disk"
      DEFB 13
      DEFM "then press Y"
      DEFB 0
10154 DEFM "Insert source disk then press Y"
      DEFB 0
10186 DEFM "*BREAK*"
      DEFB 141
10194 DEFM "Out of RAM"
      DEFB 141
10205 DEFM "Array not found"
      DEFB 141
10221 DEFM "Directory full"
      DEFB 141
10236 DEFM "No disk"
      DEFB 141
10244 DEFM "Stream opened"
      DEFB 141
10258 DEFM "Not disk file"
      DEFB 141
10272 DEFM " file exists"
      DEFB 13
      DEFM "over write?(Y/N)"
      DEFB 0




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



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

Похожие статьи:
Реклама - реклама и объявления.
НАM ПИШУT - Кoрoчe тут в ФПn2 пoчитaл типa "нaм пишут" и тoжe рeшил нaписaть...
Ремонты/поломки - Вчера было анонсировано о сегодняшнем возврате в Net Оборотня.
Архив - Сегодня мы попытаемся затронуть такую ранее не затрагиваемую тему, как поэзия.
Комментарий к приложению

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