ZX Format #04
14 июня 1996
  Бейсик  

Программистам - изучаем Бейсик (часть 4).

             Бейсик
              (#4)

(C) Дм. Рудовский
________________________________

   Basic,  как и все языки высо-
кого  уровня имеет несколько не-
достатков.  И  самый  главный из
них - медлительность.
   Вот самый простой пример. На-
берите программу:

  10 FOR I=0 TO 65535
  20 NEXT I
  30 CLEAR 29999
  40 PRINT "STOP TIME"
  50 FOR K=30000 TO 30009
  60 READ B: POKE K,B
  70 NEXT K
  80 STOP
 100 RANDOMIZE USR 30000
 110 GO TO 30
 120 DATA 1,255,255,11,120,177
 130 DATA 194,51,117,201

   Запустите  ее  командой  RUN,
засекая  время до появления над-
писи STOP TIME. Теперь запустите
программу  вторично,  но на этот
раз  командой  RUN  100, проведя
аналогичные операции.
   Теперь сравните. Как правило,
первый результат раз в сто боль-
ше  второго. Для тех, кто не по-
нял,  объясняю:  первый запуск -
Basic-интерпретатор  "прокрутил"
пустой цикл 65536 раз, во второй
раз  то же самое было сделано из
машинных кодов.
   Итак, Вы убедились, что Basic
слишком  медлителен.  Что же де-
лать,  если  Ваши познания в ас-
семблере  не  позволяют Вам соз-
дать  в нем какой-нибудь шедевр?
Ответ   прост:  надо  совместить
возможности  Basic  со скоростью
ассемблера.
   Вспомнив  прошлую  статью, Вы
восклицаете  "Эврика!" и бросае-
тесь искать компилятор, но проч-
тя его описание, приходите к вы-
воду  -  "Для калькулятора может
быть подойдет".
   Но все-таки не торопитесь чи-
тать раздел по ассемблеру, а до-
читайте до конца эту статью, так
как  речь в ней пойдет именно об
описанной выше проблеме.
   Функция  USR число возвращает
содержимое  регистровой пары BC,
оставшееся  там после выполнения
подпрограммы  в  машинных кодах,
расположенной по адресу, указан-
ному как параметр функции.
   Возникает  вопрос  -  неужели
элементарные   процедуры,  вроде
скроллинга,  придется писать са-
мому?
   Конечно,  нет  смысла изобре-
тать  велосипед, -  элементарные
программы уже придуманы, написа-
ны  и  собраны  в библиотеки под
названиями:
    SUPERCODE и NEWSUPERCODE.
   Все,  что  Вам нужно, так это
найти  нужную Вам процедуру, за-
писать  ее  на диск и вставить в
свою  программу.  О том, как вы-
полнить  эти три пункта и пойдет
речь в дальнейшем.

   Описывать подпрограммы в этих
пакетах я буду по порядку их но-
меров  в  Supercode 3.5, давая в
скобках   номер  соответствующей
процедуры в Newsupercode. Но пе-
ред этим я должен несколько слов
сказать   о  системе  управления
этими пакетами.

   Supercode 3.5:
   Сей  пакет  состоит  из  двух
частей  (подпрограммы  1-74, 75-
150).  После загрузки и вводного
слова на польском Вы попадаете в
меню.  Дам  расшифровку пунктов,
кои  выбираются  нажатием первой
буквы  команды.  С самого начала
Вас подстерегает странная строч-
ка внизу экрана:

  DEMO/PRNTR/QUIT/ANY OTHER KEY

где  DEMO - демонстрация возмож-
ностей программы в целом,
 PRNTR - распечатка на принтере,
 QUIT - выход в Basic,
 ANY OTHER KEY - продолжить.

   Продолжив,   мы   попадаем  в
главное меню:

 NUMBER  -  описание процедуры с
номером,  который  Вас  попросят
ввести.
 DEMO - см. выше.
 PRNTR - см. выше.
 LOCATE  -  объяснения,  как ис-
пользовать процедуры по адресам,
отличным  от тех, которые даны в
Supercode.
 INDEX - на страницу назад.
 JUMP PAGE# - Переход на страни-
цу n(1-4).
 CONTINUE - переход на следующую
страницу.
 SAVE  -  запись нужной Вам под-
программы на диск.
 QUIT - см. выше.

   Нажав "N" и набрав нужный Вам
номер  подпрограммы,  Вы увидите
ее описание и очередное меню:

EXAMPLE/PRNTR/QUIT/ANY OTHER KEY

   Из  всех пунктов новый только
один - EXAMPLE. Для слабо знако-
мых с английским объясняю -
  EXAMPLE - пример,
это  означает,  что выбирая этот
пункт  Вы  увидите пример работы
этой подпрограммы.

   Пакет Newsupercode отличается
от  Supercode только меньшим ко-
личеством  подпрограмм  и лучшим
интерфейсом. Здесь выбор осущес-
твляется  лишь курсорными клави-
шами и "ENTER". Выбираешь нужную
процедуру,  наводишь на нее кур-
сор и нажимаешь "ENTER".

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

 1. Подпрограмма перехвата ошиб-
ки.
 2. Подпрограмма подачи звуково-
го сигнала.

   Теперь  загружаем Supercode и
ищем  подпрограмму с номером 65.
После  ее запуска при любом пре-
рывании  программы  (даже  О.К.)
управление будет передаваться на
определенную  строку Basic прог-
раммы, адрес которой будет задан
нами  в ячейках памяти 60878/79.
С  помощью опции SAVE записываем
эту  процедуру  на  диск. Если у
Вас кассетный вариант,то запиши-
те  на бумаге адрес и длину этой
подпрограммы и, нажав QUIT, вый-
дите  в Basic. Запишите ее обыч-
ным  способом, а затем вернитесь
в  пакет командой GO TO 0 и пов-
торите все вышеприведенные мани-
пуляции с процедурой номер 42.
   Теперь,  выйдя в Basic, набе-
рите нижеприведенную программу:

  10 CLEAR 60825
  20 RANDOMIZE USR 15619: REM :
     LOAD "65" CODE
  30 RANDOMIZE USR 15619: REM :
     LOAD "42" CODE
  40 POKE 63951,20
  50 RANDOMIZE USR 60826
  60 INPUT "INPUT N(1-5):";N
  70 RESTORE: LET SUM=0
  80 FOR I=1 TO N
  90 READ A
 100 LET SUM=SUM+A
 110 NEXT I
" 120 PRINT "SUMMA ";N;"NUMBER
     =";SUM
 130 GO TO 60
9495 LET A=USR 63950
9500 LET A=PEEK 23681
9510 IF A=CODE "E" THEN GO TO
     9700
9520 PRINT "ERROR, CODE ";A
9530 GO TO 60
9700 PRINT "READ TEXT, PIG!"
9710 PRINT "EXIT?"
9720 LET K$=INKEY$: IF K$=""
     THEN GO TO 9720
9730 IF K$="D" THEN LET A=USR 0
9740 IF K$="N" THEN GO TO 60
9750 GO TO 9720

   Некоторые пояснения. В строке
40  устанавливается длительность
звукового  сигнала,  в строке 50
активизируется  подпрограмма пе-
рехвата  ошибки,  в строке 9495,
куда  происходит  переход  после
ошибки,  выдается  звуковой сиг-
нал.
   Если  Вас не устраивает такой
метод,то ждите следующей статьи,
где будет объяснено, что делать,
когда  возможности  стандартного
Basica Вас не удовлетворяют.



Другие статьи номера:

Игрушки - 48 утюгов (3 уровень).

Игрушки - прохождение La abadia del crimen.

Игрушки - новелла по игре "Приключения Винни Пуха" (Level 1)

Программистам - изучаем Бейсик (часть 4).

Программистам - Адаптация программ под TR-DOS #2.

Программистам - IMMORTAL #2 (бессмертие в играх).

Программистам - музыкальные Редакторы, которые мы выбираем.

Программистам - справочник по теневому сервис монитору Scorpion ZS 256.

Программистам - "В ПОИСКАХ ВЕЧНОЙ ЖИЗНИ".

IS-DOS - Рубрика "IS-DOS - начинающим" No 4.

IS-DOS - пользователям" No4: "Работа с электронным диском в среде IS-DOS".

IS-DOS - информация о фирме ISKRASOFT.

Железо - Nemo отвечает на вопросы пользователей.

Железо - Сообщение от фирмы Nemo (о микропроцессорах Z84C0010PEC).

Премьера - АССЕМБЛЕРЫ, КОТОРЫЕ МЫ ВЫБИРАЕМ (описание XAS).

Премьера - Описание программы 'CONVER-Commander V 4.50 pro'.

Премьера - НЛО-2. Дьяволы бездны.

Презентация - новгородская группа Digital Reality о себе.

Интервью - Интервью Капитана Nemo с комментариями фирмы Искрасофт.

Интервью - Николай Родионов и ZX-Sectrum.

Интервью - интервью с разработчиком компьютера HOBBIT Дмитрием Михайловым.

Отдохнём - HAL 9000

Отдохнём - Nemo рассказывает о ВиртуалЕТной реальности в России.

Почтовый ящик - письма читателей.

Почтовый ящик - доска обьявлений.

Почтовый ящик - "Империя Spectrum".

Разное - Вступительная новелла к игре Paradise Lost (Потерянный Рай).

Разное - перспективы П/О: WARCRAFT

Разное - Amiga Club: Вопросы и ответы #2.

Разное - Amiga Rulez или пропоганда здорового образа жизни.

От Авторов - о новом номере и планах на будущее.

Авторы журнала - ZX-Format No.4

Лотерея - первые итоги первой лотереи.


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

Похожие статьи:
Реклама - Реклама и объявления...
Part 7 - Spectrum history.
Юмор - Гуртовщики Мыши: Перевод куска текстовика к хелпу Win95 без основного словаря переводчиком Poliglossum с медицинским, коммерческим и юридическим словарем.

В этот день...   9 июля