City #40
08 февраля 2000

Ликбез - полное описание + полный дизассемблер ПЗУ TR-DOS (продолжение).

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

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

                          пpодолжение

Адрес 6657. Подготовка к загрузке программы на бейсике.
6657  LD DE,(23635);берем адрес начала программы на бейсике
      LD HL,(23641);берем адрес конца программы на бейсике
      DEC HL
      PUSH HL      ;сохранение начала и конца программы
      PUSH DE
      SBC HL,DE    ;вычисление длины программы на бейсике
      LD DE,(23782);берем длину программы с переменными
      PUSH DE      ;сохраняем ее
      PUSH HL      ;сохранение длины старой программы
      LD HL,0      ;идет верификация ?
      LD A,(23801)
      CP 255
      JR Z,6688    ;если да, то длину не меняем
      LD HL,5      ;иначе увеличим ее на 5 байтов
6688  ADD HL,DE
      LD (23771),HL;установка длины загрузки
      POP HL       ;восстановление длины старой программы
      LD A,(23801) ;верификация ?
      CP 255
      JR NZ,6705   ;если нет, то подготовка памяти
      POP DE       ;снятие регистров со стека
      POP DE
      POP HL
      JR 6728      ;возврат
6705  CALL 6642    ;проверка наличия места для программы
      POP BC       ;восстановление длины программы с переменными
      POP DE       ;восстановление начала программы
      POP HL       ;восстановление конца программы
      PUSH BC      ;сохранение длины программы
      RST 32       ;стирание старой программы
      DEFW #19E5
      POP BC       ;восстановление длины программы
      CALL 7730    ;резервирование места для новой программы
      INC HL       ;установка переменной VARS
      LD BC,(23784)
      ADD HL,BC
      LD (23627),HL
6728  LD HL,(23635);берем адрес загрузки программы
      RET          ;возврат
────────────────────────────────────────────────────────────────
Адрес 6732. Подготовка памяти к загрузке массива. Установите
23784, 23767, 23769 и 23801.
6732  LD DE,(23784);загружать весь файл
      LD (23771),DE
      LD HL,(23767);берем адрес массива в памяти
      LD A,(23801) ;верификация ?
      CP 255
      RET Z        ;если да, то возврат
      LD HL,(23769);берем адрес загрузки файла
      PUSH HL      ;сохраняем его
6753  CALL 6642    ;проверка наличия места для массива
      POP HL       ;восстановление адреса загрузки файла
      LD A,H       ;он равен 0 ?
      OR L
      JR Z,6777    ;если да, то старый массив не убираем
      LD HL,(23767);берем начало старого массива
      DEC HL
      DEC HL
      DEC HL
      LD BC,(23769);берем его длину
      INC BC
      INC BC
      INC BC
      CALL 7726    ;стирание старого массива
6777  LD HL,(23641);берем начало области переменных
      DEC HL
      LD BC,(23784);берем длину файла
      PUSH BC      ;сохраняем ее
      INC BC
      INC BC
      INC BC
      CALL 7730    ;резервирование места для нового массива
      INC HL       ;установка имени массива
      LD A,(23762)
      LD (HL),A
      INC HL       ;восстановление и установка длины массива
      POP DE
      LD (HL),E
      INC HL
      LD (HL),D
      INC HL       ;берем адрес тела массива
      RET          ;возврат

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





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

Похожие статьи:
Что-где-почем - pасскажу вам о пpогpаммах, котоpые я получил от VELа и Юpы.
От авторов - Редакция.
User'am - нло-2 "Дьяволы Бездны", На пути к совершенству.

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