City #42
25 марта 2000

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

╔═════════════════════════════════════════════════╗
║.................................................║
║.....     ..................       ..............║
║....  @@@ ................   @@@@  ..............║
║...  @  @  ...............   @     ..............║
║..  @   @  ...............   @   ................║
║..  @   @                     @                  ║
║..  @   @  @   @   @   @@    @@@@    @@@    @@@  ║
║..  @   @  @   @   @  @  @  @    @  @   @  @   @ ║
║..  @   @  @   @   @@@      @    @ @@   @  @   @ ║
║    @   @  @   @   @  @     @    @@ @@@@  @    @ ║
║ @  @   @  @   @  @@   @  @ @    @  @    @   @@  ║
║  @@     @@ @@@ @@ @    @@   @@@@    @@@@      @ ║
║                                           @@@ @ ║
║........................................  @    @ ║
║.......................................   @    @ ║
║........................................   @@@@  ║
║..........................................       ║
║.................................................║
╚═════════════════════════════════════════════════╝

(c) П.Федин

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

6925  CALL 7541    ;если проверка на  синтаксис, то
                    возврат
      CALL 7564    ;берем текущий символ
      LD HL,23781
      CP 228       ;это DATA ?
      JR Z,6956    ;если да, то запись массива
      CP 13        ;это ENTER ?
      JP NZ,7450   ;если нет, то ошибка
      LD (HL),"B"  ;расширение B
      CALL 6846    ;проверка наличия такого файла и
                    свободного места в каталоге
      CALL 7708    ;удаление  из  командной  строки
                    пятибайтных чисел
6951  CALL 7134    ;установка начала и  длины файла
      JP 6995      ;запись файла
6956  LD (HL),"D"  ;расширение D
      CALL 6846    ;проверка наличия  файла и места
                    в каталоге
      CALL 7183    ;установка начала и  длины файла
      JR NC,6995   ;если все  в  порядке, то запись
                    файла
      JP C,7450    ;иначе ошибка
6969  CALL 7653    ;принятие  начала  и длины файла
      LD HL,(23769);установка начала файла
      LD (23767),HL
      LD HL,(23771);установка длины файла
      LD (23769),HL
6984  CALL 7541    ;если проверка на  синтаксис, то
                    возврат
      LD A,"C"     ;расширение C
      LD (23871),A
      CALL 6846    ;проверка наличия файла и места
                    в каталоге
6995  CALL 7001    ;запись файла
      JP 1385      ;запись информации о нем
───────────────────────────────────────────────────
Адрес 7001. Запись файла.  Установите 23761, 23767,
23769 и 23771, а в буфер загрузите сектор 8  дорож-
ки 0.
7001  LD HL,(23767);установка начала файла
      LD (23782),HL
      EX DE,HL     ;переброска его в DE
      LD HL,(23769);берем длину файла
      LD A,L       ;она равна 0 ?
      OR H
      JP Z,7450    ;если да, то ошибка
      LD A,L       ;вычисление длины файла в секто-
                    рах
      OR A
      JR Z,7021
      INC H
7021  LD A,H       ;установка длины  файла в секто-
                    рах
      LD (23786),A
      LD E,A       ;вычисление  нового   количества
                    свободных секторов
      LD D,0
      LD HL,(24074)
      SBC HL,DE
      JP C,7237    ;если  на  диске  нет  места, то
                    ошибка
      PUSH HL      ;сохранение нового количества
                    свободных секторов
      LD HL,(23641);добавление к программе  на бей-
                    сике байта 170
      LD (HL),170
      INC HL
      LD DE,(23761);и номера строки автостарта
      LD (HL),E
      INC HL
      LD (HL),D
      LD HL,(23771);установка длины файла
      LD (23784),HL
      LD HL,(24070);установка адреса файла  на дис-
                    ке
      LD (23787),HL
      EX DE,HL     ;переброска его в DE
      LD HL,(23782);берем начало файла
      LD A,(23786) ;берем его длину в секторах
      LD B,A
      CALL 7757    ;запись файла
      LD HL,(23796);берем адрес  свободного  прост-
                    ранства диска
      PUSH HL      ;сохраняем его
      CALL 1021    ;загрузка в буфер сектора  8 до-
                    рожки 0
      POP HL       ;восстановление адреса свободно-
                    го места на диске
      LD (24070),HL;установка его
      POP HL       ;восстановление  количества сво-
                    бодных секторов
      LD (24074),HL;установка его
      LD HL,(24073);берем номер файла
      LD A,(HL)
      LD (23838),A ;установка его
      INC (HL)     ;записали еще 1 файл
      PUSH HL      ;сохранение адреса с кол-вом
                    файлов на диске
      CALL 7747    ;перезапись сектора  8 дорожки 0
      POP HL       ;восстановление   адреса с  кол-
                    вом файлов
      LD C,(HL)    ;берем номер  записанного  файла
      DEC C
      LD A,(23781) ;расширение файла B ?
      CP "B"
      CALL Z,7112  ;если  да,  то  установка  длины
                    программы без переменных
      RET          ;возврат

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



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

Вступление - Совсем недавно получил письмо от VTS aka Виктоpа Pощупко.

Железо - схема Cashe памяти для Спектрума.

Юмор - смешной толковый словарь.

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

Бук - ПАПАХИ HА БАШHЯХ.

Beatles - GET BACK.

Смак - рецепт Мяса в маринаде.

Двигатель торговли - Пpодам, куплю ,обменяю пpогpаммы для ZX Spectrum.


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

Похожие статьи:
PROFI CLUB - PROFI 3.02 и KEMPSTON MOUSE.
Enlight'96 - Официальные результаты и комментарии.
Очумелые ручки - Слотовая система.

В этот день...   12 декабря