City #31
01 октября 1999

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

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

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

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

                    пpодолжение

Адрес 5360. Проверка наличия  места на диске-прием-
ике для команды COPY B. Установите 23775 и помести-
те в  дисковод диск-приемник.  Устанавливает 23770,
23783, 23773 и обнуляет 23841.
5360  XOR A        ;обнуление 23841
      LD (23841),A
      CALL 1029    ;настройка на диск
      CALL 15889   ;берем режим дисковода
      LD (23770),A ;сохраняем его
      LD A,(24072) ;сохраняем тип диска
      LD (23783),A
      LD HL,640    ;вычисление количества  секторов
      CP 25        ;на диске-приемнике
      JR Z,5407
      LD HL,1260
      CP 24
      JR Z,5407
      CP 23
      JR Z,5407
      LD HL,2560
      CP 22
      JR Z,5407
      JP 7540      ;если в качестве типа диска сто-
                   ит  неопределенное  значение, то
                   *ERROR*
Лучше DISC ERROR.
5407  LD (23773),HL;сохранение  количества секторов
                    на диске-приемнике
      LD BC,(23775);берем количество копируемых се-
                    кторов
      SBC HL,BC    ;места хватит ?
      JP C,7237    ;если нет, то NO SPACE
      RET          ;возврат
───────────────────────────────────────────────────
Адрес 5420.  Выполнение команды COPY B.  Установите
23611.
5420  CALL 7541    ;если идет проверка  на  синтак-
                    сис, то возврат
      CALL 5743    ;резервирование  места  в памяти
      LD HL,10105  ;печать BACKUP DISC 
      CALL 9991
      LD HL,10154  ;печать INSERT SOURCE DISC
      CALL 9991
5438  CALL 4173    ;ввод клавиши
      CP "Y"       ;это Y ?
      JR NZ,5438   ;если да, то повтор
      CALL 7583    ;очистка низа экрана
      LD A,255     ;первый проход
      LD (23841),A
Внимание!!!  Эта  переменная уже занята. В ней хра-
нятся первые 3 символа командной строки.
      CALL 1029    ;настройка на диск
      CALL 15889   ;берем режим дисковода
      LD (23769),A ;сохраняем его
      LD A,(24072) ;берем тип диска
      CP 25        ;диск 40-дорожечный  односторон-
                    ний ?
      LD HL,640    ;всего на диске 640 секторов
      JR Z,5493    ;если да, то копирование
      LD HL,1280   ;всего на диске 1280 секторов
      CP 24        ;диск 80-дорожечный  односторон-
                    ний ?
      JR Z,5493    ;если да, то копирование
      CP 23        ;диск 40-дорожечный  двухсторон-
                    ний ?
      JR Z,5493    ;если да, то копирование
      LD HL,2560   ;всего на диске 2560 секторов
      CP 22        ;диск 80-дорожечный  двухсторон-
                    ний ?
      JR Z,5493    ;если да, то копирование
      JP 7450      ;иначе *ERROR*
Внимание!!! Лучше выдавать сообщение DISC ERROR.
5493  LD BC,(24074);берем количество свободных сек-
                    торов
      SBC HL,BC    ;вычисляем   количество  занятых
                    секторов
      LD (23781),HL;установка количества секторов
      LD (23775),HL
      LD HL,0      ;скопировано 0 секторов
      LD (23777),HL
      LD (23779),HL
      CALL 5560    ;копирование секторов
      CALL 1029    ;настройка на диск
      LD A,(23783) ;установка  нового  типа  диска-
                    приемника
      LD (24072),A
      LD HL,(23773);берем  общее  число секторов на
                    диске-приемнике
      LD BC,(23775);берем  число скопированных сек-
                    торов
      SBC HL,BC    ;вычисление числа свободных сек-
                    торов на диске - приемнике
      LD (24074),HL;установка его
      CALL 5348    ;настройка  дисковода  под диск-
                    приемник
      LD DE,9      ;записывали сектор 8 дорожки 0
      LD (23796),DE
      CALL 7747    ;запись сектора
      JP 993       ;O.K.

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




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

Похожие статьи:
Открытые письма Nemo №5.5
Юмор - Отрывки - краткие фразы и афоризмы.
Список BBS - SysOp HIPHOP BBS1 изменил свой псевдоним с 'KАЛЬМАРА' на 'КРЕСТ'.

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