ZX-Ревю 1991 №11-12 1990 г.

Бета-бейсик 1.8 - Дополнение к инструкции БЕТА-БЕЙСИК 1.0.


БЕТА-БЕЙСИК 1.8

Дополнение к инструкции БЕТА-БЕЙСИК 1.0

Окончание. Начало см. стр. 134, 100, 201.

В данной статье мы заканчиваем печать материалов по БЕТА-БЕЙСИКу версий 1.0 и

1.6.

Версия 1.8 настолько похожа на версию 1.0, что ее можно дать как дополнение к версии 1.0.

Нам еще осталось рассмотреть версию 3.0. Она имеет значительные отличия от двух предыдущих версий и будет нами рассмотрена полностью от начала и до конца. Этим мы с Вами займемся в первой половине следующего года.

Версия 1.8 языка Бета-Бейсик имеет значительно больше команд и функций, чем выпуск 1.0.

Программа теперь имеет больший размер и занимает 9.5K вместо 5.6K у версии 1.0. В этой версии нет модификации для 16K компьютеров. Значение RAMTOP в этой версии установлено в 55800 и загрузчик содержит теперь две самоуничтожающиеся Бейсик-строки (вместо одной). Строка 1 содержит процедуру SAVE для выгрузки текущей Бейсик-программы с последующим блоком машинных кодов Бета-Бейсика. Если Вы хотите воспользоваться ею, то загрузите загрузчик через "MERGE", чтобы исключить автостарт, затем остановите ленту и дайте:

CLEAR rt: LOAD "" CODE

Теперь вновь запустите ленту. Когда вторая часть будет загружена, RUN вызовет автовыгрузку программы на ленту.

Чтобы выгрузить на микродрайв, дайте RANDOMIZE USR 58419 (это инициализация Бета-Бейсика), а затем измените строки 1 и 2 прежде, чем давать RUN:

1 LET rt = DPEEK (23730): RANDOMIZE USR 59904: SAVE *"m"; 1; "run" LINE 2: POKE DPEEK

(23631)+2,181: SAVE * "m";1;"BB"CODE rt + 1,65367 - rt: STOP

2 CLEAR rt: LOAD * "m";1;"BB" CODE: CLS: RANDOMIZE USR 58419: DELETE 1 TO 2

1. Команда CLOCK.

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

2. Команды управления курсором.

CHR$ 8 (курсор влево)

CHR$ 9 (курсор вправо)

CHR$ 10 (курсор вниз)

CHR$ 11 (курсор вверх)

Бета-Бейсик позволяет использовать эти символы при печати. Например, PRINT CHR$ 10 сдвинет позицию печати на одну строку вниз. Эти же коды работают с оператором PLOT при печати на экране строк.

В стандартном Бейсике CHR$8 (курсор влево) имеет "жучок". Сдвигая курсор назад, нет возможности войти в верхнюю строку экрана из какой-либо нижележащей строки.

А если Вы уже находитесь на верхней строке то движением назад (влево) можете вообще покинуть экран и войти в программу. В этой версии Бета-Бейсика ошибка исправлена.

CHR$ 9 стандартного Бейсика также имеет "жучок", мешающий его работе. Здесь он также исправлен.

CHR$ 10 и CHR$ 11 в стандартном Бейсике печатают "?" от которого нет никакой пользы. Сейчас они работают, как положено.

Пример, приведенный ниже, показывает, как четыре управляющих символа включаются в строки, что дает возможность создания сложных форм с помощью PRINT или

PLOT.

10 LET a$="1234"+ CHR$ 8 + CHR$ 10 + "5" + CHR$ 8 + CHR$ 10 + "678" + CHR$ 8 + CHR$ 11 + "9" 20 PRINT AT 10,10; a$ 30 PAUSE 100: CLS 40 FOR n = 32 TO 255 50 PLOT n,n/2; a$: NEXT n

С применением графики UDG здесь можно получать очень эффектные изображения.

3. Команда: DEF KEY

Структура: DEF KEY символ; строка

или DEF KEY символ: оператор: оператор:...

Клавиша: CAPS SHIFT + 1

Бета-Бейсик позволяет воспроизводить строковые переменные или целые строки программы при нажатии цифровой или буквенной клавиши. Причем они могут либо сразу идти в компьютер, либо оставаться в нижней части экрана до нажатия ENTER. Последний случай выполняется введением управляющего символа ":". Он должен стоять последним символом в строке или стоять после последнего выражения в строке.

Попробуйте: DEF KEY "i"; "HELLO":

Теперь нажмите "SYMBOL SHIFT" и "SPACE" одновременно. Курсор изменится на мигающую звездочку. Если Вы нажмете "I", то в нижней части экрана появится "HELLO". Поскольку все прочие клавиши заданы не были, то при нажатии любой другой клавиши Вы получите ее нормальные значения.

DEF KEY "a"; "GOODBYE"

В этом примере строка "GOODBYE" присваивается клавише "а" (или "а", что одно и то же). пока она не выполняется, поскольку после выражения не стоит ":". Когда же Вы нажмете "SYMBOL SHIFT" + "SPACE", строка будет введена, а когда нажмете "а", она исполнится.

Вы можете с помощью нехитрого приема записывать строки в программу одним нажатием клавиши. Например, Вам надо, чтобы после нажатии клавиши "a$ в программу вводилась строка 10 REM hello.

Вы можете задать клавишу "а" следующим образом: DEF KEY "а": "10 REM hello".

Когда Вы попробуете это сделать, Вас может постигнуть легкое разочарование, поскольку Вы не сможете получить ключевое слово REM, т.к. курсор в этот момент будет иметь вид не "K", a "L". Как с этим бороться мы уже писали раньше в разделе "Маленькие хитрости", стр. 52. Используем для этого особенность оператора THEN. Наберем начала DEF KEY "а"; "10 THEN REM hello"

Теперь установим курсор справа от REM и помощью DELETE сотрем THEN - Вас останется то, что надо.

Таким приемом можно на любую клавишу "подвесить" часто повторяющиеся при наборе программ строки и облегчить себе программирование.

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

DEF KEY ERASE сотрет все определения клавиш, которые хранятся выше RAMTOP и защищены от стирания другими путями, в том числе и NEW. Процедура SAVE в загрузчике Бета-Бейсика запишет все определения клавиш на ленту вместе с программой. (Запись идет от RAMTOP до конца Бета-Бейсика).

Для тех, кто программирует в машинных кодах, возможно, будет интересна следующая информация.

RAMTOP автоматически понижается для того, чтобы выделить место для занесения определений клавиш. Если Вы сами используете CLEAR (число) для изменения RAMTOP, то это может помешать воспользоваться заданными клавишами.

Эту проблему можно обойти, если сделать так, чтобы при переустановке RAMTOP синхронно перемещалась бы и область определения клавиш. Нижеследующая процедура сдвигает RAMTOP и определения клавиш вниз на заданное количество шагов, чтобы

избежать этой проблемы. Между концом области определения клавиш и старым RAMTOP, т.е. 55800 создается зазор, при желании его можно изменить. space - размер памяти, на которую понижается RAMTOP; oldrt - старый адрес RAMTOP; newrt - новый адрес RAMTOP.

В процедуре используются функции MEMORY$() и STRING$(), которые мы еще не рассматривали и о которых мы сообщим ниже.

10 INPUT "Spaces?"; space

20 LET oldrt - DPEEK (23730)

30 DPOKE 23728,oldrt

40 CLEAR (oldrt - space)

50 LET oldrt = DPEEK (23726)

60 LET a$ = MEMORY$ ( ) (oldrt TO 55600)

70 LET newrt = DPEEK (23730)

80 LET space = oldrt - newrt

90 POKE newrt,a$

100 POKE (55801 - space),STRING$ (space,CHR$ 0)

Всегда оставляйте нулевой байт после последнего определения клавиш в качестве "маркера" конца.

4. Команда: FILL

Структура: FILL x,y или FILL // INK цвет//; х,у или FILL //PAPER цвет //; x,y Клавиша: F

По этой команде происходит заполнение области PAPER цветом INK, если была выбрана команда FILL или FILL INK или происходит заполнение области INK цветом PAPER, если была избрана команда FILL PAPER. Заполнение начинается с точки, имеющей координаты х,у. Если Вы попробуете заполнить область цветом INK, а точка х,у уже имеет цвет INK, то ничего не получится. В отличие от стандартного Бейсика, если Вы опустите номер цвета, то команда FILL сработает с текущим цветом INK или PAPER. 10 FOR N = 1 TO 6 20 CLS

30 CIRCLE INK N; 128, 88, N*10 40 FILL INK N; 128,88 50 NEXT N

Возможно использование более сложных форм FILL: FILL INK 2; PAPER 1; FLASH 1; x,y

В этом случае первое слово после FILL указывает какой цвет INK или PAPER Вам нужен, а остальные изменяют аттрибуты заполняемой области.

Поскольку количество цветов, допустимых для одного знакоместа, ограничено двумя, то необходимо тщательно продумывать условия стыковки двух областей с разным цветом INK. Необходимо, чтобы стык проходил по границам знакомест.

FILL будет работать с любыми формами. Попробуйте этот пример, который заполнит весь экран, за исключением областей внутри букв. PRINT STRING$(704,"Q"):FILL 0,0

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

Количество пикселей, заполненных по FILL, можно определить с помощью функции FILLED ().

FILL можно прервать в любой момент с помощью BREAK.

5. Команда: JOIN

Структура: JOIN //номер строки// Клавиша: SYM SHIFT + G (см. также SPLIT.)

По этой команде объединяются вместе две строки. Если номер не указан, то объединяется строка, около которой стоит указатель, со следующей за ней строкой, если она есть.

Вторая строка теряет свой номер и присоединяется к предыдущей через разделитель

тт , тт

J

6. Команда: KEYIN

Структура: KEYIN строка.

Клавиша: SYM.SHIFT + 4

По этой команде вводится строка так, как если бы она была впечатана с клавиатуры. Это позволяет программам самозаписываться.

Полный список возможных приложений этой функции выходит за пределы, рассматриваемые фирменной инструкцией по работе с Бета-Бейсиком. Очевидно, ее возможности столь широки и необычны, что требуют специального исследования. Указано только, что наиболее очевидным приложением является возможность автоматического написания в листинге программы строк DATA (очень утомительное занятие для программиста, и если у него есть массив данных в памяти машины, имеет смысл подготовить специализированный модуль, занимающийся тем, чтобы формировать строки DATA из массива.)

Пример

10 LET a$="100 DATA": REM применяем ключевое слово DATA. Как это делать через THEN мы писали выше

20 FOR N = 0 TO 9

30 LET A$=A$ + STR$(PEEK N) + ","

40 NEXT N

50 LET A$=A$(1 TO LEN(A$)-1): REM отсечение последней запятой

60 KEYIN A$

Вы увидите, что после RUN к программе будет добавлена еще одна строка. (Строка совершенно бесполезная, поскольку дает данные первых 10 байтов памяти ПЗУ, но зато иллюстрирует сам принцип).

Если Вы чувствуете в себе смелость, можете использовать SCREEN$ и KEYIN для того, чтобы с их помощью написать полноэкранный редактор Бейсика!!!

Примечание: Он может быть довольно медленным.

Примечание 2: KEYIN не может быть непосредственной (прямой командой), а только частью программы.

7. Команда: LIST

Структура: LIST номер строки TO номер строки

или LLIST номер строки TO номер строки

Первый или второй номер строки может быть опущен. Если опущен первый, то он принимается за 0, если второй, то предполагается номер последней строки.

LIST 20 TO 100

LIST TO 200

LLIST 100 TO 180

Если оба номера совпадают, то распечатывается только одна строка.

Очень эффективно можно эту команду использовать совместно с TRACE.

9000 LIST line TO line: RETURN

Эта строка распечатывает каждую строку по мере ее исполнения после того, как Вы вставите TRACE 9000 в программу (в данной примере "line" - это переменная, создаваемая процедурой TRACE).

К сожалению, каждая строка будет иметь при себе мигающий курсор.

8. Команда POKE

Структура: POKE адрес, строка

Это обычное ключевое слово.

Бета-Бейсик 1.8 разрешает выполнять POKE с символьными строками так же, как и с числами, что в сочетании с функцией MEMORY$ дает возможность быстрых манипуляций большими блоками памяти. (Здесь надо отметить, что если Ваша программа может выйти из строя в результате нерасчетливого POKE, то при работе с длинными символьными строками это становится много более вероятным).

Давайте посмотрим на один эффект: 10 LET screen = 16384 20 POKE screen,STRING$(6144,"U").

Функция STRING$ была рассмотрена в инструкции к версии 1.0 под именем FN S$. По этой программе экран заполняется "U", но поскольку вследствие своего положения это уже не "U", а код от "U",^. 85, а в двоичной форме "01010101", то экран заполняется полосами. 30 LET attributes = 22528 40 POKE attributes, MEMORY$()(1 TO 704)

Эта программа копирует начало области памяти ROM в файл атрибутов, где эта операция производит интересный эффект.

Теперь давайте запишем простую программу, которая создаст на экране рисунок, сохранит его в памяти как символьную строку и затем через POKE вернет его на экран. 10 CIRCLE 128,88,70 20 FILL 128,83

30 LET a$=MEMORY$() (16384 то 23255): 40 CLS: PRINT "HIT ANY KEY":PAUSE 0 50 POKE 16384,a$

Память компьютера может содержать несколько таких рисунков, что даст вам возможность заменять их и демонстрировать последовательно. Чтобы можно было разместить в памяти большее количество рисунков, удобно считывать в строковую переменную третью часть экрана, туда же Вы можете добавить и третью часть файла атрибутов. Чтобы сохранить в памяти три трети экрана в виде строк, пользуйтесь: Первая треть экрана. LET a$=MEMORY$() (16384 TO 16431)

Вторая треть экрана. LET a$=MEMORY$() (18432 TO 20479)

Нижняя треть экрана. LET a$=MEMORY$() (20480 TO 22527)

Памяти достаточно, чтобы создать удовлетворительный мультфильм с использованием последовательных POKE строк. Вы можете применять массив (например DIM a$(10,2048)) чтобы хранить эти данные.

Конечно, существует значительно больше потенциальных возможностей, кроме развлечений с экранной памятью. Можно очистить (CLEAR) большую область памяти и загнать туда на хранение целую программу: CLEAR 33900,

затем запустите (RUN) следующую программу: 10 POKE 34000,MEMORY$ () (33552 TO 33800) 20 .... остальная часть программы

Теперь Вы можете дать NEW и стереть свою программу, а затем, когда она Вам вновь понадобится, вернуть ее назад:

POKE 23552,MEMORY$ () (34000 TO 44246)

Эту команду можно "спрятать" от NEW на клавише заданной пользователем. Мы уже говорили, что задания клавиш после NEW не уничтожаются, т.к. хранятся выше уровня, установленного RAMTOP. Клавиша задается после CLEAR и до RUN, например: DEF KEY "J": POKF 23552,MEMORY$()(34000 TO 44248).

После того, как программа будет возвращена, она продолжит работу с того места, в котором она была "спрятана", т.к. системные переменные были сохранены вместе с Бейсиком, а в них запоминается состояние программы во время ее работы.

Немного труднее организовать хранение двух программ, нужно больше памяти, нужно также предоставить место в БЕЙСИК-области для их запуска, но это тоже возможно.

И, дополнительно, еще одна "маленькая хитрость". Чтобы выгрузить на ленту блок в машинных кодах с Бейсиковской программой, присвойте его символьной строке с использованием MEMORY$, а затем сделайте SAVE для Бейсик-программы, включив в нее и эту строковую переменную. При этом предусмотрите, чтобы после автостарта POKE возвращал бы этот блок на его место при загрузке БЕЙСИКа.

Примечание: Если хотите избежать затирания каких-то важных данных после такого POKE, не забывайте предварительно выставлять CLEAR. Еще полезный совет; POKE машинного кода совершенно безопасно производится в область экрана (хотя это некрасиво выглядит) или в область буфера принтера (если Ваш код не более 256 байтов и если Вы не работаете со 128-ой моделью.

9. Команды: ROLL и SCROLL

Эти команды могут иметь довольно сложный синтаксис. Мы настойчиво рекомендуем изучить сначала их работу по инструкции к Бета-Бейсику 1.0.

В этой версии ROLL может иметь структуру:

ROLL код направления //,пиксели// //; х,у; ширина, длина//

Коды направления 1...4 перемещают только атрибуты, коды 5...8 - только пиксельную информацию, коды 9...12 - и то и другое вместе.

Поскольку атрибуты могут перемещаться только на величину знакоместа 8х8, то целесообразно при совместном перемещении двигать пиксельную информацию на 8 пикселей за шаг.

Параметр "пиксели" можно задать самому. По умолчанию он принимается равным 1. Его значение не должно превышать 255 для горизонтального перемещения и 176 для вертикального.

ROLL 5 или ROLL 5,1 передвинет экран влево на один пиксель, а ROLL 5,2 - на два пикселя. При вертикальном ROLL или SCROLL скорость перемещения примерно пропорциональна количеству пикселей, сдвигаемых за один раз. В горизонтальном направлении наилучшую скорость дает перемещение на 4 пикселя или 8, т.к. при этом процессор Z-80 применяет инструкции сдвига на байт или полубайт (ниббль).

10. Команда SPLIT

Это не ключевое слово. В действительности вводится символ <>. Клавиша: SYM.SHIFT + W (не в режиме "G").

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

Теперь знак "<>" можно убрать и он заменится тем же номером строки. Курсор стоит справа от номера строки в положении, которое позволяет вам легко изменить номер на новый прежде чем нажмете "ENTER". Если Вы введете: 10 PRINT "hello": GO TO 10: <> PRINT "goodbye" и нажмете ENTER, то в листинге появится: 10 PRINT "hello": GO TO 10

а в нижней части экрана останется: 10 (курсор) PRINT "goodbye"

Функция

ФУНКЦИИ

В новой версии Бета-Бейсика 1.8 по сравнению с версией 1.0 добавлено много новых функций. Ниже в таблице они приведены как бы в виде ключевых слов, но таковыми не являются, а набираются через FN, с последующей буквой и знаком $ или скобкой (.

Клавиша Версия

AND

BIN$

CHAR$

COSE

DEC

DPEEK

FN P(

1.0

FILLED

FN F(

1.8

HEX$

FN H$

1.0

INSTRING

FN I(

1.0

MEM

FN M(

1.0

MEMORY$

FN M$

1.8

MOD

FN V(

1.8

NUMBER

FN N(

1.0

OR

FN O(

1.8

RNDM

FN R(

1.8

SCRN

FN K$

1.8

SINE

FN S(

1.8

STRING$

FN S$

1.0

TIME$

FN T$

1.0

USING$

FN U$

1.0

XOR

FN X(

1.8

Те функции, которые вошли в описание версии Бета-Бейсик 1.0, здесь не рассматриваются.

1. Функция: AND

Структура: AND (число, число)

Клавиши: FN A (число, число).

Эта функция записывается как обычное ключевой слово, но отличается от стандартного в листинге программы своим синтаксисом. Оно выдает результат побитной операции логического AND двух чисел, которые должны быть в диапазоне от 0 до 65535. каждый бит будет равен "1" только если соответствующий бит и в первом и во втором числе равнялся единице. Пониманию этого очень способствует новая функция BIN$. BIN$(254)="1111 1110" BIN$(120)="0111 1000" BIN$(AND(254,120))="01111000"

Вы можете использовать AND для того, чтобы "маскировать" нежелаемые биты. Например:

PRINT AND (BIN 00000111,ATTR(line,column))

Эта строка дает цвет INK для позиции "line,column", путем маскировки остальных битов атрибутов. Вы могли воспользоваться числом "7" вместо "BIN 0000 0111".

В нижеследующем примере программа напишет слово "Bang", если была нажата клавиша F, причем возможно ее сочетание с любыми клавишами (см. т. 1 нашего трехтомника по программированию в машинных кодах, где каждая клавиша рассматривается в качестве серии внешних портов). 10 IF AND (BIN 0000 1000, IN 65022) 0 THEN PRINT "bang!"; 20 GO TO 10

2. Функция BIN$

Структура: BIN$ (число)

Клавиша: FN B$ (число)

Дает двоичный эквивалент числа R качестве восьми-символьной строки. Если число меньше, чем 256 или в качестве шестнадцати-символьной строки, если число лежит между 256 и 65535.

Эта функция полезна для понимания машинных кодов и операций с битами для функций AND, OR и XOR.

Она может быть также полезной при проверке генератора символов из ПЗУ, области графики пользователя, области атрибутов, системных переменных и клавиш клавиатуры. 10 PRINT AT 10,10; BIN$(IN 65022):GO TO 10

Если Вам хочется иметь в строке какие-то символы, отличные от "0" и "1", то дайте POKE 62865 или 62869 с желаемым символом.

3. Функция: COSE

Структура: COSE (число)

Клавиши: FN C (число)

Функция выдает косинус "числа" с меньшей точностью, чем стандартная - точность до 4-х значащих цифр, но в шесть раз быстрее.

4. Функция: FILLED

Структура: FILLED( )

Клавиша: FN F( )

Функция дает количество пикселей, заполненных последней командой FILL. Например:

10 PLOT 0,0: DRAW 9,0: DRAW 0,9 20 DRAW -9,0: DRAW 0,-9 30 FILL 5,5 40 PRINT FILLED ( )

Одна сторона квадрата - 10 пикселей. (Заметьте, что если бы мы вместо 9 использовали бы 1 в функции DRAW, то сторона квадрата равнялась бы двум пикселям). Это потому, что реальные линии имеют на компьютере толщину в один пиксель. Внутренняя сторона построенного квадрата имеет 8 пикселей, поэтому FILLED даст нам 64.

Если бы мы дали FILL PAPER:5,5 то квадрат удалился бы с экрана и функция FILLED дала бы 100.

Разница между 100 и 64, равная 36 - это количество пикселей, составляющих периметр.

5. Функция: MEMORY$

Структура: MEMORY$ ()

Клавиши: FN M$( )

Выдает всю память в качестве символьной строки. На самом деле сюда не включается первый байт компьютера (адрес 0), поэтому MEMORY$( ) (1)- это тоже самое, что и PEEK 1. По техническим соображениям сюда не входят также три последних байта памяти, поэтому результат работы функции на самом деле имеет длину LEN 65532.

Совместно со способностью Бета-Бейсика делать POKE для символьных строк, эта функция дает программисту возможность перемещать большие области памяти с высокой скоростью. Для более полного описания этого аспекта см. POKE.

Другое приложение MEMORY$ состоит в том, что она позволяет делать быстрый поиск в памяти, используя функцию INSTRING.

Несмотря на то, что область памяти, в которой производится поиск, можно ограничить например вырезкой MEMORY$ ()(23759 TO)).

INSTRING работает так быстро, что как правило это не имеет смысла делать. 10 REM ASDFG

20 PRINT INSTRING (1,MEMORY$(),"ASDFG")

Эта программа отыщет тот адрес, где в REM содержится строка "ASDFG". Вместо 1 мы могли бы поставить DPEEK(23635), где содержится переменная PROG, указывающая на адрес начала Бейсик-программы. Тогда поиск проводился бы от начала программы, а не от начала ПЗУ.

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

6. Функция MOD

Структура: MOD (число,число).

Клавиши: FN V (число,число).

Функция дает остаток деления одного числа на другое.

MOD(10,3) = 1 MOD(66,16) = 2

MOD(125,35,5) = 18.5

Ниже приведен пример программы, предотвращающей печать (PLOT) за пределами экрана.

10 FOR n=0 TO 400

20 PLOT MOD(n,256), MOD(n,176)

30 NEXT n

7. Функция: OR

Структура: OR (число,число).

Клавиши: FN O (число, число).

Эта функция записывается как обычное ключевое слово, но отличается от стандартного OR другим синтаксисом. Она выполняет логическую побитную операцию OR для двух чисел, которые должны быть в диапазоне от 0 до 65535. Если бит равен 1 в первом числе или во втором, то соответствующий бит результата тоже будет равен 1. Чтобы в результате бит равнялся нулю, он должен быть равным нулю в обоих числах.

8. Функция: RNDM

Структура: RNDM (число).

Клавиши: FN R (число).

Если число равно "0", то RNDM дает случайное число от 0 до 1, как и RND. Однако она работает в два с половиной раза быстрее. Если число не равно нулю, то функция дает случайное число в диапазоне от 0 до этого числа. Это также выполняется в два с половиной раза быстрее, чем RND*^^^).

10 PLOT RNDM(255),RNDM(175) 20 GO TO 10

RANDOMISE (число) устанавливает RNDM в определенное место в последовательности случайных чисел так же, как и для RND.

9. Функция SCRN$

Структура: SCRN$ (ряд,столбец)

Клавиши: FN K$

Работает почти как обычная функция SCREEN$, за исключением того, что распознает символы графики, как обычные символы. "Жучок", который содержится в функции SCREEN$ "Спектрума", здесь также устранен.

Сначала введите KEYWORDS 0, затем попробуйте пример, приведенный ниже. Он создает символы графики пользователя со случайным рисунком, а затем читает их с экрана. 10 FOR a=USR "a"TO USR "u"+7 20 POKE a,RND*255: 30 NEXT a 50 LET a$="" 60 FOR c=0 TO 31 70 LET a$=a$+SCRN$(0,c) 80 NEXT c 90 PRINT a$

"Спектрумовская" блочная графика не понимается. Если Вам это нужно, запрограммируйте символы графики пользователя так, чтобы они выглядели, как блочная графика.

10. Функция: SINE

Структура: SINE (число).

Клавиши: FN S (число).

Дает синус "числа" с меньшей точностью, чем стандартная функция, хотя 4 значащих цифры есть. Зато работает в шесть раз быстрее.

11. Функция: XOR

Структура: XOR (число,число).

Клавиши: FN X (число,число). Эта функция выполняет XOR (исключающее "или") для двух чисел. Числа должны быть в диапазоне от 0 до 65535. Если бит равен "0" или "1" в обоих числах, то он будет равен "0" в результате. Если бит равен "1" только в одном из чисел, то он будет равен "1" в результате.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Интервью - На вопросы газеты ZхNews отвечает Михаил Белоусов, известный большинству спектрумистов, как Аmаdeus Vохоn.
Металлургия - Как настроить модем на поднятие трубки телефона.
В помощь - доработка S-DOS модема.
Hayes - полный список комманд Hayes модемов.
Мнение - владелец DesireIRE BBS т.е Sir Denis, пишет ответ на статью Scratcher'a в CWEEK#2, про demo'macking.

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