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

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


Адрес 11390.  Запись страницы ОЗУ. Установите 16643 и 23552.

11390 LD C,0       ;дорожка 0
      CALL 12090   ;позиционирование
      CALL 11562   ;загрузка сектора 8 по адресу 16384
      LD A,(16612) ;берем количество файлов на диске
      LD (16642),A ;сохраняем его
      INC A        ;записали 1 файл
      LD (16612),A
      LD HL,(16613);берем количество свободного места на диске
      LD DE,64     ;уменьшаем его на 64 сектора
      SBC HL,DE
      LD (16613),HL;установка нового количества свободного места
      RET C        ;если места нет, то возврат
      LD HL,(16609);берем адрес свободного места на диске
      LD (16670),HL;установка адреса файла на диске
      CALL 11550   ;установка имени файла
      LD A,64      ;размер файла - 64 сектора
      LD (16669),A
      LD HL,49152  ;адрес загрузки - 49152
      LD (16665),HL
      LD HL,16384  ;длина - 16384 байта
      LD (16667),HL
      LD DE,(16609);берем адрес свободного места на диске
      CALL 11582   ;запись файла
      LD (16609),DE;установка нового адреса свободного места
      LD C,0       ;дорожка 0
      CALL 12090   ;позиционирование
      CALL 11572   ;запись сектора 8 с адреса 16384
      LD A,(16642) ;восстановление номера файла
      CALL 11493   ;загрузка сектора с описателем файла
      LD DE,16656  ;замена описателя файла
      LD BC,16
      EX DE,HL
      LDIR
      IN A,(95)    ;берем номер загруженного сектора
      DEC A
      LD E,A
      LD D,0
      LD HL,16384  ;записывать с адреса 16384
      CALL 11635   ;запись сектора
      RET          ;возврат
────────────────────────────────────────────────────────────────
Адрес 11493. Загрузка по адресу 16384 Номер файла поместите в A.
На выходе в HL будет адрес описателя файла.

11493 LD C,A     ;сохранение номера файла
      AND 240    ;вычисление номера сектора с описателем файла
      RRCA
      RRCA
      RRCA
      RRCA
      LD B,A
      PUSH BC
      LD E,B
      LD D,0
      LD HL,16384;загружать с адреса 16384
      PUSH DE    ;сохранение номера сектора
      CALL 12059 ;загрузка сектора
      POP DE     ;восстановление номера сектора
      POP BC     ;и номера файла
      LD B,0
      LD A,C     ;вычисление относительного адреса описателя
      AND 15     ;файла в секторе
      RLCA
      RLCA
      RLCA
      RLCA
      LD HL,16384;вычисление абсолютного адреса
      ADD A,L
      LD L,A
      RET        ;возврат
────────────────────────────────────────────────────────────────
Адрес 11529. Помещение имени и расширения файла "@"CODE по адре-
су 16656.

11529 LD HL,16656 ;адрес имени файла
      LD B,9      ;длина области - 9 байтов
11534 LD (HL)," " ;очистка области
      INC HL
      DJNZ 11534
      LD A,"@"    ;имя файла - "@"
      LD (11656),A
      LD A,"C"    ;расширение файла - "C"
      LD (16664),A
      RET         ;возврат
────────────────────────────────────────────────────────────────
Адрес 11550. Установка имени файла страницы. Установите 16643.
Имя файла будет находиться по адресу 16656.

11550 CALL 11529  ;установка имени главного файла
      LD A,(16643);берем номер страницы
      ADD A,"0"   ;преобразование его в символ
      LD (16657),A;установка номера страницы
      RET         ;возврат
────────────────────────────────────────────────────────────────
Адрес 11562. Загрузка сектора 8 по адресу 16384. Спозиционируйте
головку.

11562 LD HL,16384;грузить по адресу 16384
      LD DE,8    ;сектор 8
      CALL 12059 ;загрузка сектора
      RET        ;возврат
────────────────────────────────────────────────────────────────
Адрес 11572. Запись сектора 8 с адреса 16384. Спозиционируйте
головку.

11572 LD HL,16384;записывать с адреса 16384
      LD DE,8    ;сектор 8
      CALL 11635 ;запись сектора
      RET        ;возврат
────────────────────────────────────────────────────────────────
Адрес 11582. Запись 64-х секторов с адреса 49152. Установите все
для 11596.

11582 CALL 12133 ;восстановление
      LD C,D     ;берем номер первой дорожки
      CALL 12090 ;позиционирование
      LD HL,49152;записывать с адреса 49152
      LD B,64    ;64 сектора
      JR 11608   ;запись секторов и возврат
────────────────────────────────────────────────────────────────
Адрес 11596. Запись 192-х секторов с адреса 16384 для подпрог-
раммы MAGIC. В DE поместите адрес на диске и установите 23552.
Используется также с адреса 11608 (запись секторов; в HL помес-
тите адрес в памяти, в DE - адрес на диске, в B - количество
секторов, установите 23552 и спозиционируйте головку на первую
дорожку).

11596 CALL 12133 ;восстановление
      LD C,D     ;берем номер первой дорожки
      CALL 12090 ;позиционирование
      LD HL,16384;записывать с адреса 16384
      LD B,192   ;192 сектора
11608 PUSH BC    ;сохранение количества секторов
      PUSH DE    ;и адреса на диске
      CALL 11635 ;запись сектора
      LD DE,256  ;адрес следующего сектора в памяти
      ADD HL,DE
      POP DE     ;восстановление адреса на диске
      INC E      ;следующий сектор
      LD A,E     ;конец дорожки ?
      CP 16
      JR NZ,11631;если да, то
      LD E,0     ;текущий сектор 0,
      INC D      ;следующая дорожка,
      LD C,D
      CALL 12090 ;позиционирование
      POP BC     ;восстановление количества секторов
      DJNZ 11608 ;повтор до конца
      RET        ;возврат
────────────────────────────────────────────────────────────────
Адрес 11666. Загрузка секторов. Установите 23782, 23787 и 23786.

11666 LD HL,(23782);берем адрес загрузки
      LD DE,(23787);берем адрес секторов на диске
      LD A,(23786) ;берем количество секторов
      LD B,A
      CALL 7741    ;загрузка секторов
      RET          ;возврат
────────────────────────────────────────────────────────────────
Адрес 11681. Выполнение команды GO TO. Установите 23825 и 23611.
Можно использовать также с адреса 11815 (GO TO для 48К; парамет-
ры как и для 11681). используется также с адреса 11964 для воз-
врата из подпрограммы обработки немаскируемого прерывания.

11681 CALL 7641    ;прием имени файла на стек калькулятора
      CALL 7541    ;если идет проверка на синтаксис, то возврат
      CALL 4142    ;прием расширения файла

Зачем это нужно ? Ведь MAGIC записывает файлы только с расшире-
нием C.

      CALL 7255    ;установка имени файла
      LD (16416),BC;сохранение длины имени файла
      LD A,C       ;она равна 8 символам ?
      CP 8
      JR NC,11730  ;если да, то работа с 48К
      CALL 1029    ;настройка на диск
      CALL 7347    ;поиск файла
      JP NZ,985    ;если не нашли, то NO FILE
      LD HL,23773  ;берем адрес имени файла
      LD BC,(16416);и его длину

Зачем портить экран без надобности? Ведь длину имени файла мож-
но сохранять и в другом месте.

      ADD HL,BC    ;вычисляем адрес конца имени файла
      LD (HL),"8"  ;прибавление "8"к имени файла
      PUSH HL      ;сохранение адреса этого символа
      CALL 7347    ;поиск файла
      POP HL       ;восстановление последнего символа имени файла
      JR Z,11736   ;если файл нашелся, то загрузка страниц
      LD (HL)," "  ;восстановление имени главного файла
11730 CALL 7347    ;поиск файла
      JP 11827     ;загрузка файла
11736 CALL 5725    ;чтение описателя файла
      CALL 11666   ;загрузка файла
      LD SP,16639  ;перенос стека
      LD B,8       ;всего 8 страниц
11747 PUSH BC      ;сохранение номера файла страницы
      LD A,B
      LD BC,32765  ;адрес порта конфигурации системы
      DEC A        ;страницы считаем с 0
      PUSH AF      ;сохранение номера страницы
      OR 16        ;экран 0, ПЗУ 1
      OUT (C),A    ;установка страницы
      POP AF       ;восстановление номера страницы
      ADD A,"0"    ;вычисление последнего символа имени файла страницы
      LD HL,23773  ;вычисление адреса для этого символа
      LD BC,(16416)
      ADD HL,BC
      LD (HL),A    ;установка последнего символа имени файла страницы
      CALL 7347    ;поиск файла
      JR NZ,11781  ;если не нашли, то загрузка следующей страницы
      CALL 5725    ;чтение описателя файла
      CALL 11666   ;загрузка файла

Внимание!!! При ответе A на вопpос "DISC ERROR. RETRY,ABORT,
IGNORE ?", может произойти что угодно, если значение ERR_SP
больше 49152, так как старый стек будет затираться загружаемым
файлом или находиться в другой странице.

11781 POP BC       ;восстановление номера файла страницы
      DJNZ 11747   ;повтор до конца
      LD A," "     ;восстановление имени главного файла
      LD HL,23773
      LD BC,(16416)
      ADD HL,BC
      LD (HL),A
      CALL 7347    ;поиск файла
      CALL 5725    ;чтение описателя файла
      PUSH BC      ;сохранение номера файла
      PUSH AF      ;и AF
      LD BC,32765  ;адрес порта конфигурации
      LD A,(16641) ;берем его значение в момент записи файла (из восьмого файла)
      OUT (C),A    ;установка рабочего состояния порта
      POP AF       ;востановление номера файла и AF
      POP BC
      JR 11833     ;загрузка главного файла
11815 CALL 7647    ;прием имени файла на стек калькулятора
      CALL 7541    ;если идет проверка на синтаксис, то возврат
      CALL 4142    ;прием расширения файла
      CALL 10543   ;поиск файла
11827 JP NZ,985    ;если он не найден, то NO FILE
      CALL 5725    ;чтение его описателя
11833 LD A,(23773) ;берем первый символ имени файла
      CP "$"       ;это "$" ?
      DI           ;запрет прерываний
      JR NZ,11843  ;если да, то
      IM 2         ;установка второго режима прерываний
11843 LD SP,16624  ;перенос стека
      CALL 15889   ;берем тип дисковода
      LD (16400),A ;сохраняем его
      LD A,(23830) ;сохранение копии системного регистра,
      LD (16401),A
      LD HL,(23782);адреса стека для программы,
      PUSH HL
      LD DE,(23787);и адреса файла на диске
      PUSH DE
      INC E        ;первый сектор файла пока не загружаем
      LD A,E
      CP 16
      JR NZ,11876
      LD E,0
      INC D
11876 LD C,D       ;берем логический номер дорожки
      CALL 12039   ;выбор верхней стороны диска
      LD A,(16400) ;берем режим дисковода
      AND 2        ;дисковод двухсторонний ?
      CALL NZ,12047;если да, то выбор стороны диска
      LD A,C       ;берем физический номер дорожки
      CALL 12112   ;позиционирование
      LD HL,16640  ;загружать с адреса 16640
      LD B,191     ;191 сектор
11897 PUSH BC      ;сохранение количества секторов
      PUSH DE      ;и адреса текушего сектора на диске
      CALL 12059   ;загрузка сектора
      LD DE,256    ;вычисление адреса загрузки следующего сектора
      ADD HL,DE
      POP DE       ;восстановление адреса текушего сектора на диске
      INC E        ;следующий сектор
      LD A,E       ;конец дорожки ?
      CP 16
      JR NZ,11932  ;если нет, то продолжение загрузки
      LD E,0       ;сектор 0
      INC D        ;следующая дорожка
      LD C,D
      CALL 12039   ;позиционирование (смотрите выше)
      LD A,(16400)
      AND 2
      CALL NZ,12047
      LD A,C
      CALL 12112
11932 POP BC       ;восстановление количества секторов
      DJNZ 11897   ;повтор до конца
      POP DE       ;восстановление адреса файла на диске
      POP HL       ;и адреса стека
      LD SP,HL     ;установка стека
      LD A,(16401) ;берем копию системного регистра
      PUSH AF      ;сохраняем ее
      LD C,D       ;позиционирование (смотрите выше)
      CALL 12039
      LD A,(16400)
      AND 2
      CALL NZ,12047
      LD A,C
      CALL 12112
      LD HL,16384  ;адрес загрузки первого сектора файла
      CALL 12059   ;загрузка сектора
11964 POP AF       ;востановление копии системного регистра
      EX AF,AF'    ;и снова сохранение
      POP AF       ;восстановление регистров R и I
      LD R,A
      POP AF
      LD I,A
      DI           ;запрет прерываний
      LD A,255     ;установка флага прерываний
      JP PO,11980
      LD A,0
11980 LD (23552),A
      POP AF       ;восстановление регистров
      POP HL
      POP DE
      POP BC
      EXX
      EX AF,AF'
      POP IY
      POP IX
      POP HL
      POP DE
      POP BC
      LD A,(23624) ;установка цвета бордюра
      AND 56
      RRA
      RRA
      RRA
      OUT (254),A
      LD A,(23304) ;берем байт из 23304
      CP 238       ;там 238 ?
      JR NZ,12023  ;если нет, то системных переменных 128К нет

Ошибка!!! Число 238 по адресу 23304 еще ни о чем не говоpит.

      PUSH BC      ;сохранение BC
      LD BC,32765  ;адрес порта конфигурации
      LD A,(23388) ;берем значение переменной BANK_M
      OUT (C),A    ;установка рабочей страницы
      POP BC       ;восстановление BC
12023 LD A,(23552) ;берем флаг прерываний
      OR A         ;прерывания разрешать ?
      LD A,201     ;установка переключателя ПЗУ на бейсик
      LD (23552),A
      JR NZ,12035  ;если в 23552 был 0, то
      EI           ;разрешение прерываний
      POP AF       ;восстановление AF
      JP 23552     ;запуск программы
────────────────────────────────────────────────────────────────
Адрес 12039. Выбор верхней стороны диска для команды GO TO. Ус-
тановите 16401. Можно использовать также с адреса 12044 для пря-
мого вывода в порт 255.

12039 LD A,(16401);берем копию системного регистра
      OR 60       ;сторона - верхняя
12044 OUT (255),A ;загрузка системного регистра
      RET         ;возврат
────────────────────────────────────────────────────────────────
Адрес 12047. Выбор верхней стороны диска для команды GO TO.
Вход: установите 16401, поместите в C логический номер дорожки и
выберите верхнюю сторону диска. Выход: в C будет физический но-
мер дорожки и выбрана сторона диска.

12047 LD A,C      ;деление номера дорожки на 2
      RRA
      LD C,A
      RET NC      ;если дорожка четная, то возврат
      LD A,(16401);берем копию системного регистра
      AND 111     ;сторона - нижняя
      JR 12044    ;загрузка системного регистра и возврат
────────────────────────────────────────────────────────────────
Адpес 12059. Чтение сектора для команды GO TO. В HL поместите
адрес загрузки, в E - номер сектора.

12059 LD A,E     ;установка номера сектора
      OUT (95),A
      PUSH HL    ;сохранение адреса загрузки
      LD D,20    ;20 попыток
      PUSH DE    ;сохранение числа попыток
12067 DI         ;запрет прерываний
      LD C,127   ;адрес регистра данных контроллера
      LD A,128   ;команда чтения сектора
      OUT (31),A
      CALL 16357 ;чтение байтов
      POP DE     ;восстановление количества попыток
      POP HL     ;и адреса загрузки сектора
      IN A,(31)  ;берем состояние контроллера
      AND 127    ;все в порядке ?
      RET Z      ;если да, то возврат
      DEC D      ;следующая попытка
      PUSH HL    ;сохранение адреса загрузки сектора
      PUSH DE    ;и количества попыток
      JR NZ,12067;если попытки не кончились, то повтор
      HALT       ;остановка процессора
────────────────────────────────────────────────────────────────
Адрес 11635. Запись сектора для команды GO TO. В HL поместите
адрес загрузки, в E - номер сектора.

11635 LD A,E     ;установка номера сектора
      OUT (95),A
      PUSH HL    ;сохранение адреса загрузки
      LD D,20    ;20 попыток
      PUSH DE    ;сохранение числа попыток
11643 DI         ;запрет прерываний
      LD C,127   ;адрес регистра данных контроллера
      LD A,160   ;команда чтения сектора
      OUT (31),A
      CALL 16330 ;чтение байтов
      POP DE     ;восстановление количества попыток
      POP HL     ;и адреса загрузки сектора
      IN A,(31)  ;берем состояние контроллера
      AND 127    ;все в порядке ?
      RET Z      ;если да, то возврат
      DEC D      ;следующая попытка
      PUSH HL    ;сохранение адреса загрузки сектора
      PUSH DE    ;и количества попыток
      JR NZ,11643;если попытки не кончились, то повтор

Внимание!!! Самая большая ошибка!!! Диск с заклеенной прорезью
защиты от записи будет, скорее всего, испорчен. Подробное объясне-
ние вы найдете в ZX-PЕВЮ 95/4 на странице 35.

      HALT       ;остановка процессора
────────────────────────────────────────────────────────────────
Адрес 12090. Позиционирование для подпрограммы MAGIC. Логический
номер дорожки поместите в C и установите 23552. Используется
также с адресов:
12112 - позиционирование для команды GO TO. Поместите в A физи-
ческий номер дорожки.
12119 - выдача команды и  ожидание INTRQ. Команду поместите в A.

12090 LD A,60     ;выбор верхней стороны диска
      OUT (255),A
      LD A,(23552);берем тип дисковода
      AND 8       ;он двухсторонний ?
      JR NZ,12111 ;если нет, то позиционирование
      LD A,C      ;деление номера дорожки на 2
      OR A
      RRA
      LD C,A
      JR NC,12111 ;если дорожка четная, то позиционирование
      LD A,44     ;выбор нижней стороны диска
      OUT (255),A
12111 LD A,C
12112 OUT (127),A ;загрузка номера дорожки в регистр данных
      CALL 15869  ;задержка в 725779 тактов
      LD A,24     ;команда позиционирования
12119 OUT (31),A
12121 IN A,(255)  ;ожидание сигнала INTRQ
      AND 128
      JR Z,12121
      PUSH BC     ;сохранение BC
      CALL 15869  ;задержка в 725779 тактов
      POP BC      ;восстановление BC
      RET         ;возврат
────────────────────────────────────────────────────────────────
Адрес 12133. Восстановление для подпрограммы MAGIC.

12133 LD A,8  ;команда восстановления
      JR 12119;выдача команды, ожидание INTRQ и возврат
────────────────────────────────────────────────────────────────
Адрес 12137. Подпрограмма обработки ошибок, поступающих из пзу
бейсика. Установите 23610 и все для подпрограммы 467.

12137 LD HL,(23836);очистка стека
      DEC HL
      DEC HL
      LD SP,HL
      JP 7471      ;выдача сообщения и завершение
────────────────────────────────────────────────────────────────
Адрес 12146. Вызов подпрограмм из пзу бейсика. Адрес задайте в
двух байтах после CALL 12146:
CALL 12146
DEFW #0D6B

12146 LD (23810),HL;сохранение HL и DE
      LD (23812),DE
      POP HL       ;снятие со стека адреса двух байтов с адресом подпрограммы
      LD E,(HL)    ;берем адрес подпрограммы
      INC HL
      LD D,(HL)
      INC HL
      PUSH HL      ;помещение на стек адреса возврата в программу, вызвавшую 12146
      LD HL,15663  ;помещение на стек адреса переключателя пзу на TR-DOS
      PUSH HL
      PUSH DE      ;помещение на стек адреса вызываемой подпрограммы
      LD HL,23746  ;помещение на стек адреса команды RET в озу
      PUSH HL
      LD HL,(23810);восстановление HL и DE
      LD DE,(23812)
      RET          ;переход к команде RET в озу
────────────────────────────────────────────────────────────────
Адрес 12176. Установка начальных значений системных пеpеменных
TR-DOS. В переменные помещает:
в 23802 - 23805, 23752 - 23755, 23610, 23830, 23820 - 255;
в 23831 - 23833, 23839 - 0;
в 23746 - 201;
в системный регистр помещается 255 и выполняется команда преры-
вания. Подпрограмма может использоваться также с адреса 12227
для прямого вывода в порт 31.

12176 LD HL,65535
      LD (23802),HL;типы дисководов неизвестны
      LD (23804),HL
      LD (23752),HL;время перемещения головок дисководов
      LD (23754),HL;неизвестно
      XOR A
      LD (23831),A ;заставку выводить
      LD (23833),A ;дисковод по умолчанию - A:
      LD (23832),A ;память не изменять
      LD (23839),A ;pаботает командный процессор TR-DOS
      LD A,255     ;загрузка системного регистра
      OUT (255),A
      LD (23610),A ;ошибки нет
      LD (23830),A ;сохранение значения системного регистра
      LD (23820),A ;буфера нет
      LD A,201     ;помещение в ОЗУ команды RET
      LD (23746),A
      LD A,208     ;команда прерывания
12227 OUT (31),A   ;выдача команды
      RET          ;возврат
────────────────────────────────────────────────────────────────
Адрес 12230. Проверка достижения конца каталога при его печати.

12230 CALL 1292  ;проверка и обработка достижения конца буфера
      LD A,(HL)  ;берем первый символ имени файла
      OR A       ;конец каталога ?
      JP Z,940   ;если да, то окончание выдачи
      CP 1       ;файл стерт ?
      CALL Z,1287;если да, то пропуск его
      RET NZ     ;иначе возврат
      JR 12230   ;повтор
────────────────────────────────────────────────────────────────
Адрес 12246. Загрузка сектора в буфер. В DE поместите адрес сек-
тора на диске.

12246 LD B,1     ;загружать 1 сектор
      LD HL,23845;загружать в буфер
      JP 7783    ;загрузка сектора
────────────────────────────────────────────────────────────────
Адрес 12254. Загрузка конца файла. В HL - адрес загрузки, в
23772 - длина, в 23796 - откуда грузить.

12254 PUSH HL      ;сохранение адреса загрузки
      LD DE,(23796);берем адрес сектора на диске
      CALL 12246   ;загрузка его в буфер
      LD A,(23772) ;берем количество байтов для загрузки
      POP DE       ;восстановление адреса загрузки
      OR A         ;загружаем 0 байтов ?
      RET Z        ;если да, то возврат
      LD C,A       ;перевод длины загружаемой части в двухбайтную форму
      LD HL,23845  ;перемещаем байты из буфера
      LDIR
      RET          ;возврат
────────────────────────────────────────────────────────────────
Адрес 12275. Таблица команд TR-DOS.

12275 DEFB 207,"*",208,209,230,210,239,248,254,190,244,213,247
      DEFB 211,212,255,"4",236,"8",240,214
────────────────────────────────────────────────────────────────
Адрес 12296. Таблица адресов подпрограмм, выполняющих команды
TR-DOS.

12296 DEFW 1075,4120,7874,5803,1338,1927,6165,6864,7419,6565
      DEFW 6569,6577,7501,8578,9814,1680,10647,11681,10670,4558
      DEFW 6160
────────────────────────────────────────────────────────────────
Адрес 12338. Сжатие командной строки. Строку поместите в буфер
редактора. Помещает в 23766 255 и устанавливает 23825.

12338 LD HL,(23641);берем адрес буфера редактора
      LD (23825),HL;установка адреса командной строки
      LD (23769),HL;установка адреса текущего символа
      LD A,255     ;подана прямая команда
      LD (23766),A
      LD HL,23771  ;любой адрес
      LD (23767),HL
      JR 12375     ;сжатие строки и возврат
────────────────────────────────────────────────────────────────
Адрес 12360. Сжатие командной строки. В HL поместите адрес стро-
ки. Устанавливает 23766 и 23825. Используется также с адреса
12375 (сжатие строки; установите 23766, 23767 и 23769).

12360 LD (23825),HL;установка адреса строки
      LD (23769),HL;и адреса текущего ключевого слова
      CALL 12513   ;проверка, где находится строка
      RET NZ       ;если строка не найдена, то возврат
      INC HL       ;вычисление адреса поля длины строки
      INC HL
      LD (23767),HL;установка адреса поля длины строки
12375 CALL 12457   ;определение номера ключевого слова
      JR NZ,12423  ;если это не ключевое слово, то следующий символ
      EX DE,HL     ;переброска адреса последнего символа ключевого слова в DE
      INC DE       ;вычисление адреса символа после ключевого слова
      LD B,0       ;перевод номера ключевого слова в 2-х байтную форму
      LD HL,12744  ;адрес таблицы кодов ключевых слов
      ADD HL,BC    ;вычисление адреса кода ключевого слова
      LD A,(HL)    ;берем этот код
      LD HL,(23769);берем адрес ключевого слова
      LD (HL),A    ;замена его одним символом
      INC HL       ;вычисление адреса второго символа ключевого слова
      EX DE,HL     ;переброска его в DE
      RST 32       ;вычисление количества стираемых символов
      DEFW #19DD
      PUSH BC      ;сохранение его
      RST 32       ;уничтожение ненужных символов
      DEFW #19E8
      POP BC       ;восстановление количества стертых символов
      LD A,(23766) ;строка находится в программе на бейсике ?
      OR A
      JR NZ,12423  ;если нет, то ее длина нигде не обозначена
      LD HL,(23767);берем адрес поля длины строки
      LD E,(HL)    ;берем длину строки
      INC HL
      LD D,(HL)
      EX DE,HL     ;перебросим ее в HL
      OR A
      SBC HL,DE    ;скорректируем ее
      EX DE,HL     ;перебросим в DE
      LD (HL),D    ;и загрузим обратно
      INC HL
      LD (HL),E
12423 LD HL,(23769);берем адрес текущего символа
      LD A,(HL)    ;берем этот символ
      CP 13        ;это ENTER ?
      RET Z        ;если да, то возврат
      INC HL       ;следующий символ
      LD (23769),HL
      LD A,(HL)    ;берем его
      CP 13        ;это ENTER ?
      RET Z        ;если да, то возврат
      CP 34        ;это кавычки ?
      JR NZ,12375  ;если нет, то повтор
12442 INC HL       ;следующий символ
      LD A,(HL)    ;берем его
      CP 13        ;это ENTER ?
      RET Z        ;если да, то возврат
      CP 34        ;это кавычки ?
      JR NZ,12442  ;если нет, то следующий символ
      INC HL       ;следующий символ
      LD (23769),HL
      JR 12375     ;повтор




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
party zone - millennium'1902 rules
От редакции - "Мириком".
Рассказ - Холостяк.
INTRO - С новым столетием.
Юмор - Анекдоты.

В этот день...   25 апреля