City #39
14 января 2000

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

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

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

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

                    пpодолжение

Адрес 6565.  Выполнение  команды  PEEK.  Установите
23825 и 23611.
6565  LD A,255;код функции PEEK
      JR 6571 ;выполнение команды

───────────────────────────────────────────────────

Адрес 6569.  Выполнение  команды  POKE.  Установите
23825 и 23611.
Используется также с адреса 6571 (выполнение коман-
ды LOAD, PEEK или POKE; Установите 23825 и 23611, а
в аккумулятор поместите код функции).
6569  LD A,238    ;код функции POKE
6571  LD (23824),A;установка кода функции
      JP 6168     ;выполнение команды

───────────────────────────────────────────────────

Адрес 6577.  Выполнение  команды  MERGE. Установите
23825 и 23611.
6577  LD A,255     ;использовалась  рабочая область
      LD (23839),A
Ошибка!!! Флаг состояния рабочей области  находится
по адресу 23829.
      CALL 6266    ;обработка параметров
      CALL 7541    ;если идет проверка на синтаксис
                    ,то возврат
      LD A,(23781) ;расширение файла B ?
      CP "B"
      JP NZ,7450   ;если нет, то ошибка
      LD BC,(23782);установка длины файла для  заг-
                    рузки
      LD (23771),BC
      PUSH BC      ;сохранение ее
      INC BC       ;оставим место для байта 128
      RST 32       ;выделение места в рабочей обла-
                    сти
      DEFW #0030
      LD (HL),128  ;маркер конца программы
      EX DE,HL     ;переброска адреса загрузки в HL
      POP DE       ;снятие со стека длины файла
      PUSH HL      ;сохранение адреса загрузки
      LD DE,(23787);берем адрес файла на диске
      CALL 6427    ;загружать весь файл
      LD A,(23772) ;берем длину файла в блоках
      LD B,A
      CALL 6226    ;операция со всем файлом
      CALL 6433    ;загрузка файла
      POP HL       ;восстанавливаем  адрес загрузки
      LD DE,(23635);берем адрес программы на бейси-
                    ке
      RST 32       ;объединение программ
      DEFW #08D2
      JP 993       ;сообщение O.K.

───────────────────────────────────────────────────

Адрес 6642. Проверка места в памяти для  резервиро-
вания нового пространства  вместо  старого.  В HL -
старая длина, в DE - новая.
Используется также с адреса 6653  (проверка наличия
пространства  в памяти;  длина  пространства должна
быть в DE).
6642  EX DE,HL
      SCF       ;вычисление разности длин
      SBC HL,DE
      RET C     ;если новая длина меньше старой, то
                 возврат
      LD DE,10  ;должно остаться еще 10 байтов
      ADD HL,DE
      LD B,H    ;переброска разности длин в BC
      LD C,L
6653  RST 32    ;проверка  наличия  пространства  в
                 памяти
      DEFW #1F05
      RET       ;возврат

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




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

Похожие статьи:
Мысли - Lunohod1: ...о правилах русского языка на ТВ и радио.
Sugаr Cаt - В одном из номеров пси, uцей рассказывал про пиво, вернее про то, как варится пиво с фрагментами крысиного тела...
Внимание - Памятка пользователю сети SPbZXNet.

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