ZX-Ревю 1992 №9-10 1991 г.

Маленькие хитрости - признаться по совести, нам очень понравилась идея создания универсального программного "дебюта", предложенная автором предыдущей статьи.


Темы статьи: Программирование  

Маленькие Хитрости

Признаться по совести, нам очень понравилась идея создания универсального программного "дебюта", предложенная автором предыдущей статьи. Конечно, "универсального" не в том смысле, что он должен быть один на всех и всех устраивать, а в том смысле, что каждый, кто программирует на "Спектруме", сможет сделать для себя собственную домашнюю заготовку и "подшивать" ее всякий раз, когда ему придет в голову написать какую-нибудь программу.

Идея "дебюта" - это не только программистская идея, ее ценность идет гораздо дальше. Из мемуаров известно, с каким трудом многие творческие личности берут себя по утрам за шиворот и тянут к письменному столу работать, а ноги упирается. Куда приятнее: подошел к столу, нажал пару кнопок и готово дело, дебют уже сделан, можно с чистой совестью отправляться обедать, а потом и вовсе отдыхать.

Многие писатели практикуют даже такой прием: отходя ко сну, они бросают своих героев на самом интересном месте, обрывая фразу на полуслове. А на следующий день спокойно с утра добьют своих героев, похоронят, если получится, и таким жизнерадостным дебютом начинают новый день в самой работоспособном настроении.

Вот и мы прочитали статью уважаемого автора и захотелось "плодотворную дебютную идею" (как говаривал высокочтимый нами Остап Ибрагимович) как-то развить и упрочить. Захотелось и свой вклад в большое дело внести. Попробовали и так и этак, ничего в голову не идет - надо все-таки программировать, а без этого ну просто никуда.

И тут нас осенило: ну зачем нам программировать!? Ведь в компьютере уже есть куча программ в ПЗУ. Может быть ими и воспользуемся? Зачем велосипед изобретать?

Взялись за дело. Все ПЗУ прошарили, все обыскали, пачку бумаги испачкали - но нет там ничего такого, чтоб компьютер сам за нас программу написал. Эх, лучше было бы это время на "ЭЛИТУ" потратить. И вдруг...

Самое интересное всегда происходит неожиданно. Вдруг по адресу 196ЕН (6510 -десятиричное) мы нашли процедуру, которая выдает адрес начала любой БЕЙСИК-строки в оперативной памяти, особенно если вы предварительно зашлете номер этой строки в регистровую пару HL процессора. После того, как процедура отработает, она оставит искомый адрес в той же регистровой nape HL.

НУ вот, решили мы, половина дела сделана. Адрес начала любой строки компьютер найдет сам, осталось только, чтобы он сам и строку туда записал. Но не тут то было - ничего для этого в ПЗУ нет. Тут что-то Клайв Синклер недодумал, за что только его лордом сделали?

Но мы не отчаялись и нашли еще одну интересную процедуру, которая начинается с адреса 19Е5Н (6629 DEC). Эта процедура способна уничтожить все, что находится в БЕЙСИК-программе между адресом, который установлен в регистровой паре DE, и адресом, который установлен в регистровой паре HL. В общем, шикарный метод для стирания программ. Не совсем то, что мы искали, но хоть что-то. Уж если не попрограммируем, зато хоть постираем от души, благо все делается автоматически.

А ведь если честно, то какое же программирование без хорошего стирания? Вы когда-нибудь хоть строчку написали, чтобы ее потом не стирать? Вот то то же! Всякое правильное программирование всегда начинается со стирания того, что ранее было запрограммировано неправильно.

А уж объединить эти две процедуры в одну программу в машинных кодах - дело нехитрое. Вот и получилась такая миленькая программа, размером всего в 19 байтов, которая хотите верьте, хотите нет, а сэкономит массу времени любому, кто хоть когда-нибудь написал что-то длиннее, чем тридцать строк.

Можете теперь ее встроить в свой собственный "дебют", если хотите, можете держать ее отдельно. Делайте с ней, что хотите, храните в любых адресах, можете встроить в БЕЙСИК-строку, воспользовавшись приемом, которым поделился автор предыдущей статьи.

Мы же, не зная заранее, куда Вы предпочтете ее препроводить, разместили код в буфере принтера, начиная с адреса 23300, а БЕЙСИК-загрузчику выделили строки выше 9990, чтобы под ногами не путался.

Итак, распечатка того, что у нас вышло, помещена в Листинге 1. А распечатка БЕЙСИК-загрузчика приведена в Листинге 2. Самое интересное - то, что самой этой же программой можно стереть и этот БЕЙСИК-загрузчик. Правда, при стирании строки 9996 будет выдано сообщение C: Nonsense in BASIC, но оно уже никакого значения для нас не имеет.

Так что стирайте в собственное удовольствие все, что хотите. Обратите только внимание на нашу статью, посвященную ошибкам в ПЗУ - там в разделе, посвященном функциям пользователя FN () кое-что сказано о том, почему нельзя код для стирания строк оформлять в виде пользовательских функций.

Успешного Вам DELETa!

Листинг 1

210000

LD HL,00

Номер начальной строки помещается в HL.

Сейчас там нули, но когда Вы введете

свое число, оно поступит туда.

CD6E19

CALL 196EH

Вызов процедуры ПЗУ для определения

адреса начала строки.

Е5

PUSH HL

Запомнили полученный адрес на стеке.

210000

LD HL,00

Номер конечной строки помещается в HL.

Сюда мы тоже введем свое число.

33

INC HL

Указание на следующую строку, которая не

будет удалена.

CD6E19

CALL 196EH

Определили адрес конца последней строки.

D1

POP DE

Адрес начальной строки сняли со стека в DE

CDE519

CALL 19E5

Удаление строк из заказанного интервала.

C9

RET

Возврат в БЕЙСИК.

Листинг 2

9991 DATA 33,0,0,205,110,25,229,33,0,0,35,205,110,25,209,205,229,25,201

9992 RESTORE 9991: FOR n=0 TO 18: READ а: POKE 23300+^а: NEXT n

9993 INPUT "Введите номер начальной СТРОКИ"; а

9994 POKE 23301,a-256*INT(a/256): POKE 23302, INT(a/256)

9995 INPUT "Введите номер конечной строки"; b

9996 IF b

9997 POKE 23308,b-256*INT (b/256): POKE 23309, INT (b/256)

9998 RANDOMIZE USR 23300




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Новости - Plutonium, Турба на `Кворуме`.
Видео - Боевик "Воины".
Отдохнем - Лирика "Баллада об индейце".
Военкомат - перечень заболеваний, которые являются основанием для освобождения от воинской службы.
От редакции - описание оболочки журнала.

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