City #30
25 сентября 1999

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

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

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

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

                    пpодолжение

Адрес 5201.  Копирование файла на одном  дисководе.
Поместите  описатель  файла в 23773  и  его часть в
23789 и установите 23793, 23841, 23843 и 23759. По-
дпрограмма   устанавливает  23739,  23769,  23770 и
23698.
5201  LD A,(23793) ;все скопировали ?
      OR A
      RET Z        ;если да, то возврат
      LD A,(23841) ;первый проход ?
      OR A
      JR NZ,5231   ;если да, то диск - источник уже
                    в дисководе
      CALL 7575    ;очистка экрана
      LD HL,10154  ;печать INSERT SOURCE DISC
      CALL 9991
5221  CALL 4178    ;ожидание клавиши Y
      CP "Y"
      JR NZ,5211
      CALL 7583    ;очистка низа экрана
5231  LD A,(23793) ;все скопировали ?
      OR A
      RET Z        ;если да, то возврат
      PUSH HL      ;сохранение HL
      LD HL,23843  ;копируется часть файла
      SUB (HL)
      POP HL       ;восстановление HL
      JR NC,5323   ;если еще не конец, то копирует-
                    ся часть файла
      LD A,(23793) ;копируем остаток
      LD B,A
      XOR A        ;скопировали все
      LD (23793),A
5252  PUSH BC      ;сохранение количества  копируе-
                    мых секторов
      LD (23758),A ;обнуление 23758
      LD HL,(23759);берем адрес  рабочего простран-
                    ства
      PUSH HL      ;сохраняем его
      LD DE,(23794);берем адрес копируемого участка
                    диска
      CALL 5336    ;настройка  дисковода  под диск-
                    источник
      CALL 7741    ;загрузка секторов
      LD HL,(23796);установка адреса на  диске сле-
                    дующего сектора
      LD (23794),HL
      CALL 7575    ;очистка экрана
      LD HL,10119  ;печать  INSERT DESTINATION DISC
      CALL 9991
5285  CALL 4178    ;ожидание клавиши Y
      CP "Y"
      JR NZ,5286
      CALL 7583    ;очистка низа экрана
      LD A,(23841) ;первый проход ?
      OR A
      CALL NZ,5123 ;если  да, то  проверка  наличия
                    места на  диске
      POP HL       ;восстановление  адреса рабочего
                    пространства
      POP BC       ;и количества копируемых  секто-
                    ров
      LD DE,(23787);берем  адрес  текущего  участка
                    диска
      CALL 5348    ;настройка  дисковода  под диск-
                    приемник
      CALL 7757    ;запись секторов
      LD HL,(23797);установка  адреса на диске сле-
                    дующего сектора
      LD (23787),HL
      JP 5201      ;повтор
5323  LD (23793),A ;установка длины оставшейся час-
                    ти файла
      PUSH HL      ;сохранение HL
      LD HL,23843  ;берем длину рабочей области
      LD B,(HL)


      POP HL       ;восстановление HL
      XOR A        ;обнуление аккумулятора
      JP 5252      ;копирование
───────────────────────────────────────────────────
Адрес 5336. Помещение  значения  23769 в переменную
режима дисковода. Установите 23769.
5336  PUSH HL     ;сохранение DE и HL
      PUSH DE
      CALL 15889  ;берем  адрес  переменной с типом
                   дисковода
      LD A,(23769);берем тип дисковода из 23769
      LD (HL),A   ;установка типа дисковода
      POP DE      ;восстановление DE и HL
      POP HL
      RET         ;возврат
───────────────────────────────────────────────────
Адрес 5348. Помещение  значения  23770 в переменную
режима дисковода. Установите 23770.
5348  PUSH HL     ;сохранение DE и HL
      PUSH DE
      CALL 15889  ;берем  адрес  переменной с типом
                   дисковода
      LD A,(23770);берем тип дисковода из 23769
      LD (HL),A   ;установка типа дисковода
      POP DE      ;восстановление DE и HL
      POP HL
      RET         ;возврат
                  
              пpодолжение следует ...



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

От редакции - Сегодня у нас юбилейный тpидцатый выпуск.

Железо - схема аппаратных часов для ZX spectrum.

Смайлик - коллекция смешных пошлостей.

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

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

Beatles - Сегодня у нас стаpая, но очень хоpошая песня СОH-ТPАВА.

Смак - несколько pецептов для пивного стола из книги А.Головкова "Кухня без секpетов".

Реклама - Пpиобpету пpошитое ПЗУ.


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

Похожие статьи:
Реклама - Реклама и объявления.
Тестик - тест называется "НАСТОЯЩИЙ ЛИ ВЫ ЛЮБИТЕЛЬ ZX-SPECTRUM ? "
Новости - Послe долгой и нaпряжeнной пeрвой чeтвeрти 2006 годa я выпустил-тaки Зй номeр SRS, нa дaнный момeнт это глaвнaя новость от мeня :)

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