City #29
19 сентября 1999

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

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

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

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

                   пpодолжение

Адрес 4960.  Выполнение  команды COPY S. Установите
23825 и 23611.
4960  CALL 7621   ;установка CH_ADD
      CALL 7722   ;следующий символ
      CALL 7613   ;прием имени файла  на стек каль-
                   кулятора
      CALL 7541   ;если идет проверка на синтаксис,
                   то возврат
      CALL 5743   ;резервирование места в памяти
      LD HL,10154 ;печать INSERT SOURCE DISC
      CALL 9991
4981  CALL 4178   ;ввод символа с клавиатуры
      CP "Y"      ;это Y ?
      JR NZ,4981  ;если нет, то повтор
      CALL 7583   ;очистка низа экрана
      CALL 4142   ;прием расширения файла
      CALL 7344   ;установка имени файла
      JP NZ,985   ;если  такого файла нет, то ошиб-
                   ка
      CALL 5047   ;копирование файла
      LD A,(23781);расширение файла # ?
      CP "#"
      JP NZ,993   ;если нет, то O.K.
5011  LD A,10     ;файл искать по 10 символам
      LD (23814),A
      LD HL,23782 ;следующий блок
      INC (HL)
      CALL 7575   ;очистка экрана
      LD HL,10154 ;печать INSERT SOURCE DISC
      CALL 9991
5029  CALL 4178   ;ввод клавиши
      CP "Y"      ;это Y ?
      JR NZ,5029  ;если да, то повтор
      CALL 7347   ;поиск блока
      JP NZ,993   ;если не нашли, то O.K.
      CALL 5047   ;копирование блока
      JR 5011     ;повтор
───────────────────────────────────────────────────
Адрес 5047. Копирование файла при одном  дисководе.
Номер файла поместите в регистр C.
5047  CALL 5725    ;чтение описателя файла
      LD HL,23782  ;сохранение его части
      LD DE,23789
      LD BC,7
      LDIR
      LD A,(23793) ;установка объема файла в секто-
                    рах
      LD (23824),A
      CALL 1029    ;настройка на диск
      CALL 15889   ;сохранение режима дисковода
      LD (23769),A
      LD A,255     ;первый проход
      LD (23841),A
Внимание!! Эта переменная уже занята. В ней хранят-
ся первые 3 символа командной строки.
      CALL 5201     ;копирование файла
      LD HL,(23839) ;берем  адрес  файла на диске -
                     приемнике
      LD (23787),HL ;устанавливаем его
      LD HL,(23698) ;берем  новый  адрес свободного
                     места на диске
      LD (24070),HL ;устанавливаем его
      LD HL,24073   ;записали 1 файл
      INC (HL)
      LD C,(HL)     ;берем номер файла
      DEC C
      LD B,0        ;переводим   его  в двухбайтную
                     форму
      PUSH BC       ;сохраняем его
      LD DE,9       ;записывать  сектор 8 дорожки 0
      LD (23796),DE
      CALL 7747     ;запись сектора
      POP BC        ;восстановление номера файла
      CALL 5739     ;чтение и замена описателя фай-
                     ла
      CALL 7747     ;запись сектора с описателем
      RET           ;возврат
───────────────────────────────────────────────────
Адрес 5123. Проверка  наличия  свободного  места на
диске-приемнике для команды COPY S.  Поместите опи-
сатель файла в 23773 и его часть в 23789 и  устано-
вите 23824. В дисководе должен быть  диск-приемник.
Подпрограмма устанавливает 23786, 23787 и 23839.
5123  XOR A        ;не первый проход
      LD (23841),A
      CALL 1029    ;настройка на диск
      CALL 15889   ;берем режим дисковода
      LD (23770),A ;сохраняем его
      CALL 7347    ;поиск файла
      JP Z,7248    ;если нашли, то FILE EXISTS
      CALL 1021    ;загрузка в буфер  сектора 8 до-
                    рожки 0
      LD A,(24073) ;берем количество файлов на дис-
                    ке
      CP 128       ;их 128 ?
      JP Z,10019   ;если да, то DIRECTORY FULL
      LD HL,23789  ;восстановление описателя  файла
      LD DE,23782
      LD BC,7
      LDIR
      CALL 1021    ;загрузка в буфер сектора  8 до-
                    рожки 0
      LD A,(23824) ;восстановление  длины  файла  в
                    секторах
      LD (23786),A
      LD DE,(23786);перевод ее в двухбайтную  форму
      LD D,0
      OR A         ;сброс флага C
      LD HL,(24074);уменьшаем   свободное  место на
                    диске
      SBC HL,DE
      JP C,7237    ;если его не хватило,то NO SPACE
      LD (24074),HL;установка   нового   количества
                    свободного места на диске
      LD HL,(24070);берем адрес свободного места на
                    диске
      LD (23787),HL;установка адреса файла на диске
                    - приемнике
      LD (23839),HL;сохранение его

Боже мой!!! Hу что это такое! Ведь эта переменная -
флаг способа вызова  TR-DOS. И на такой DOS все ра-
ботают. Ужас какой-то.
      RET          ;возвpат

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



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

От редакции - Оказывается SOBOS/Areasoft уже давно свалил на PC.

Железо - КОНТРОЛЛЕР IBM-совместимой клавиатуры и мыши для любого компьютера типа ZX-SPECTRUM (Инструкция по работе и подключению V 2.0).

Что-где-почем - Пpодолжаю знакомить вас с содеpжанием каталога, пpисланного мне Nemo 1999.

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

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

Реклама - Куплю недоpого чистые дискеты 5,25 дюйма.


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

Похожие статьи:
Игрушки - Lone Wolf: Новелла по игре.
Вступление - Приветствую, читателей непереодичаеской газеты под скромным названием ОРЕХ...
Проходилка - Ordinary story.
Введение - Группа "Famous Faces Factory" закончила работу над игрой Волшебник страны ОЗ.
...и здесь - Мысли по поводу и Без повода.

В этот день...   1 января

SibNews #08, Woot! #01, Spectrum Magazine #01, ACNews #25, Psychoz #14, ACNews #14, Last 128 #08, Last 128 #06, Last 128 #05, Last 128 #04, Last 128 #03, Last 128 #02, Last 128 #09, Last 128 #3.5, Last 128 #8.025, Sinclair Club #05, Last 128 #M!R 01, Fantadrom #01, Buzz #20, Last 128 #01, DonNews #13, Nicron #120, Promised Land #01, Inferno #01, Marazm #25, Ultimathum #01, Marazm #21, Hooy Mag #02, KrNews #11, Marazm #22, Marazm #23, ZX Football 2000 #01, Codemania #01, Always #03, Bugs #02, IzhNews #08, Virtual Worlds #01, Listok #04, Scenergy #02, Flash Info #18, Marazm #16, Marazm #17, Zed #01, Balagan #02, ZX Format #08, ZX Power #03, Shock #01, Impulse #02, Deja Vu #03, ZX Club #08, ZX Club #06, Numberology #01, Marazm #13, Marazm #12, Marazm #14, Gorodok #02, Zodiac #01, Marazm #15, Deja Vu #07, Marazm #11, Deja Vu #07, Playboy #03, Crazy News #2, Crazy News #4, ZX Light #01, Crazy News #5, Playboy #02, ZX News #03, ZX Review #1-2, Read Me #02, Crazy News #3, Nicron #13, Read Me #01, Public Spirit #01, Faultless #06, Faultless #05, ZX Software #01, Stump #04, Speccy #07, Возраждение #0, Speccy #03, On-Line #17, Scene+ #01, Welcome Press #01, ZX Konig #04, Adventurer #01, Faultless #05, Faultless #04, Di Halt #01, Faultless #01, Playboy #01, Crazy News #1, Faultless #03, Pioneer #03, Sinclair Town #02, ZX Magazine #01, Eldorado #01, ZX Magazine #02, Spectron #01, ZX News #01, ZX Konig #02, 200 #W, Welcome Press #00, Dune #07, Subliminal Extacy #01, Subliminal Extacy #02, ZX Konig #01, Subliminal Extacy #00, Muchomor #01, Spectrofon #01, ZX Revija #02, Outlet #01, Outlet #1-3