Ретро - 40 лучших процедур: Удаление блока программы.

ZX Review #7-8-9-10

 7. ПРОЦЕДУРЫ ОБРАБОТКИ ПРОГРАММ

  7.1. Удаление блока программы

  Длина: 42
  Количество переменных: 2
  Контрольная сумма: 5977
  Назначение: эта программа уда-
ляет блок BASIC-программы, нахо-
дящийся между  строками, опреде-
ленными пользователем.
  Переменные:
     Имя: start line no
     Длина: 2
     Ячейка: 23296
     Комментарий:  номер  первой
строки, подлежащей удалению.
     Имя: end line no
     Длина: 2
     Ячейка: 23298
     Комментарий: номер  послед-
ней строки, подлежащей удалению.
  Вызов программы:
     RANDOMIZE USR адрес
  Контроль  ошибок:  если  имеют
место следующие ошибки, то  про-
цедура останавливается без  уда-
ления строк BASIC-программы:
  - если последний номер  строки
меньше, чем первый номер строки;
  - если между этими двумя стро-
ками нет программы на БЕЙСИКе;
  - если один из  номеров  строк
или оба равны 0.
  Комментарий: эта программа до-
вольно  медленна  для   удаления
большого    блока    программных
строк, но, тем  не  менее, рабо-
тать с ее помощью все  же  удоб-
нее, чем удалять строки вручную.
  Не вводите номера строк  боль-
ше, чем 9999.

   ЛИСТИНГ МАШИННЫХ КОДОВ
МЕТКА  АССЕМБЛЕР      ЧИСЛА ДЛЯ ВВОДА147.

        LD HL,(23296)  42   0  91
        LD DE,(23298) 237 91 2 91
        LD A,H        124
        OR L          181
        RET Z         200
        LD A,D        122
        OR E          179
        RET Z         200
        PUSH DE       213
        CALL 6510     205 110  25
        EX (SP),HL    227
        INC HL         35
        CALL 6510     205 110  25
        POP DE        209
        AND A         167
        SBC HL,DE     237  82
        RET Z         200
        RET C         216
        EX DE,HL      235
NXT_CH: LD A,D        122
        OR E          179
        RET Z         200
        PUSH DE       213
        PUSH HL       229
        CALL 4120     205  24 16
        POP HL        225
        POP DE        209
        DEC DE         27
        JR NXT_CH      24 243
2
  Как она работает:
  В пары регистров HL и DE  заг-
ружаются  начальный  и  конечный
номера строк соответственно. Эти
значения проверяются и, если од-
но из них или оба равны 0, прог-
рамма возвращается в BASIC.
  Затем вызывается  подпрограмма
ПЗУ по адресу 6510 - она возвра-
щает адрес в памяти  компьютера,
с  которого  начинается   первая
строка. Эта же подпрограмма  за-
тем вызывается снова для опреде-
ления  адреса  символа, стоящего
после ENTER в конечной строке.
  В пару регистров HL  помещает-
ся разность этих двух адресов и,
если это значение  равно  0  или
отрицательно, программа  возвра-
щается в BASIC.
  Содержимое пары  регистров  HL
копируется в DE для  использова-
ния DE в качестве счетчика. Если
счетчик равен 0, то работа  про-
цедуры завершается, а если  нет,
то вызывается подпрограмма  ПЗУ,
расположенная  по  адресу  4120,
которая  удаляет  один   символ.
После этого - возврат к NXT_CH.