Полное описание и дизассемблер ПЗУ TR-DOS 5.04T (5.03) 1995 г.

Глава 9 - полный дизассемблер ПЗУ TR-DOS 5.04T. (адреса 5724-6728).


Адрес 5724. Чтение описателя файла. На входе в регистр A помес-
тите номер файла. Описатель будет загружен по адресу 23781. Ис-
пользуется также с адресов:
5725 - то же, что и 5724, но номер файла в регистре C.
5726 - то же, что и 6121, но сохраняет номер файла.

5724  LD C,A   ;перенос номера файла в рег. C
5725  XOR A    ;переносим описатель из буфера в память
5726  PUSH BC  ;сохранение номера файла
      CALL 6121;чтение сектора с описателем и перенос описателя
      POP BC   ;восстановление номера файла
      RET      ;возврат
----------------------------------------------------------------
Адрес 5732. запись информации о файле. Вход: описатель располо-
жить по адресу 23773, а в аккумулятор поместить номер файла.

5732  LD C,A   ;перенос в C номера файла
      CALL 5739;чтение  сектора и замена описателя файла в нем
      JP 7747  ;перезапись сектора
----------------------------------------------------------------
Адрес 5739. Чтение в буфер сектора с описателем файла и замена
описателя. Поместите описатель по адресу 23773.

5739  LD A,255;описатель перемещать из переменных в буфер
      JR 5726 ;то же, что и 6121, но с сохранением BC
----------------------------------------------------------------
Адрес 5743. Резервирование места в памяти. Устанавливает 23759 и
23843.

5743  LD A,255     ;WORKSP использовалась
      LD (23822),A
      CALL 5760    ;вычисление размера доступной памяти
      LD HL,(23649);установка адреса рабочей области
      LD (23759),HL
      JP 7715      ;выделение места в памяти и возврат
----------------------------------------------------------------
Адрес 5760. Вычисление количества свободной памяти в секторах.
Размер свободной памяти в байтах будет в BC, а в секторах - в
23843.

5760  RST 32      ;берем количество свободной памяти в байтах
      DEFW #1F1A
      LD HL,65535
      SBC HL,BC
      LD A,H      ;свободно меньше 16 секторов ?
      CP 16
      JR NC,5775  ;если да, то
      LD A,17     ;будем выделять 16 секторов
5775  DEC A       ;1 сектор на всякий случай
      LD (23843),A;установка размера свободной памяти в секторах
      LD B,A      ;установка размера свободной памяти в байтах
      LD C,0
      RET         ;возврат
----------------------------------------------------------------
Адрес 5783. Помещает HL в 23767 и 23771 и прибавляет 23786 (1
байт) к 23769 (2 байта).

5783  LD (23767),HL;установка 23767 и 23769
      LD (23771),HL
      LD DE,(23786);сложение 23786 и 23769
      LD HL,(23769)
      LD D,0
      ADD HL,DE
      LD (23769),HL
      RET          ;возврат
----------------------------------------------------------------
Адрес 5803. Выполнение команды MOVE. Установите 23611.

5803  CALL 7541    ;если идет проверка на синтаксис, то возврат
      CALL 5743    ;резервирование места в памяти
      CALL 1029    ;настройка на диск
      LD A,(24089) ;стертые файлы на диске есть ?
      OR A
      JP Z,993     ;если нет, то сообщение O.K.
      LD HL,0      ;пока освободилось 0 секторов
      LD (23769),HL
      LD C,255     ;начнем с файла номер 0
5827  INC C        ;следующий файл
      CALL 5715    ;он стерт ?
      JR NZ,5827   ;если нет, то следующий файл
      LD A,C       ;сохранение номера стираемого файла
      LD (23764),A
      LD HL,(23787);берем адрес стираемого файла на диске
      LD (23765),HL;сохраняем его
      CALL 5783    ;приращение счетчика освободившихся секторов
5846  INC C        ;следующий файл
      CALL 5715    ;он стерт ?
      JR Z,5846    ;если да, то следующий файл
      CP 0         ;это конец каталога ?
      JP NZ,5904   ;если нет, то меняем файлы местами
      LD A,(23764) ;берем номер стираемого файла
      LD C,A
5861  INC C        ;следующий файл
      CALL 5715    ;это конец каталога ?
      CP 0
      JR Z,5996    ;если да, то реорганизация описателя диска
      XOR A        ;конец каталога
      LD (23773),A
      CALL 7744    ;запись описателя файла
      CALL 5783    ;приращение счетчика освободившихся секторов
      JR 5861      ;повтор
5904  LD A,(23786) ;берем размер перемещаемого файла в секторах
      LD (23763),A ;сохраняем его
      LD (23761),A
      LD HL,(23787);берем адрес перемещаемого файла на диске
      LD (23765),HL;сохраняем его
      PUSH BC      ;сохранение номера перемещаемого файла
      CALL 6053    ;перемещение файла
      POP BC       ;восстановление номера перемещаемого файла
      LD HL,(23796);перемещение продолжится с этого места
      LD (23765),HL
      LD (23787),HL
      XOR A        ;размер стертого файла - 0 секторов
      LD (23786),A
      LD A,(23773) ;сохранение первого символа имени файла
      PUSH AF
      LD A,1       ;файл стерт
      LD (23773),A
      CALL 7744    ;запись описателя стертого файла
      POP AF       ;восстановление первого символа имени файла
      LD (23773),A
      LD A,(23764) ;берем номер стертого файла
      LD C,A
      LD HL,(23771);установка нового адреса перемещенного файла
      LD (23787),HL;на диске
      LD A,(23761) ;восстановление размера перемещенного файла
      LD (23786),A ;на диске
      CALL 7744    ;запись описателя перемещенного файла
      LD A,(23764) ;берем номер файла после перемещенного
      INC A
      LD C,A
      CALL 5725    ;чтение его описателя
      LD HL,(23765);установка его нового адреса на диске
      LD (23787),HL
      CALL 7744    ;запись его описателя
      LD A,(23764) ;берем номер перемещенного файла
      LD C,A
      JP 5827      ;повтор
----------------------------------------------------------------
Адpес 5996. Реорганизация описателя диска. Установите 23759,
23769 и 23765.

5996  LD HL,(23759);берем адрес рабочего пространства
      LD BC,4096   ;сокращаем его на 4096 байтов
      CALL 7726
      CALL 1021    ;загрузка в буфер сектора 8 дорожки 0
      LD HL,(24074);увеличение количества свободного места на
      LD DE,(23769);диске
      ADD HL,DE
      LD (24074),HL
      LD A,(24073) ;уменьшение количества файлов на диске на
      LD HL,24089  ;число стертых
      SUB (HL)
      LD (24073),A
      LD (HL),0    ;на диске больше нет стертых файлов
      LD HL,(23765);установка нового адреса свободного места на
      LD (24070),HL;диске
      PUSH AF      ;сохранение количества файлов на диске
      CALL 7747    ;запись сектора 8 дорожки 0
      POP AF       ;восстановление количества файлов на диске
      LD C,A
      CALL 5725    ;чтение описателя файла за последним
      XOR A        ;это конец каталога
      LD (23773),A
      JP 1385      ;запись описателя файла и завершение
----------------------------------------------------------------
Адрес 6053. Перемещение файла. Установите 23763, 23843, 23759,
23765 и 23767.

6053  LD A,(23763) ;перемещен весь файл ?
      OR A
      RET Z        ;если да, то возврат
      PUSH HL      ;сохранение HL
      LD HL,23843  ;буфера хватит на остаток ?
      SUB (HL)
      POP HL       ;восстановление HL
      JR NC,6109   ;если буфера не хватит, то перемещаем часть файла
      LD A,(23763) ;берем количество оставшихся секторов
      LD B,A
      XOR A        ;переместили все
      LD (23763),A
6074  PUSH BC      ;сохранение количества перемещаемых секторов
      LD HL,(23759);берем адрес рабочей области
      PUSH HL      ;сохранение его
      LD DE,(23765);берем адрес части перемещаемого файла на старом месте
      CALL 7741           ;загрузка секторов
      LD HL,(23796);установка адреса следующей части файла
      LD (23765),HL
      POP HL       ;восстановление адреса рабочей области
      POP BC       ;и количества перемещаемых секторов
      LD DE,(23767);берем адрес части перемещаемого файла на новом месте
      CALL 7757    ;запись секторов
      LD HL,(23796);установка адреса следующей части файла
      LD (23767),HL
      JR 6053      ;повтор
6109  LD (23763),A ;установка количества оставшихся секторов
      PUSH HL      ;сохранение HL
      LD HL,23843  ;берем длину рабочей области в секторах
      LD B,(HL)
      POP HL       ;восстановление HL
      XOR A        ;обнуление аккумулятора
      JR 6074      ;перемещение секторов
----------------------------------------------------------------
Адрес 6121. Загрузка в буфер сектора с описателем файла и пере-
нос описателя. В регистре C - номер файла, в A - направление пе-
ремещения (0 - в переменные, иначе - в прочитанный сектор).

6121  PUSH AF    ;сохранение направления перемещения
      LD HL,23756;первый сектор каталога - 0
      LD (HL),0
      LD A,C     ;определение номера сектора с описателем файла
6128  SUB 16
      JR C,6135
      INC (HL)
      JR 6128
6135  ADD A,16   ;берем номер описателя в секторе
      LD C,A
      PUSH BC    ;сохраним его
      CALL 1004  ;загрузка в буфер сектора с описателем
      POP BC     ;восстановление номера описателя в секторе
      POP AF     ;и направление перемещения
      CALL 7332  ;определение адреса описателя файла в буфере
      LD DE,23773;берем второй адрес для LDIR
      LD BC,16   ;берем длину описателя
      OR A       ;установка направления перемещения
      JR Z,6157
      EX DE,HL
6157  LDIR       ;перенос описателя файла
      RET        ;возврат
----------------------------------------------------------------
Адрес 6160. Выполнение команды VERIFY. Установите 23825 и 23611.
Используется также с адресов:
6165 - выполнение команды LOAD. Установите 23825 и 23611;
6168 - выполнение команды LOAD, PEEK или POKE; Установите 23825,
23611 и 23824.

6160  LD A,255    ;верификация файла
      LD (23801),A
6165  CALL 6226   ;обнуление 23824
6168  CALL 6198   ;обработка параметров и загрузка файла
      CALL 7541   ;если идет проверка на синтаксис, то возврат
      LD A,255    ;выполняется команда LOAD
      LD (23824),A
      LD A,(23801);выполняется VERIFY ?
      CP 255
      JP Z,993    ;если да, то O.K.
      LD A,(23781);расширение файла B ?
      CP "B"

Внимание!!! Если была операция с одним сектором файла, то надо
выходить независимо от расширения.

      JP Z,298    ;если да, то обработка строки автостарта
      JP 993      ;иначе O.K.
----------------------------------------------------------------
Адрес 6198. Обработка параметров для команды LOAD и загрузка
файла. Установите 23825, 23611, 23801 и 23824.

6198  CALL 6266;принятие параметров
      CALL 7541;если идет проверка на синтаксис, то возврат
      CALL 6315;проверка параметров
      JP 6433  ;загрузка файла и возврат
----------------------------------------------------------------
Адрес 6210. Обработка параметров для команды LOAD...CODE. Уста-
новите 23645 на расширение файла. На выходе устанавливает 23766,
23769 и 23771.

6210  LD HL,(23645);следующий символ строки ENTER ?
      INC HL
      LD A,(HL)
      CP 13
      RET Z        ;если да, то возврат
      LD A,1       ;задан адрес загрузки
      LD (23766),A
      CALL 7569    ;прием одного или двух чисел
      XOR A        ;обнуление 23824
      LD (23824),A
      RET          ;возврат
----------------------------------------------------------------
Адрес 6226. Обнуление 23824.

6226  XOR A
      LD (23824),A
      RET
----------------------------------------------------------------
Адрес 6231. Прием параметров для команды POKE или PEEK. Вход:
установите 23645 на расширение файла. Выход: устанавливает
23767, 23769, 23771 и 23871.

6231  CALL 4142    ;прием расширения файла
      LD A,"B"     ;это "B" ?
      CP B
      JR NZ,6246   ;если да, то декремент CH_ADD, так как для
      LD HL,(23645);программы на бейсике расширение не
      DEC HL       ;указывается
      LD (23645),HL
6246  CALL 7659    ;прием чисел
      LD HL,(23769);установка адреса загрузки / записи сектора
      LD (23767),HL
      LD HL,(23771);установка номера сектора
      LD (23769),HL
      XOR A        ;обнуление 23766
      LD (23766),A
      RET          ;возврат
----------------------------------------------------------------
Адрес 6266. Принятие параметров для команды LOAD. Вход: устано-
вите 23825 и 23611. Выход: устанавливает 23762, 23767, 23769,
23781 и 23766 и читает описатель файла.

6266  CALL 1067   ;второй символ командной строки ENTER ?
      JP Z,635    ;если да, то вход в командный процессор с вводом команды
                  ;RUN"boot"

Ошибка!!! это некорректно, так как при ошибке вы попадете в ко-
мандный процессор TR-DOS, а не вернетесь в бейсик.

      CALL 7647   ;помещение имени файла на стек калькулятора
      CALL 1394   ;операция со всем файлом ?
      CALL NZ,6231;если нет, то прием расширения и двух чисел
      CALL 7564   ;берем текущий символ строки
      CP 175      ;это CODE ?
      CALL Z,6210 ;если да, то прием чисел, если они есть
      CP 228      ;это DATA ?
      PUSH AF     ;сохранение результата проверки
      CALL 1394   ;операция со всем файлом ?
      CALL Z,4142 ;если да, то прием расширения
      POP AF      ;восстановление результата проверки
      CALL Z,7164 ;если символ DATA, то прием имени массива
      CALL 7541   ;если идет проверка на синтаксис, то возврат
      CALL 10543  ;установка имени файла и поиск файла
      JP NZ,985   ;если файл не найден, то NO FILE
      CALL 5725   ;чтение описателя файла
      RET         ;возврат
----------------------------------------------------------------
Адрес 6308. Чтение описателя файла, если он был найден. Устано-
вите 23773, 23781 и флаг Z: при Z=1 происходит чтение описателя,
иначе ошибка NO FILE.

6308  JP NZ,985;если перед вызовом файл не был найден, то ошибка
      CALL 5725;загрузка описателя файла
      RET      ;возврат
----------------------------------------------------------------
Адрес 6315. Обработка параметров для подпрограммы загрузки фай-
ла. На входе установите 23766, 23769 и 23771; считайте описатель
нужного вам файла. На выходе в 23771 будет длина файла для заг-
рузки, в 23766 0, если длина менялась, иначе 3. В HL будет адрес
загрузки файла, в DE - его адрес на диске, в B - количество сек-
торов для загрузки. При загрузке массива или программы на бейси-
ке будет произведена подготовка памяти к загрузке.

6315  LD A,(23766) ;берем флаг загрузки
      OR A         ;начало и длину брать из каталога ?
      LD HL,(23782);берем начало файла из описателя
      JR Z,6327    ;если параметры берем не из каталога, то
      LD HL,(23769);берем начальный адрес, назначенный нами
6327  LD DE,(23787);берем адрес файла на диске
      CP 3         ;все параметры назначены пользователем ?
      LD A,(23786) ;берем размер файла в секторах
      PUSH DE      ;сохранение адреса файла на диске
      LD DE,(23784);берем длину файла из описателя
      JR NZ,6347   ;если нужно брать ее не оттуда, то берем
      LD DE,(23771);длину загрузки, назначенную нами
6347  LD B,A       ;сохранение размера файла в секторах
      LD (23771),DE;установка длины файла для загрузки
      LD A,(23781) ;расширение файла C ?
      CP "C"
      LD A,B       ;восстановление длины файла в секторах
      JR NZ,6397   ;если расширение не C, то длину не менять
      LD A,B       ;если длина файла в байтах соответствует его
      CP D         ;размеру в секторах, то длина загрузки не ме-
      JR Z,6390    ;няется
      DEC A
      CP D
      LD A,B
      JR Z,6390
      LD A,(23766) ;длина назначена пользователем ?
      CP 3
      LD A,B       ;восстановление размера файла в секторах
      JR Z,6390    ;если мы сами назначили длину загрузки, то она не меняется
      XOR A        ;грузить только полностью заполненные сектора
      LD (23766),A
      LD D,B       ;вычисление длины файла в байтах из его длины
      LD E,0       ;в секторах
      LD (23771),DE;установка новой длины
      JR 6393
6390  CALL 6427    ;файл загружать весь
6393  LD A,B       ;восстановление размера файла в секторах
      CALL 7852    ;вычисление количества секторов для загрузки
      LD B,A       ;сохранение его
      LD A,(23781) ;расширение файла C ?
      CP "C"
      POP DE       ;восстановление адреса файла на диске
      RET Z        ;если расширение файла C, то возврат

Ошибка!!! Если выполняется чтение или запись сектора файла, то
здесь должен быть возврат. Из-за этой ошибки нельзя прочитать
или записать сектор файла с расширением B или D.

      PUSH DE      ;сохранение адреса файла на диске
      CP "B"       ;расширение B ?
      PUSH AF      ;сохранение расширения файла
      CALL Z,6657  ;если расширение B, то подготовка к загрузке программы
                   ;на бейсике
      POP AF       ;восстановление расширения
      CP "D"       ;расширение D ?
      CALL Z,6732  ;если да, то подготовка к загрузке массива
      CALL 6427    ;длина загрузки не менялась
      LD A,(23772) ;берем количество секторов для загрузки
      LD B,A
      POP DE       ;восстановление адреса файла на диске
      RET          ;возврат
----------------------------------------------------------------
Адрес 6427. Помещает число 3 по адресу 23766.

6427  LD A,3
      LD (23766),A
      RET
----------------------------------------------------------------
Адрес 6433. Загрузка / верификация файла а также загрузка / за-
пись сектора файла. Вход: установите 23801, 23824, 23767, 23771,
в HL - адрес загрузки, в DE - адрес файла на диске,в B - коли-
чество секторов для загрузки.

6433  CALL 1394    ;выполняется загрузка или верификация ?
      JR Z,6445    ;если да, то выполнение операций со всем файлом
      PUSH AF      ;сохранение флага операции
      CALL 6804    ;вычисление адреса сектора на диске
      POP AF       ;восстановление флага операции
      CP 255       ;чтение сектора файла ?
6445  PUSH AF
      CALL Z,6492  ;если да, то чтение сектора или операция с файлом
      POP AF
      JR Z,6455    ;и завершение загрузки или верификации
      JP 7757      ;иначе запись сектора и возврат
6455  LD A,(23766) ;загружать весь файл ?
      CP 3

Не нужно этого делать!!! Лучше так:
LD A,(23824)
OR A
и PEEK будет работать правильно. Не будет грузится мусор после
загруженного сектора. ведь если в 23766 находится 0, то младший
байт длины всегда равен 0 и 6470 не будет работать.

      CALL Z,6470  ;если да, то загрузка или верификация конца файла
      LD HL,(23641);отметка конца программы на бейсике
      DEC HL
      LD (HL),128
      RET          ;возврат
----------------------------------------------------------------
Адрес 6470. Загрузка или верификация конца файла. Установите
23796, 23771 и 23801.

6470  LD A,(23801) ;верификация ?
      CP 255
      JP NZ,12254  ;если нет, то загрузка конца файла
      LD A,(23771) ;файл занимает сектора без остатка ?
      OR A
      RET Z        ;если да, то возврат
      LD C,A       ;берем длину остатка
      LD B,1       ;1 сектор
      LD DE,(23796);текущее место диска
      JR 6506      ;верификация конца файла и возврат
----------------------------------------------------------------
Адрес 6492. Загрузка / верификация файла а также загрузка секто-
ра файла. Установите 23801 ,в DE поместите адрес файла на диске,
в HL - адрес файла в памяти, в B - длину файла в секторах. Ис-
пользуется также с адреса 6506 для верификации заданного коли-
чества байтов (все для 6492, кроме 23801 плюс в B - количество
байтов).

6492  LD A,(23801) ;верификация ?
      CP 255
      JP NZ,7741   ;если нет, то загрузка секторов и возврат
      LD (23796),DE;запомним адрес файла на диске
      LD C,0       ;в секторе 256 байтов
6506  LD A,B       ;верифицируем 0 секторов ?
      OR A
      RET Z        ;если да, то возврат
      LD (23767),HL;сохранение адреса файла в памяти
      LD (23769),DE;сохранение адреса файла на диске
6516  PUSH BC      ;сохранение количества секторов
      LD B,1       ;загружать 1 сектор
      LD DE,(23769);с текущего места диска
      LD HL,23845  ;в буфер
      CALL 7741    ;загрузка сектора
      LD HL,(23796);адрес следующего сектора на диске
      LD (23769),HL
      POP BC       ;восстановление количества секторов
      LD HL,(23767);берем адрес файла в памяти
      LD DE,23845  ;адрес сектора в буфере
6542  LD A,(DE)    ;сравнение их
      CP (HL)
      JR NZ,6557   ;если несовпадение, то VERIFY ERROR
      INC HL       ;следующие байты
      INC DE
      DEC C
      JR NZ,6542   ;повтор до конца
      LD (23767),HL;установка следующего адреса
      DJNZ 6516    ;повтор до конца
      RET          ;возврат
6557  LD HL,10091  ;адрес сообщения VERIFY ERROR
      LD A,13      ;код ошибки - 13
      JP 7242      ;обработка ошибок
----------------------------------------------------------------
Адрес 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       ;возврат
----------------------------------------------------------------
Адрес 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          ;возврат




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



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

Похожие статьи:
Coding - Как кодить оптимально.
Юмор - Как затащить хакера в спальню.
Сомнения - Рост населения различных стран. Грунт лунных морей.
Введение - от авторов.
B.B.S. Новости - О новой B.B.S. - Lime Tree 2-BBS. Платная B.B.S. ?!

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