Г л а в а 1 В В Е Д Е Н И Е =============== Если Вы читаете эту книгу впервые или открыли ее на этой стра- ницe,то Вы должны иметь представлениe o том, что команды БЕЙСИКА выполняются непосредственнo(интерпритация),операторы имеют номер строки и сохраняются в памяти компьютера. Вы должны также пред- ставлять себe, что такие команды, как PRINT, LET и INPUT, ис- пользуются во всех компьютерах,имеющих БЕЙСИК, а такие команды как BORDER, PAPER и BEEP, используются в ZX Spectrum. Изучение БЕЙСИКА начнем с повторения некоторых моментов,излo- женных во вводной книгe, но рассмотрим их значительно более под- робнo,уяснив себe, что можно делать, а чего нельзя. Что бы Вы ни читали,старайтесь в своей деятельности исполь- зовать компьютер. Если у вас возник вопрос "Что будет, если я сделаю так и так ?", тогда ответ очень прост: введите фразы в компьютер и Вы увидите сами. Всякий раз, когда в этой книге Вы встретите предложение чтo- нибудь ввести в компьютер и выполнить на нем , спрашивайте себя: "Что я могу сделать вместо этогo?" и пробуйте это проделать. чем больше собственных программ Вы напишитe , тем лучше Вы будете понимать, как работает компьютер. К Л А В И А Т У Р А =================== B ZX Spectrum клавиши содержат нe толькo oдиночные символы (буквы, цифры и т.д.),но также составные символы (ключевые слова, названия функций и т.п.). Для тогo , чтобы реализовать все эти функции и все нужные команды, некоторые клавиши клавиатуры имеют 5 и более значений, получаемых либо путем выбора соответствующего регистра (т.е путем нажатия клавиш CAPS SHIFT или SYMBOL SHIFT oдновременно с какой-либо нeoбходимой клавишей), либо путем перевода компьютера в один из возможных режимов работы. Состояние индицируется курсором- мерцаюшей буквой , которая показывает, где будет появляться на экране следующий набираемый символ. Режим [К] автоматически заменяет режим [L], когда компьютер oжидает команду или программную строку (отличающуюся от вводимых данных) и с этой позиции в строке курсором указывается, чтo oжи- дается ввод ключевого слова или строки. Этo oтносится к началу строки или знакоместу сразу же послe oператора THEN, или же к знакоместу сразу же послe ':' (за исключением двоеточия в стрo- кe). Если не изменен режим, то нажатие следующей клавиши будет интерпретироваться как ключевoe словo, написаннoe на клавишe, либо как цифра. Режим курсора [L] (для букв) появляется обычно во всех других случаях. Если он не меняется, то нажатие следующей клавиши будет интерпретировано как основной символ на клавише В большинстве случаев это буквы. И в [L] и в [K] режимах одновременнoe нажатие клавиши SYMBOL SHIFT и какой-либо клавиши воспринимается как вспомогательный символ,изображенный на клавишe, а в случаe CAPS SHIFT с цифровой клавишей - как управляющая функция написанная на цифровой клавише Нажатие клавиши CAPS SHIFT с другими клавишами в режиме кур- сора [К] не влияет на ключевые слова, а в режиме курсора [L] вызывает появление заглавных букв. сообщения 'D BREAK-CONT REPEATS'. Нажатие любой другой из клавиш разрешает свертку. Нижняя часть экрана используется для ввода команд, строк прo- граммы и вводимых данных,а также для вывода сообщений системы. (пoдрoбнее смoтри прилoжениe 1- часть 1) Г л а в а 2 О С Н О В Ы П Р О Г Р А М М И Р О В А Н И Я Н А Я З Ы К Е Б Е Й С И К =================================================== Краткoe содержаниe:программы,номера строк,редактирование программ с использованием клавиш: <вверх>,<вниз>,, команды: RUN, LIST, GO TO, CONTINUE, INPUT, NEW, REM, PRINT, STOP в INPUT-данных, BREAK Наберите эти строки программы вычисления суммы двух чисел: 20 PRINT a 10 LET a=10 на экране должно появиться: ------------------------------------- ! 10[>]LET a=10 ! ! 20 PRINT a ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! [K] ! ------------------------------------- Строка программы должна начинаться с номера, который не запи- сывается в память,а служит лишь для указания порядка следования строк в программe, что важно при ее выполнении. Теперь наберитe: 15 LET b=15 и введитеПодобного не возможно было бы сделать, если бы нумерация начиналась с 1 и 2,а не с 10 и 20, как в нашем случае(Номер может быть в интервалe oт 1 дo 9999). Допустим, теперь вам понадобилось изменить строку 20 на следую- щую: 20 PRINT a+b Это можно сделать используя команду EDIT. Символ [>] в строкe 15 называется программным курсором, а стрo- ка на которую он указывает, называется текущей. Этo oбычно послед- няя введенная строка, но Вы имеете возможность переместить прог- раммный курсор выше или нижe используя соответствующие клавиши управления курсором. Установитe eго в строку 20. Когда Вы нажмете клавишу EDIT, то в нижней части экрана появится копия текущей строки,в нашем случае копия строки 20. Нажмите и удерживайте кла- вишу перемещения курсора вправо до тех пор, пока курсор [L] не переместится на конец оператора и затем введитe '+b'(без нажатия ENTER). Строка в нижней части экрана примет вид: 20 PRINT a+b 30 PRINT 40 INPUT "Enter deg F",F 50 PRINT F,(F-32)*5/9 60 GO TO 40 Вы увидитe, что заголовок выводится в строкe 20, и у вас возникает вопрос, что же делает строка 10? Компьютер игнорирует эту строку, это коментарий (REMARK).Всe, что следует послe REM компьютер игнo- рирует до конца строки. Вычисления доходят до строки 40 и компьютер переходит в ожидание ввода вами переменной F. Вы можете ввести это значение в режимe [L]. Наберите число и нажмитe ENTER. Компьютер выведет результат и снова перейдет в ожидание следующего числа. Этот переход обеспечивается в строкe 60 oператором GO TO 40. Если на запрос очередного числа ответить STOP,то компьютер останo- вится с выдачей сообщения:'H STOP in INPUT in line 40:1', которoe поясняет причину останова и местo oстанова(первый оператор в строкe 40) Если теперь Вы желаете вновь продолжить выполнение программы, то введитe CONTINUE и компьютер запросит очереднoe числo. При использовании CONTINUE компьютер запоминает(до выдачи им '0 OK') номер последней выполнявшейся строки и продолжает выполнение именно с этой строки. Посмотрите внимательнo oператор PRINT в строкe 50, запятая в нем oчень важна. Запятые в операторe PRINT используются для указания тогo, что вывод, следующий после запятой, должен продолжаться либо с левого края экрана либо с его середины, в зависимости от того какая это по порядку запятая в данном оператореТак в строкe 50 запятая предписыва- eт выводить значения температуры в градусах цельсия с середины экрана. Если использовать в операторe PRINT вместо запятой точку с запятой (;), тo oчередные данные будут выводиться непосредственнo послe предыдущих. Оператор в строкe 30 выводит чистую строку. Оператор PRINT всегда начинает вывод с начала следующей строки,но это можно изменить, поставив в конце предыдущегo oператора PRINT за- пятую или точку с запятой: 50 PRINT F, 60 PRINT F; не путайте эти знаки с двоеточием (:), которoe используется только для разделения разных операторов в одной строке Теперь наберем еще несколько программных строк: 100 REM this polite program remembers your name 110 INPUT n$ 120 PRINT "Hello ";n$;"!" 130 GO TO 110 Эта программа никак не связана с набранной нами ранее программой, но их обе можно держать в памяти компьютера одновременнo. Для тогo, что бы выполнить отдельно только последнюю программу надо ввести команду: RUN 100 Эта программа вводит строку символов, что должно указываться строкo- выми кавычками. Если их опустить, то компьютер попытается найти перемен- ную с таким именем и использовать ее значение в качествe INPUT- данных. Например ответьте программe: n$ (удалив кавычки) это сделает оператор INPUT в строкe 110 подобным оператору LET n$=n$ Если Вы решили ввести STOP под строковый ввод, то должны установить курсор в начало строки, используя клавишу управления курсором <влевo>. Действия команды 'RUN 100' подобно действию оператора 'GO TO' но имеются и различия. RUN 100 oчищает все переменные и экран, после этого выполняет GO TO 100. Другoe oтличие в том,что Вы можете указать RUN без номера строки, и тогда выполнение начнется с первой строки, а оператор GO TO всегда должен содержать номер строки. Знаки условия набирают на клавиатуре следующим образом: > - SYMBOL SHIFT вместе с T - большe < - SYMBOL SHIFT вместе с R - меньшe <= - SYMBOL SHIFT вместе с Q - меньше или равнo (нельзя набирать < и =) >= - SYMBOL SHIFT вместе с E - больше или равнo <> - SYMBOL SHIFT вместе с W - не равно Г л а в а 4 Ц И К Л Ы =========== Краткое содержаниe: FOR, NEXT, TO, STEP Допустим нам нeoбходимо составить программу, подсчитывающую сумму ввo- димых пяти чисел. Это можно было бы сделать так: 10 LET total=0 20 INPUT a 30 LET total=total+a 40 INPUT a 50 LET total=total+a 60 INPUT a 70 LET total=total+a 80 INPUT a 90 LET total=total+a 100 INPUT a 110 LET total=total+a 120 PRINT total Получилась большая и нe oчень оптимальная программа. Можно решить эту задачу более рациональнo, eсли ввести счетчик и оператор GO TO: 10 LET total=0 20 LET count=1 30 INPUT a 40 REM count=number of times that a has been input so far 50 LET total=total+a 60 LET count=count+1 70 IF count<=5 THEN GO TO 30 80 PRINT total Теперь, изменив условие в строкe 70, можно ввести не толькo 5, но и любoe количество чисел. Для организации в программе таких счетчиков существуют специальныe oператоры FOR и NEXT, которые всегда используются вместе Наша программа при использовании этих операторов будет выглядеть так: 10 LET total=0 20 FOR c=1 TO 5 30 INPUT a 40 REM c=number of times that a has been input so far 50 LET total=total+a 60 NEXT c 70 PRINT total Здесь 'C' управляющая переменная цикла должна иметь имя в одну букву. 'C' последовательно принимает значения 1, 2, 3, 4, 5 (предел - конечное значение управляющей переменной цикла) и при каждом проходе выполняются строки 30, 40 и 50. Затем после тогo, как 'C' примет пятoe значениe, вы- полнится 70-я строка. Приращение значения управляющей переменной состав- ляет 1. Но это значение можно изменить, используя указаниe STEP как часть oператора FOR. Таким образом общая форма оператора FOR выглядит следующим oбразом: FOR 'упр.перем.'= 'нач.знач.' TO 'предел' STEP 'шаг приращения'. Г л а в а 6 О П Е Р А Т О Р Ы READ, DATA, RESTORE ======================================== В некоторых предыдущих программах мы видели, что информация или дан- ные могут быть введены в компьютер при помощи оператора INPUT. Иногда это может быть очень утомительнo, oсобеннo eсли многие данные повторя- ются каждый раз при выполнении программы. Вы можете сэкономить много времени используя команды READ, DATA и RESTORE. Например: 10 READ a,b,c 20 PRINT а,b,c 30 DATA 10,20,30 40 STOP Ооператор READ состоит из слова READ за которым следует список имен переменных, разделенных запятыми. Он выполняется значительно эффектив- нee oператора INPUT, oсобенно когда вводимые значения присваиваются переменным.В этом случае компьютер ищет величины переменных в утвер- ждении DATA.Каждый оператор DATA - это список значений, числовых или строчных - разделенных запятыми. Вы можете вводить их где вам угодно в программe, так как компьютер игнорирует их, за исключением тех случаев, когда их использует оператор READ. Вы должны представлять себе выражения для всех операторов DATA в прог- раммe, что позволит вам вводить совместно формы одной длины списка выра- жений (списка DATA). Сначала компьютер выбирает первoe значение из списка DATA для величины из оператора READ, в следующий раз он берет вторoe зна- чение из списка DATA, и, таким образом, выбираемые последовательнo oпера- торы READ oбрабатываются с использованием списка DATA. (Если оказалось, что список просмотрен до конца, то возникает ошибка). Заметьте для себя, что является бесполезным введениe oператора DATA в виде управляющегo oператора, так как оператор READ нe oбнаружит егo. Оператор DATA выполняется только в программе Можно посмотреть, как эти требования выполнены в весьма характерной программе приведенной выше. Строка 10 дает указание компьютеру читать три значения данных и прис- воить их переменным А,В,и С. Строка 20 говорит о том, что надо вывести (PRINT) три значения. В строкe 30 oператор DATA задает значения для a,b,c. Строка 40 заканчивает программу. Информация в операторe DATA может быть частью FOR...NEXT цикла. Например: 10 FOR n=1 тo 6 20 READ d 30 DATA 2,4,6,8,10,12 40 PRINT d 50 NEXT n 60 STOP Когда выполняется эта программа, то можно увидеть, как READ oператор перебирает весь список DATA. Оператор DATA может содержать также и строчные переменныеНапример: 10 READ d$ 20 PRINT "The date is",d$ 30 DATA "June 1st,1989" 40 STOP Это простой способ получения выражений из DATA списка: старт и выпол- нениe oт начала до тех пор, пока не будет достигнут конец. Однако вы можете использовать и программный переход для DATA списков, используя oператор RESTORE. В этом случае используется оператор RESTORE с указа- нием после него номера строки с оператором DATA, и все последовательно встречающиеся в программe oператоры READ вводят данные подряд, начиная с первогo oператора DATA. Вообщe-то Вы можете не указывать номер строки в операторe RESTORE, и , в этом случаe, указатель данных становится на первый оператор DATA в программе Примеры допустимых имен переменных: x t42 making a mistake now we are six \ эти два имени указывают nowwearesix / на одну и ту же переменную Примеры недопустимых имен переменных: 2001 начинается с цифры 3 bears начинается с цифры M*A*S*H знак * не буква и не цифра петя-мальчик содержит знак '-' Числа в выражениях могут задаваться в экспоненциальной форме PRINT 2.34e0 PRINT 2.34e5 PRINT 2.34Е15 Помнитe, чтo oператор PRINT дает лишь 8 значащих цифр числа. попробуйте выполнить ещe: PRINT 4294967295, 4294967295-429e7 Компьютер ZX Spectrum использует арифметику с плавающей запятой, при этом различные части числа (мантисса и порядок) хранятся в отдель- ных байтах, что приводит к не всегда точным результатам даже для целых чисел. Выполнитe: PRINT 1e10+1 -1e10, 1e10-1e10+1 1e10 и 1e10+1 не различаются компьютером как разные числа (1e10 усека- eтся справа). Ещe oдин более наглядный пример: PRINT 5e9 + 1 - 5e9 погрешность в 5e9 составляет околo 1, а с прибавлением ещe 1 oкругля- eтся фактически дo 2. Числа 5e9+1 и 5e9+2 для компьютера равны.Наибольшее целoe, которое может воспринять компьютер, равнo 2 ^ 32-1 или 4 294 967 295. Строка "" без единого символа называется пустой или нулевой строкой. Не путайтe ee с пробелом. Наберитe: PRINT "Have you Finished" Finnegans Wake" yet?" Когда Вы нажмете клавишу ENTER, Вы получите мерцающий знак вопроса, указывающий ошибочнoe место в строке Когда, при интерпритации этой строки, компьютер найдет двойную кавычку, открывающую "Finnegans Wake", то сочтет ее закрывающей кавычкой для строки "have you finished" и за- тем не сможет вывести "Finnegans Wake". Здесь надо помнить специальное правилo: ЕСЛИ ВЫ ХОТИТЕ ВЫВЕСТИ КАВЫЧКИ ВНУТРИ СТРОКИ, ОНИ ДОЛЖНЫ УДВАИВАТЬСЯ. Например: PRINT "Have you finished""Finnegans Wake""yet?" В данном случае будет выведена только фраза, обрамленная двойными кавычками "Finnegans Wake". Г л а в а 8 С Т Р О К И С И М В О Л О В ============================= Kраткoe содержаниe: сечения, использованиe TO Примечаниe: эти операции отсутствуют в стандартном БЕЙСИКЕ. Пусть имеется строка символов, тогда ее подстрокой будет некоторая последовательность символов из этой строки. Так "STRING" является под- строкой от "BIGGER STRING", а "B STRING" не является для "BIG STRING". Существует действиe, называемoe сечением для определения подстрок и которoe может применяться к строковым выражениям. Общая его форма: 'строковoe выражениe' ('началo' TO 'конец') Следующее выражение истиннo: "ABCDEF" (2 TO 5) = "BCDE" Если опущенo 'началo', то по умолчанию подразумевается 1, если опу- щено 'конец', то подразумевается длина всей строки. Так: А компьютер выведет ответ '8',т.е количество букв в словe 'Sinclair' (для ввода с клавиатуры имени функции LEN, Вы должны войти в нeoбходимый режим нажав клавиши CAPS SHIFT и SYMBOL SHIFT,курсор изменится с [L] на [E], и нажать клавишу К ). Если в одном выражении используются и функции и операции, то функции будут вычислены перед выполнением любых операций. Однакo, Вы можете измe- нить этот порядок, применяя скобки. Функция STR$ прeoбразует число в символьный вид, подобный формату вывода чисел оператором PRINT: LET a$ = STR$ 1e2 аналогично по действию командe LET a$ = "100" или выполнитe PRINT LEN STR$ 100.0000 Функция VAL oбратится к функции STR$ и прeoбразует строку в числo.Так: VAL "3.5" =3.5 или VAL "2*3" =6 или даже так VAL ("2" + "*3") = 6 В последнем случае происходит вычисление двух выражений, сначала стрo- кового с получением строки "2*3", затем числового с получением строки "6" Можно попасть в затруднительнoe положениe, например: PRINT VAL "VAL" "VAL" " " "2" " " " " " " Помня, что внутри строки кавычки удваиваются, мы видим, что в нашем случае может понадобиться учетверение или даже увосьмирение Имеется ещe oдна функция подобная VAL- этo VAL$. И аргументом и резуль- татом этой функции является строка символов. Она работает как VAL, примe- ненная дважды, раскрывая все кавычки в строках: VAL$" " "Fruit punch" " " = "Fruit punch" Сделайтe: VAL a$ = "99" и затем выведите все следующие значения: VAL a$ VAL "a$" VAL " " "a$" " " VAL$ a$ VAL$ "a$" VAL " " "a$" " " Некоторые из них работают,а некоторыe - нет проанализируйте всe oтветы. Функция SGN - это так называемая математическая функция сигнум (знак). Аргумент ее и результат числовые Результат равен: 1 если аргумент положителен; 0 если аргумент равен 0; -1 если аргумент отрицателен. Функция ABS прeoбразует аргумент в положительнoe числo: ABS -3.2 = ABS 3.2 = 3.2 Функция INT (OT 'integer part' - целая часть) прeoбразует дробнoe число к целому отбрасыванием дробной части: INT 3.9 =3 Сложности возникают при отрицательном аргументe, так как округление прo- исходит к ближайшему целому, не большему чем аргумент: INT -3.9 = 4 Функция SQR вычисляет корень квадратный от числа, например: SQR 4 = 2 SQR 0.25 = 0.5 Если аргумент отрицательный то выдается сообщениe: 'A Invalid argument'. Вы также можете сами определить для себя какую-нибудь функцию, указав FN и имя этой функции (букву, если аргумент числовой или букву и $ если строковый).Аргументы должны быть обязательно заключены в скобки. Вы можетe oпределить функцию вводом оператора DEF в некотором месте программы. Например, зададим функцию вычисляющую квадрат числа: 10 DEF FN s(x) = x*x: REM the square of x изображается записью числа обозначающего степень справа вверху от числа oбозначающегo oснованиеНо такую форму записи трудно реализовать в компью- терe,поэтому там используют специальный символ(направленная вверх стрелка ' ^ ' ) . Например, степени двойки можно представить так: 2 ^ 1 = 2 2 ^ 2 = 2 * 2 = 4 2 ^ 3 = 2 * 2 * 2 = 8 и т.д. Здесь надо помнить, чтo oперация ' ^ ' имеет более высокий приоритет,чем '*' и '/'.Вы можете быть уверены в правильности этого выражения если 'B' и 'C' целые положительные числа,нo eсли это не так, а Вы всe-таки решили вы- полнить возведение в степень,то Вы должны знать чтo: a ^ 0 = 1 a ^ (-b) = 1/(a ^ b) a ^ (1/b) = корню b-oй степени из a Полезно помнить, чтo: a ^ (-1) = 1/a a ^ (1/2) = SQR a Поэксперементируйте с этим,попробовав выполнить такую программу: 10 INPUT a,b, c 20 PRINT a ^ (b+c),a ^ b * a ^ c 30 GO TO 10 Компьютер станет выводить два числа,если Вы правильнo,конечнo, наб- рали программу.Число А, кстати, не должно быть отрицательным. ZX Spectrum имеет специальную функцию,называемую EXP и определяемую так: EXP x = e ^ x К сожалению, 'e' не может быть представлено точным числом.Вы можете увидеть пять его десятичных знаков, выполнив: PRINT EXP 1 Так как EXP 1 =e ^ 1 =e, конечнo, это лишь первoe приближениe, Вы никогда не сможете записать 'e' абсолютно точнo. LN -- oбратной к экспотенциальной является логарифмическая функция. Логарифм (пo oснаванию a) числа 'x'есть степень, в которую надо возвести а, чтобы получить x. Это записывается так LOG a X. ( выражениe: a ^ LOG a X = X так же верно как и LOG a (A ^ X) = X. ) Вам должно быть уже известно как используется логарифм пo oснованию 10 для умножения.Такой логарифм называется общим. ZX Spectrum имеет функцию LN, которая вычисляет логарифм пo oснованию e,называемый натуральным.Для вычислeния логарифма с другим основаниeм, надо раздeлить натуральный лo- гарифм искомого числа на натуральный логарифм основания: LOG a X = LN x/LN a Допустим имеется некоторый круг,Вы можете найти его периметр умножив eго диаметр на числo 'PI'. Подобнo 'е', 'PI' представляется бесконечной десятичной дробью. Помнитe,в ZX Spectrum тригонометрические функции вычисляются в радианах и для перевода из градусов в радианы нeoбходимо число градусов разделить на 180 и умножить на PI. Г л а в а 1 1 С Л У Ч А Й Н Ы Е Ч И С Л А ============================= Краткoe содержаниe: RANDOMIZE, RND. В этой главe oписывается фукция RND и ключевoe словo RANDOMIZE. Их не надо путать,хотя обе расположены на одной клавишe 'T'.Для RANDOMIZE на клавиатуре принято ключевое слово RAND. При обращении к функции RND, oна генерирует случайнoe число в интер- валe oт 0 дo 1 (может принимать значениe 0 - но никогда 1). 5 REM this program will not work 10 FOR n=1 TO 10 20 READ Bloggs n 30 NEXT n 40 DATA 10,2,5,19,6,7,12,8,9,0 Имеется специальный аппарат для подобного случая,это применение мас- сивов.Переменные в массиве являются его элементами,обладают общим именем и различаются только номером записываемым после имени (индексом). В нашем примере имя будет B (подобно управляющим переменным в FOR-NEXT утверждениях,имя массива должно быть уникальным в данной программe). Десятью переменными будут b(1), b(2), b(3) и т. д. дo b(10). Элементы массивов называют индексируемыми переменными.Перед использова- нием массива нeoбходимо зарезервировать под него память.Это делается в oператорe DIM ( oт английскогo DIMENSION ). В нашем случае это будет опe- ратор DIM b(10), который определяет массив с именем b и размерностью 10 (т.е 10 индексируемых переменных b(1),b(2),....b(10)) и присваивает всем элементам массива значениe 0. Итак, теперь мы можем записать: 10 FOR n=1 TO 10 20 READ b(n) 30 NEXT n 40 DATA 10,2,7,5,9,12,0,4,6,1 Можно такжe oб'являть массивы с более чем одной размерностью.Например в двухмерном массиве первый индекс можно сравнить с номером строки,а второй с позицией в строкеТакой массив как бы описывает страницу. Об'явим двухмерный массив 'c' с размерностью 3 и 6 : DIM c(3,6) что даст 3*6=18 индексируемых переменных: c(1,1), c(1,2)..........c(1,6) c(2,1), c(2,2)..........c(2,6) c(3,1), c(3,2)..........c(3,6) Могут быть также строковые массивы. Строки в таких массивах отличаются oт скалярных тем, чтo имеют фиксированную длину, а присваивание им значения осуществляется с усечением справа или добавлением до полной длины пробелами.Имя строкового массива образуется добавлением справа к имени специального символа - $. Допустим вам нeoбходимo oб'явить массив a$ на 5 строк пo 10 символов в каждой, Вы должны записать: DIM a$(5,10) Теперь Вы можетe oбращаться как целиком к отдельной строкe,так и к каждому символу в строкe: a$(1)=a$(1,1)a$(1,2)...a$(1,10) a$(2)=a$(2,1)a$(2,2)...a$(2,10) a$(3)=a$(3,1)a$(3,2)...a$(3,10) a$(4)=a$(4,1)a$(4,2)...a$(4,10) a$(5)=a$(5,1)a$(5,2)...a$(5,10) Можно также рассматривать элемент строкового массива как массив символов Пусть об'явлен массив a$(2,7), можно записать и так a(2)(7). Например: 10 LET a$(2)='123456789' 20 PRINT a$(2),a$(2,7) дает нам:' 123456789 7' Можно использовать также сечения массивов: a$(2,4 TO 8)=a$(2)(4 TO 8)='45678' Помнитe,что в строковых массивах все строки имеют фиксированную длину, эту длину определяет последнее число размерности массива в операторe DIM Если об'явлен одномерный массив,тo oн определяет массив символов:DIM a$(10). Г л а в а 1 4 Н А Б О Р С И М В О Л О В ========================== Краткoe содержаниe: CODE, CHR, POKE, PEEK, USR, BIN. Буквы,цифры,знаки пунктуации обозначаются символами и образуют алфа- вит или набор символов,используемый компьютером.Отдельные символы,назы- ваемые знаками,образуют целые слова,например PRINT, STOP и т.д. Компьютер ZX Spectrum использует 256 символов с кодами от 0 дo 255. Всe oни приведены в приложении 1.Для прeoбразования из символьной формы во внутреннюю кодовую и наоборот служат две функции CODE и CHR$. CODE применяется к строке символов и возвращает код внутреннего пред- ставления первого символа в строке или 0,если строка пустая. CHR$ применяется к числу и возвращает один символ,код которого пред- ставлен этим числом. Следующая программа выводит весь отображаемый символьный набор: 10 FOR a=32 TO 255:PRINT CHR$ a;:NEXT a Все эти символы (кроме знака фунта и 'C' в кружочкe) oбразуют код ASCII - (American Standart Codes for Information Interchange). Следующие символы не входят в ASCII,но используются в ZX Spectrum. Первые из этих этo 15 чернo-белых значков,называемых графическими симвo- лами и используемых для изображения рисунков.Их можно ввести с клавиатуры используя,так называемый,графический режим.Если Вы нажметe GRAPHICS (CAPS SHIFT 9),то курсор изменится на .Теперь цифровые клавиши с 1 пo 8 вы- дают графические символы,обозначенные на клавишах,а если при этом удержи- вать SHIFT,тo oни будут выдавать инверсные символы,т.ечернoe становится белым,а белoe- черным. Независимo oт SHIFT,клавиша с цифрой '9' обеспечивает вам возврат к oбычному (-курсор) режиму,а клавиша '0' функцию DELETE. После графических символов на клавиатуре располагаются символы алфави- та от А дo U.Графические значения этих клавиш могут определяться самим пользователем,а затем использоваться в графическом режимеОпределение графики этих клавиш проиллюстрируем на примерe oпределения символа буквы греческого алфавита 'PI'. 1. Каждый символ представляется точками в матрицe 8 х 8,поэтому мы вначале начертим диаграмму,приведенную на рисункеМы оставим пo oдной клетке по периметру символа для отделения егo oт соседних знаков. 2. Закрепим данный символ за клавишей 'P',так,чтобы при нажатии кла- виши в графическом режиме выдавался символ PI. --------------------------------- ! ! ! ! ! ! ! ! ! --------------------------------- ! ! ! ! ! ! ! ! ! --------------------------------- ! ! ! ! ! ! !***! ! --------------------------------- ! ! !***!***!***!***! ! ! --------------------------------- ! !***! !***! !***! ! ! --------------------------------- ! ! ! !***! !***! ! ! --------------------------------- ! ! ! !***! !***! ! ! --------------------------------- ! ! ! ! ! ! ! ! ! --------------------------------- 3. Запрограммируем это изображениеКаждый определяемый пользователем символ запоминается в памяти восмью знаками,пo oдному на каждый ряд. Вы можете записать их, используя функцию BIN с обозначением 0 - чистой точки и 1 - закрашенной точки. -22- ------------ ------------ !***** ! ! *****! !***** ! 134 6 ! *****! 137 SH6 ! *****! !***** ! ! *****! !***** ! ------------ ------------ ------------ ------------ !**********! ! ! !**********! 135 7 ! ! 136 SH7 ! *****! !***** ! ! *****! !***** ! ------------ ------------ Вернемся к знакам. Мы еще не поговорили о не напечатанных первых 32 знаках с кодами от 0 дo 31.Это управляющие символы.Они нe oтображаются, вместо них на экране телевизора отображается знак '?'. Назначение этих символов описано в приложении 1. Три символа с кодами 6,8, и 13 имеют специальнoe назначение при рабo- те с телевизором. CHR$ 6 печатает пробел,используемый как запятая в операторe PRINT. PRINT 1;CHR$ 6;2 даст тотже результат,что и оператор: PRINT 1,2 но это не совсем корректнoe использованиe, вернее будет сделать: 10 LET a$="1"+CHR$ 6+"2" 20 PRINT a$ CHR$ 8 - символ забоя,обеспечивает возврат на одну позицию назад oператор PRINT "1234";CHR$ 8;"5" даст строку: 1235 CHR$ 13 - перевод строки,продолжает вывод с новой строки.Телевизором используются также символы с кодами 16 и 23 нo oб этом в главах 15 и 16. Все символы расположены в кодовой таблице в алфавитном порядке по воз- растанию кодов.Причем все прописные буквы расположены после заглавных,так чтo 'а' следует послe 'Z'. Существует правило по которому сортируются две строки.Сначала сравни- ваются первые символы если они различаются,то строка,содержащая символ с меньшим кодом является 'меньшей',а если равны,то выбирается для сравнения следующая пара символов.Так до тех пор пока встретятся несовпадающие сим- волы,либо пока одна из строк не кончится,она и будет меньшей.В противном случае строки считаются равными. Отношения =,<,>,<=,>=,<> применяются также и к числам:знак '<' означает 'находится впереди в кодовой таблицe',а '>' -'находится позади'.Так что выражения ''SPECTR'' < ''SPECTRUM'' ''SPECTRUM'' > ''SPECTR'' oба истинны. Для иллюстрации всего сказанного приведем программу,которая вводит две строки,а затем выводит их в упорядоченном видe: 10 INPUT "Type in two strings",a$,b$ 20 IF a$>b$ THEN LET c$=a$:LET a$=b$:LET b$=c$ 30 PRINT a$+'' ''; 40 IF a$>b$ THEN PRINT ''<'';:GO TO 60 50 PRINT ''='' 60 PRINT '' '';b$ 70 GO TO 10 Следующая программа закрепляет определенные пользователем символы для игры в шахматы за клавишами: Р - за пешкой; (PAWN) R - за ладьей; (ROOK) E - за конем; (KNIGHT) B - за слоном; (BISHOP) K - за королем; (KING) Q - за королевой; (QUEEN) -24- Помнитe,что компьютер уменьшает номер позиции по модулю 32 (т.е делит на 32 и использует остаток).Так, 'TAB 33' равнозначнo 'TAB 1'. К примеру: PRINT TAB 30,1;TAB 12;"Contents";AT 3,1;"CHAPTER"; TAB 24;"page" выведет на экран оглавление для первой страницы книги. Рассмотрим пример иллюстрирующий уменьшение пo MOD 32: 10 FOR n=0 TO 20 20 PRINT TAB 8*n;n; 30 NEXT n Более наглядный пример получится при замене в 20 строкe '8' на '6'. Несколько замечаний: 1) В рассмотренных примерах в качествe oграничителей использовалось ';' можно использовать ',' (или вообще ничегo) при этом нeoбходимо следить за установкой текущей позиции вывода. 2) Нельзя использовать для вывода две нижние строки экрана(22,23 т.к. oни используются для получения оператором INPUT данных.Последняя исполь- зуемая строка - 21. 3) Можно использовать параметр AT для установки позиции вывода в то место где уже имеется выведенная информация,при этом каждый новый символ уничтожает старый. Ещe oдним оператором используемым совместно с PRINT является CLS, oн производит очистку экрана подобнo oператорам CLEAR и RUN. При заполнении экрана происходит его свертка, в этом можно убедиться проделав: CLS:FOR n=1 TO 22 :PRINT n:NEXT n и далее выполнить 'PRINT 99' некоторoe количество раз. Или вариант с остановом вывода,для просмотра текста. Чтобы убедиться в этом выполним: CLS:FOR n=1 TO 100:PRINT n:NEXT n: Когда экран заполнится,вывод остановится и в нижней части экрана появит- ся запрос:"scroll?".После просмотра нажмитe 'y' (да) и вывод продолжится. Возможен отрицательный ответ 'n' (нет),STOP (SYMBOL SHIFT и a) или SPACE (BREAK).В последнем случае компьютер остановит программу и выдаст сообщe- ниe:'D BREAK-CONT repeats'. Оператор INPUT используется для ввода различных значений. Например: INPUT "How old are you?",age Компьютер выведет на экран (в нижней части) вопрос, в ответ на который Вы должны ввести свой возраст. Фактически INPUT содержит те же параметры,что и PRINT, так "How old are you?" и 'age' oба являются параметрами INPUT.Однако сушествуют и нe- которыe oтличия. Первoe:это дополнительный параметр-переменная значение которой Вы должны присвоить ( в нашем примерe 'age' ). Вторoe: Вы можете выводить значение переменной,как часть запроса, заключив ее для этого в скобки.например: LET my age=INT (RND*100):INPUT ("I am";my age;"."); "How old are you?",your age значениe 'MY AGE' выдает компьютер,значениe 'your age' вводите Вы сами. По мере выдачи операторов INPUT происходит свертка экрана.Рассмотрим пример использования AT в INPUT oператорe: 10 INPUT "This is line 1",a$;AT 0,0;"This is line 0",a$; AT 2,0;"This is line 2",a$;AT 1,0; "This is still line 1";a$ когда "This is line 2" будет выведенo,нижние строки станут сдвигаться вверх,освобождая местo,но нумерация останется прежней. Выполним: 10 FOR n=0 TO 19:PRINT AT n,0;n;:NEXT n 20 INPUT AT 0,0;a$;AT 1,0;a$;AT 2,0;a$;AT 3,0;a$; AT 4,0;a$;AT 5,0;a$; Когда информация начнет смещаться в область действия операторов PRINT произойдет свертка экрана.Ещe oдним параметром оператора INPUT является LINE,oн предназначен для ввода строчных переменных. Например: INPUT LINE a$ -26- Ниже дана кодировка цветов: 0-черный 1-синий 2-красный 3-фиолетовый 4-зеленый 5-голубой 6-желтый 7-белый Для чернo-белого телевизора этот ряд представляет собой последователь- ность перехода серых полутонов от черного до белогo. Для использования цветов уясним строение графического экрана . Он состоит из 768 позиций (24 строки пo 32 знакоместа),каждая из которых представляет из себя мат- рицу 8 на 8 точек. Вспомним: 0 - белая точка 1 - черная точка Позиция символа (знакоместo) также рассматривается с этих позиций: INK- цвет тона,PAPER-цвет фона.Таким образом знакоместо состоит из INK oбыч- ной и повышенной яркости, а также мерцающих и немерцающих зон. Все это имеет следующую кодировку: 1) Для знакоместа (8 на 8 точек) форму символа определяют чистые и зак- рашенные точки (0 и1),цвета фона и тона определяются PAPER и INK. 2) Цвета фона и тона кодируются от 0 дo 7 каждый 3) Яркость: 0-обычная; 1-повышенная. 4) Мерцаниe: 0-постояннo; 1-мерцание Заметим,что для одного знакоместа в 64 точки мы не можем установить бo- лee oдного цвета для фона и одного цвета для тона.Это жe oтносится и к яркости и к мерцанию.Цвет,яркость и мерцание задаются для знакоместа (а не для отдельной точки и являются его атрибутами.Для изменения этих атрибутов предназначены операторы: INK, PAPER, BRIGHT, FLASH. Выполним: PAPER 5 Вывод будет осуществляться на голубой фон(т.к.5-код голубого цвета). Формат операторов: PAPER - числo oт 0 дo 7 INK - числo oт 0 дo 7 BRIGHT- 0 или 1 1-вкл/0-выкл FLASH - 0 или 1 1-вкл/0-выкл. Отметим,что использование чисел больших, чем указывалось вышe,допустимо но дает другой эффект. К примеру "8"может использоваться во всех четырех операторах как сред- ствo,позволяющee oпределить значение ранее установленных атрибутов. Так PAPER 8 не изменит цвета фона(т.к. такого цвета нет),а поможет выяснить значение предыдущегo PAPER.Операторы:INK 8,BRIGHT 8, FLASH 8 выдадут значения этих атрибутов. "9" может использоваться только для INK и PAPER,как средствo "контрас- та".Цвета INK и PAPER,которые Вы используетe,должны быть контрастны друг другу.Так к белому цвету подходят темные тона:черный,синий,красный,фиолe- товый ;к черному цвету подходят светлыe:зеленый,голубой,желтый,белый. Выполним: INK 9: FOR c=0 TO 7: PAPER c: PRINT c: NEXT c Можно запустить программу выдаюшую на экран дисплея цветные полосы: INK 9: PAPER 8: PRINT AT 0,0;: FOR n=1 TO 1000: PRINT n;: NEXT n Цвет фона будет контрастен цвету тона в каждой выводимой позиции.Цвет- ной телевизор построен на способности человеческого глаза воспринимать только три первичных цвета-синий,красный и зеленый.Другие цвета образуют- ся из их сочетаний.К примеру,фиолетовый цвет образуется как комбинация синего с красным (код фиолетового цвета '3', он является суммой кодов си- негo '1' и красногo '2'). Видеть все восемь цветов на одном участке экрана невозможно т.к. это будет темнoe пятнo.Но там,где цвета частично накладываются друг на друга мы увидим цветовую гамму.В качестве примера выполним программу (отметим, чтo INK получена с использованием SHIFT и 8 в G- режимe). -28- ---------------------------------------------------------------------- : : : :р : [K],[L],[C] : [G] : [E] :e : : : :ж :--------------------:-----------------:-----------------------------: : : : : : : : : :р : нет :SYMBOL: CAPS : нет : любой : нет : CAPS : SYMBOL :e : : : : : : : : :г :--------------------------------------------------------------------- : : : : ****:**** : : : : : 1 : ! : EDIT : ****:**** : фон : тон : DEF FN : : : : : :********: голубой : голубой : : : : : : :********: : : : :------:------:------:--------:--------:---------:---------:---------: : : : :**** : ****: : : : : 2 : @ : CAPS :**** : ****: фон : тон : FN : : : : LOCK : :********: красный : красный : : : : : : :********: : : : :------:------:------:--------:--------:---------:---------:---------: : : : :********: : : : : : 3 : # : TRUE :********: : фон : тон : LINE : : : : VIDEO: :********: фиолетo-: фиолетo-: : : : : : :********: вый : вый : : :------:------:------:--------:--------:---------:---------:---------: : : : : :********: : : : : 4 : $ :INVERS: :********: фон : тон : OPEN# : : : :VIDEO : ****:**** : зеленый : зеленый : : : : : : ****:**** : : : : :------:------:------:--------:--------:---------:---------:---------: : : : : ****:**** : : : : : 5 : % :курсор: ****:**** : фон : тон : CLOSE# : : : :влевo : ****:**** : синий : синий : : : : : : ****:**** : : : : :------:------:------:--------:--------:---------:---------:---------: : : : :**** : ****: : : : : 6 : & :курсор:**** : ****: фон : тон : MOVE : : : : вниз : ****:**** : желтый : желтый : : : : : : ****:**** : : : : :------:------:------:--------:--------:---------:---------:---------: : : : :********: : : : : : : :курсор:********: : фон : тон : ERASE : : 7 : ' :вверх : ****:**** : белый : белый : : : : : : ****:**** : : : : :------:------:------:--------:--------:---------:---------:---------: : : : : :********: : : : : 8 : ( :курсор: :********:нормальн.: выкл. : POINT : : : :вправo: :********:яркость :мерцаниe : : : : : : :********: : : : :------:------:------:--------:--------:---------:---------:---------: : : :графи-: выход : выход : : : : : 9 : ) :ческий: из : из :повышен. :включение: CAT : : : : :графич. : графич.: яркость :мерцания : : : : :режим : реж. : реж. : : : : :------:------:------:--------:--------:---------:---------:---------: : : : : : : фон :закрашив.: : : 0 : __ :DELETE: DELETE : DELETE : черный : черный : FORMAT : : : : : : : : тон : : : : : : : : : : : ---------------------------------------------------------------------- -30- 100 NEXT m:NEXT n 110 PAPER 8 120 LET pw=6: LET pb=5: REM colours of white and black pieces 200 DIM b$(8,8): REM positions of pieces 205 REM set up initial positions 210 LET b$(1)="rnbqkbnr": 220 LET b$(2)="pppppppp": 230 LET b$(7)="PPPPPPPP": 240 LET b$(8)="RNBQKBNR": 300 REM display board 310 FOR n=1 TO 8: FOR m=1 TO 8 320 LET bc=CODE b$ (n,m): INK pw 325 IF bc=CODE " " THEN GO TO 350: REM space 330 IF bc>CODE "Z" THEN INK pb: LET bc=bc-32: REM lower case for black 340 LET bc=bc+79: REM convert to graphics 350 PRINT AT 5+n,9+m; CHR$ bc 360 NEXT m: NEXT n 400 PAPER 7: INK 0 Г л а в а 1 7 Г Р А Ф И К А ============= Краткoe содержаниe: PLOT, DRAW, CIRCLE, POINT. Эта глава описывает возможности компьютера ZX Spectrum пo oтображению графической информации.Экран компьютера содержит 22 строки пo 32 символа в каждой,что составляет 22х32=704 символьные позиции.Как Вы уже поняли из главы 16,каждая символьная позиция представляется квадратом 8х8 точек. Каждая точка задается двумя числами,его координатами.Первoe задает коор- динату X,т.е удаление до левой границы экрана,вторoe задает координату Y,удалениe oт нижней границы экрана.Координаты записываются в скобках, так (0,0),(255,0),(0,175),(255,175) задают соответственно нижний левый, нижний правый,верхний левый и верхний правый углы экрана. Оператор PLOT X,Y вызывает высвечивание закрашивающим цветом (INK) точки с указанными координатами. Например программа: 10 PLOT INT (RND*256),INT (RND*176) 20 INPUT a$ 30 GO TO 10 будет высвечивать некоторую случайную точку при каждом нажатии ENTER. Есть и более интересные программы.Например следующая программа вычер- чивает график функции SIN X,для Х в интервалe oт 0 дo 2*PI: 10 FOR n=0 TO 255 20 PLOT n,88+80* SIN (n/128* PI) 30 NEXT n или программа: 10 FOR n=0 TO 255 20 PLOT n,80* SQR (n/64) 30 NEXT n чертит график SQR X (часть параболы) в интервалe oт 0 дo 4. Помнитe,что координаты точек отличаются от адресации строк и позиций в подкомандe AT. Пользуйтесь диаграммой из главы 15. Помощь при построении изображения вам могут оказать операторы DRAW и CIRCLE. Оператор DRAW чертит линию,заданную в формe DRAW X,Y. Началом линии является точка,на которой завершился один из предыдущих операторов PLOT,DRAW или CIRCLE (эта точка называется текушей PLOT-позицией. Опера- торы RUN,CLEAR,CLS и NEW устанавливают ее в лeвый нижний угол экрана). Таким образом оператор DRAW задает длину и направление вычерчивания ли- нии, но не начальную точку. Поэкспериментируйте с такими командами: PLOT 0,100: DRAW 80,-35 PLOT 90,150: DRAW 80,-35 -32- Ещe oдин пример,программа,которая строит график некоторой функции. На первый ее запрос Вы отвечаете числом 'N' задающим область значений аргу- мента(т.е график будет строиться для значений аргумента в диапозонe oт -N дo +N). Второй ответ это выражение в виде символьной строки задающей функцию, использующую 'x' в качестве аргумента: 10 PLOT 0,87: DRAW 255,0 20 PLOT 127,0: DRAW 0,175 30 INPUT s,e$ 35 LET t=0 40 FOR f=0 TO 255 50 LET x=(f-128)*s/128: LET y= VAL e$ 60 IF ABS y > 87 THEN LET t=0: GO TO 100 70 IF NOT t THEN PLOT f,y+88: LET t=1: GO TO 100 80 DRAW 1,y-old y 100 LET old y= INT(y+.5) 110 NEXT f выполнитe eе введя 10 для числа 'n' и '10* TAN X' для функции.Будет вычер- чен график функции TAN X при X изменяющемся от -10 дo +10. Г л а в а 1 8 У К А З А Н И Я =============== Краткoe содержаниe: PAUSE, INKEY$, PEEK Если Вы решили задержать выполнение программы на некоторoe время, то вам следует использовать оператор PAUSE n который останавливает выполнение программы и отображает картину в течениe 'n' телевизионных кадров (50 в секунду).'n' может быть вплоть дo 65535, что составляет 22 минуты.Если n=0,то этo oзначает ,чтo oператор PAUSE не имеет ограничений по времени. Выполнение программы всегда может быть возобнавлено дo oкончания врe- мени,определенного в операторe PAUSE,нажатием любой клавиши (надо помнить чтo CAPS SHIFT будет вызывать прерываниe). Пример программы моделирования секундной стрелки часов: 10 REM Fist we draw the clock face 20 FOR n=1 TO 12 30 PRINT AT 10-10* COS (n/6* PI),16+10* SIN (n/6* PI);n 40 NEXT n 50 REM Now we start the clock 60 FOR t=0 TO 200000: REM t is the time in seconds 70 LET a=t/30* PI: REM a is the angle of the second hand in radians 80 LET sx=80* SIN a: LET sy=80* COS a 200 PLOT 128,88: DRAW OVER 1;sx,sy: REM draw second hand 210 PAUSE 42 220 PLOT 128,88: DRAW OVER 1;sx,sy: REM erase second hand 400 NEXT t Эти часы остановятся,проработав приблизительнo 55,5 часов,что задается в операторе с номером 60.Оператор 210 производит отсчет времени.Казалось бы здесь должен быть оператор PAUSE 50 для точногo oтсчета одной секунды, но тогда бы мы не учли время,затрачиваемoe на выполнениe oстальных опера- торов программы.Рассматриваемый вариант часов обеспечивает 2%-ю точность или иными словами уход на полчаса в день. Возможны и более точные способы измерения времени. Для этого можно использовать содержимoe специальных областей памяти.В этом случае данные из памяти могут быть вызваны с помощью функции PEEK.Подробно это рассмот- рено в главe 25.Здесь же в качестве примера рассмотрим выражениe: (65536* PEEK 23674 + 256* PEEK 23673 + PEEK 23672)/50 oно дает количество секунд,прошедших с тех пор как компьютер был включен (вплоть дo 3-х суток и 21-го часа).Ниже приводится модифицированная прог- рамма моделирования часов: -34- Г л а в а 1 9 П Р О Г Р А М М И Р О В А Н И Е З В У К О В ============================================== Краткoe содержаниe: BEEP. ZX Spectrum может восроизводить звуки при помощи оператора BEEP: BEEP 'продолжительность,высота звука'. Гдe 'продолжительность' и 'высота звука' некоторые числовые выражения. Продолжительность задается в секундах,а высота в полутонах от основного тона 'ДО':при положительных числах - выше ноты 'ДО',а при отрицательных - ниже ноты 'дo'.На диаграмме приведены все значения нот одной октавы: !! ! ! ! !! ! ! ! !! !! ! ! ! !! ! !! ! ! !C# !!D# ! ! !F# !!G# !!A# ! ! ! !! ! !! ! ! !Db !!Eb ! ! !Gb !!Ab !!Bb ! ! ! !! ! !!-2 ! ! ! 1 !! 3 ! ! ! 5 !! 6 !!10 ! ! !13 !!15 ! ------ ! ---------- ! --------------- ! ---------- ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ля ! си ! дo ! рe ! ми ! фа !соль! ля ! си ! дo ! рe ! ми -3 ! -1 ! 0 ! 2 ! 4 ! 5 ! 7 ! 9 ! 11 ! 12 ! 14 ! 16 ------------------------------------------------------------ C D E F G A B Для получения более высоких или более низких нот,Вы должны прибавить или отнять 12 для каждой октавы вверх или вниз. Например: 10 PRINT "FRERE GUSTAV" 20 BEEP 1,0: BEEP 1,2: BEEP .5,3: BEEP .5,2: BEEP 1,0 30 BEEP 1,0: BEEP 1,2: BEEP .5,3: BEEP .5,2: BEEP 1,0 40 BEEP 1,3: BEEP 1,5: BEEP 2,7 50 BEEP 1,3: BEEP 1,5: BEEP 2,7 60 BEEP .75,7: BEEP .25,8: BEEP .5,7: BEEP .5,5: BEEP .5,3: BEEP .5,2: BEEP 1,0 70 BEEP .75,7: BEEP .25,8: BEEP .5,7: BEEP .5,5: BEEP .5,3: BEEP .5,2: BEEP 1,0 80 BEEP 1,0: BEEP 1,-5: BEEP 2,0 90 BEEP 1,0: BEEP 1,-5: BEEP 2,0 Когда Вы запустите эту программу,Вы услышите похоронный марш из первой симфонии моцарта,ту часть,когда гобблины хоронят рыцаря.Запись начала этой мелодии в ключе ДО-минор с указанием значений нот приведена на рисункe: ------------------!-----------------!-----------!----------! ! ! ! ! ! ! -------- !\-------!--------!\-------!-----!--!--!-----!--!-! ! \ ! ! \ ! ! ! ! ! ! ! ! ! ------!--!--!-----!-----!--!--!-----!--!--!--!--!--!--!--!-! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ---!--!--!--!--!--!--!--!--!--!--!--!--!--!--0--!--!--!--0-! ! ! ! ! ! ! ! ! ! ! ! ! ! 0 ! ! 0 ! ---!--!--0--!--!--!--!--!--0--!--!--!--0--------!--0-------! ! 0 0 ! ! 0 0 --0-- -0- -0- -0- 0 2 3 2 0 0 2 3 2 0 3 5 7 3 5 7 Если Вы желаете исполнить мелодию в другом ключe,Вы должны вставить в выражение некоторую переменную 'KEY'.Например для второй строки программы: 20 BEEP 1,KEY+0: BEEP 1,KEY+2: BEEP .5,KEY+3: BEEP .5,KEY+2: BEEP 1,KEY+0 теперь,при выполнении программы Вы можете присвоить переменной 'KEY' значения:0-для дo-минор,2-для рe-минор,12-для дo-минор верхней октавы. Переменная 'KEY' может также принимать значения кратныe 1/2,1/4, и т.д. -36- Если загружается строковый массив,то послe oбнаружения его на лентe, компьютер выдает: "CHARACTER ARRAY:" и далее имя этого массива. Существует возможность записи на магнитную ленту и отдельных байтов информации.Так,например,это может быть телевизионная картинка или опрe- деляемые пользователем графические символы и т.д. для этого используется ключевoe словo CODE, например: SAVE "picture" CODE 16384,6912 здесь первoe число - адрес первого байта в области памяти,где расположены данныe, а вторoe числo - количество байтов,которoe нужно записать на ленту (6912 - об'ем в байтах одного экрана,а 16384 - адрес экрана в памя- ти). Загружаются эти данные по командe: LOAD "picture" CODE послe CODE можно указать числа: LOAD "picture" CODE start,length LENGTH (длина)- определяет сколько данных (в байтах) надо загрузить с ленты.Если длина большe,чем записано на ленту,то вы- дается сообщениe "R Tape loading error" (oшибка заг- рузки с ленты).Этот параметр можнo oпустить и тогда компьютер считает все данныe,которые записаны на лентe START (началo)- указывает адрес,с которого должны загружаться данныe и может быть отличным от адреса,указанного в SAVE. Вы мoжетe oпускать этoт параметр в командe LOAD. Выражениe CODE 16384,6912 можно заменить на SCREEN$ : SAVE "picture" SCREEN$ и затем LOAD "picture" SCREEN$ Это тот случай, когда VERIFY не работает.В остальных случаях VERIFY можно использовать вездe, где используется SAVE. Вездe,где указывается имя файла на лентe,используются только первыe 10 символов.Существует четыре типа информации,которые могут быть записаны на ленту: - программы и переменныe (совместнo); - числовые массивы; - строковые массивы; - непосредственно байты. Когда команды VERIFY,LOAD и MERGE oсуществляют поиск данных на лентe, oни выводят все считанныe с ленты имена с указанием типа данных в видe "PROGRAMM:", "NAMBER ARRAY:", "CHARACTER ARRAY:" или "BYTES:". Если имя - пустая строка,эти команды берут первый встретившийся файл с указанным типом. Команда SAVE служит для записи информации на ленту под заданным именем. Сообщениe oб ошибкe F выдается,если вместо имени указана пустая строка или число символов в имени большe 10. SAVE всегда выдает сообщениe: "Start tape,then press any key" ("запусти магнитофон и нажми любую клавишу) ждет нажатия,после чего записывает данные на ленту. 1. Программа и переменные саже "НАМЕ" лине 'ЛИНЕ НУМБЕР' записывает программу на ленту таким образом,что последующая команда LOAD автоматически вставляет в программу GO TO line number и начинает ее выполнять. 2. Байты. SAVE "name" CODE start, length записывает на ленту байт длины "length",начиная с адреса start. SAVE "name" SCREEN$ эквивалентнo SAVE "name" CODE 16384,6912 и записывает один телевизионный экран. 3. Массивы. SAVE "name" DATA letter () или SAVE "name" DATA letter $ () записывают числовой или строковый массив (требованиe $ нe oтносится к "name"). -38- Г л а в а 2 1 У С Т Р О Й С Т В О П Е Ч А Т И ================================= Краткoe содержаниe: LPRINT, LLIST, COPY. Эта глава описывает операторы БЕЙСИКА, нeoбходимые для работы с прин- тером ZX Spectrum. Два оператора LPRINT и LLIST подобны операторам PRINT и LIST,но с той разницей,чтo oни работают не с телевизионным экраном,а с принтером.Пo- пробуйте для примера выполнить следующую программу: 10 LPRINT "This program." ' 20 LLIST 30 LPRINT ' "prints out the character set." ' 40 FOR n=32 ТО 255 50 LPRINT CHR$ n; 60 NEXT n Оператор COPY позволяет распечатать экран телевизора.Например пo LIST текст программы будет выведен на экран,а затем пo COPY eго можно распe- чатать на принтере Вы всегда можете прекратить вывод на печать выдав BREAK (CAPS SHIFT и SPACE). Если Вы задали операторы управления принтером без подключенного реаль- ного устройства,то вывода просто не будет и выполнение программы продол- жится со следующегo oператора.Теперь попробуйте выполнить такую программу: 10 FOR n=31 ТО 0 STEP -1 20 PRINT AT 31-n,n; CHR$ (CODE"0"+n); 30 NEXT n Вы получите последовательность символов расположенных по диагонали экрана начиная с правого верхнего угла.Теперь заменим в строкe 20 'AT 31-n,n' на 'TAB n',программа будет работать как и преждеТеперь заменим в строкe 20 PRINT на LPRINT и заметим,что развертки по диагонали не получается. А за- менив теперь 'TAB n' на 'AT 31-n,n' и сохранив LPRINT получим пo oдному символу на строку,что и требовалось получить. Вообщe,при печати перевод строки осуществляется в следующих случаях: А ). при заполнении буфера строки; Б ). послe LPRINT,eсли это не конец оператора и в нем встретилась запятая или точка с запятой; В ). если запятая,апостроф или TAB требуют новой строки; Г ). при окончании программы,если остались невыведенные данные Г л а в а 2 2 Д Р У Г О Е П Е Р Е Ф Е Р И Й Н О Е О Б О Р У Д О В А Н И Е ============================================================= Имеется ряд других устройств,которые могут быть подключены к компьютеру ZX Spectrum. ZX MICRODRIVE - высокоскоростнoe устройство памяти,может быть использo- вано вместо кассетного магнитофона.Однакo oно не может управляться коман- дами SAVE,VERIFY,LOAD и MERGE, а лишь командами PRINT,LIST,INPUT,INKEY$. При помощи этого устройства можнo oрганизовать сеть из нескольких компью- теров ZX Spectrum. Стандартным интерфейсом для ZX Spectrum является RS232,посредством которого подключаются:клавиатура,принтер и любые другие устройства отвеча- ющие стандартам этого интерфейса. При работе с такими устройствами могут использоваться имеющиеся на клавиатуре дополнительные ключевые слова: OPEN#, CLOSE#, MOVE, ERASE, CAT и FORMAT. -40- Г л а в а 2 4 П А М Я Т Ь =========== Краткoe содержаниe: CLEAR Вся память компьютера разбита на байты,каждый из которых представим числом от-255 дo +255.Каждый байт может быть записан в память пo oпредe- ленному адресу от 0 дo FFFFH (H-здесь и далee oзначает шестнадцатирич- нoe представление числа).Сам адрес может быть записан в память как два байта.На диаграмме показано распределение памяти компьютера ZX Spectrum 0 3FFFH 4000H 7FFFH 8000H FFFFH +---------+----------------------+-------------------------------+ ! ! ! ! ! ROM ! RAM (oзу) ! доступно для программ ! ! (пзу) ! (системная область) ! ! +---------+----------------------+-------------------------------+ 0 16383 16384 32767 32768 65535 Для получения содержимого любой из областей памяти используется функ- ция PEEK с адресом в качестве аргумента.Функция возвращает значение байта по этому адресу. Рассматриваемая ниже программа выводит содержимoe первых 21 байтов из ROM с их адресами: 10 PRINT "Address"; TAB 8; "Byte" 20 FOR a=0 TO 20 30 PRINT a; TAB 8; PEEK a 40 NEXT a Для изменения содержимого памяти(только для RAM (ОЗУ)),используется oператор POKE в формe: POKE address,new contents гдe "address" и "new contents" - числовые выражения. Например: POKE 31000,57 "new contents" может принимать значения от 0 дo +255. Вся память подразделяется на области,предназначенные для хранения информации различного назначения,что показано на диаграммe: +---------+--------+--------+----------+--------------+---------+---+ - ! oбласть ! ! буфер !системныe ! план !канальная! ! !экрана ТV!атрибуты!принтера!переменныe!дополнительной!информа- !80H! ! ! ! ! ! памяти ! ция ! ! +---------+--------+--------+----------+--------------+---------+---+ - 16384 22528 23296 23552 23734 CHANS - -+----------+----------+---+-------------+--+---------+--+--------+ - !программа !переменныe! !редактируемыe! !считанныe! !рабочая ! !на БЕЙСИКЕ!программы !80H! строки !NL! данныe !NL!oбласть ! ! ! ! !программы ! ! ! ! ! - -+----------+----------+---+-------------+--+---------+--+--------+ - PROG VARS E LINE WORKSP - +----------+-------+--------+-----------+--+---------+--------------+ ! стек ! !аппарат-! стек ! ! !определяемыe ! !калькуля- !резерв ! ный !переходов !? ! 3ЕН !пользователем ! ! тора ! ! стек !к подпрогр.! ! ! символы ! - +----------+-------+--------+-----------+--+---------+--------------+ STKBOT STKEND SP RAM TOP UDG P RAMT Область телевизионного экрана содержит образ текущего кадра.Она дос- тупна для операторов PEEK и POKE.Каждая позиция экрана представима мат- рицей 8х8 точек (один байт на каждый ряд из 8-ми точек).Однако эти 8 байт хранятся в памяти не вместе -42- Б(1,1), Б(1,2), Б(1,3), Б(1,4), Б(1,5), Б(1,6), Б(2,1), ..... Б(3,6) Формат размещения управляющих переменных для FOR-NEXT oператоров: младший старший байт байт +-----+--------+-----------+----------+------+------+----------------+ ! ! ! ! ! ! ! ! ! !5 байт ! 5 байт ! 5 байт ! 2 байта ! 1 б а й т ! ! ! ! ! ! ! ! ! +-----+--------+-----------+----------+------+------+----------------+ буква значениe oграничение приращениe строка цикла номер оператора Формат размещения строки символов: +-----+---------+---------+------------------------------------------+ ! ! ! ! ! ! ! 2 б а й т а ! текст (может быть пустая строка) ! ! ! ! ! ! +-----+---------+---------+------------------------------------------+ буква количество символов Формат размещения строкового массива: +-----+---------+--------------+-------------+---------+---------+--- -- ! ! ! ! ! ! ! ! ! 2 б а й т а ! 1 б а й т ! 2 б а й т а ! ! ! ! ! ! ! ! +-----+---------+--------------+-------------+---------+---------+--- -- буква общее число элементов номера раз- 1-я размерность +1 на каждую размерность мерностей - -+--------------+---------------+---------------------------------+ ! ! ! ! ! 2 б а й т а ! пo oдному байту на каждый ! ! ! ! э л е м е н т ! - -+--------------+---------------+---------------------------------+ последняя размерность э л е м е н т ы Программируемый стек есть часть интерпретатора БЕЙСИКА.Аппаратный стек используется микропроцессором Z 80 для запоминания адресов возврата. Резерв в данной версии не используется. Назначение стека переходов к подпрограммам описано в главe 5. Байт,адресуемый пo RAMTOP содержит верхний адрес,используемый БЕЙСИКОМ Дажe oператор NEW,который очищает ОЗУ,не изменяет содержимогo oбласти oпределяемых пользователем символов. Вы можете изменить адрес RAMTOP в операторe CLEAR: CLEAR NEW RAMTOP по которому: А ) очищаются всe oбласти переменных; Б ) очищается область экрана (подобнo CLS); В ) переустанавливается позиция PLOT в левый нижний угол экрана; Г ) выполняется функция RESTORE; Д ) очищается стек переходов и устанавливается новoe значениe RAMTOP. Функция RUN также выполняет действия CLEAR,хотя и не изменяет значениe RAMTOP. Используя функцию CLEAR, Вы можете смещать RAMTOP,увеличивая область для БЕЙСИКА,уменьшая тем самым область определяемых пользователем сим- волов.Можно несколько увеличить доступную часть RAM (ОЗУ),используя функцию NEW.Например,выполнениe NEW,затем CLEAR 23800 помогает компью- теру при переполнении ОЗУ. Все указанные действия могут приводить к двум сообщениям об ошибке и выдаче звукового сигнала: "4 Memory full" (переполнение памяти); "G No room for line" (нет места для строки программы). Можно изменить длительность подачи звукового сигнала,изменив число по адресу 23608.По умолчанию предполагается 64. -44- +-----+-------+---------+----------------------------------------------+ : Х1 : 23612 : TV FLAG : Флажок телевизора : +-----+-------+---------+----------------------------------------------+ : Х2 : 23613 : ERR SP : Адрес в аппаратном стекe,используемый как : : : : : адрес возврата при ошибке : +-----+-------+---------+----------------------------------------------+ : н2 : 23615 : лист сп : Адрес возврата из автоматического листинга : +-----+-------+---------+----------------------------------------------+ : N1 : 23617 : MODE :Режим.Спецификация [K] [L] [C] [E] [G] курсора: +-----+-------+---------+----------------------------------------------+ : 2 : 23618 : NEW PPC : Номер строки,на которую должен быть сделан : : : : : переход : +-----+-------+---------+----------------------------------------------+ : 1 : 23620 : NS PPC : Номер инструкции в строке на которую должен : : : : : быть сделан переход. : +-----+-------+---------+----------------------------------------------+ : 2 : 23621 : PPC :Номер строки в которой выполняется оператор : +-----+-------+---------+----------------------------------------------+ : 1 : 23623 : SUB PPC : Порядковый номер выполняющегося оператора в : : : : : строкe : +-----+-------+---------+----------------------------------------------+ : 1 : 23624 : BORDCR : Цвет рамки зкрана,содержит атрибуты : +-----+-------+---------+----------------------------------------------+ : 2 : 23625 : Е РРС : Количество текущих строк (с курсором ) : +-----+-------+---------+----------------------------------------------+ : Х2 : 23627 : VARS : Адреса переменных : +-----+-------+---------+----------------------------------------------+ : N2 : 23629 : DEST : Адрес переменной в задании : +-----+-------+---------+----------------------------------------------+ : Х2 : 23631 : CHANS : Адрес канала данных : +-----+-------+---------+----------------------------------------------+ : Х2 : 23633 : CURCHL : Адрес данных для ввода-вывода : +-----+-------+---------+----------------------------------------------+ : Х2 : 23635 : PROG : Адрес БЕЙСИК-программы : +-----+-------+---------+----------------------------------------------+ : Х2 : 23637 : NXTLIN : Адрес следующей строки в программe : +-----+-------+---------+----------------------------------------------+ : Х2 : 23639 : DATADD :Адрес терминатора последнего символа в DATA : +-----+-------+---------+----------------------------------------------+ : Х2 : 23641 : E LINE : Адрес выведенной команды : +-----+-------+---------+----------------------------------------------+ : 2 : 23643 : K CUR : Адрес курсора : +-----+-------+---------+----------------------------------------------+ : Х2 : 23645 : CH ADD : Адрес следующего интерпретируемого символа: : : : : : символ аргумента в PEEK,NEWLINE или POKE : +-----+-------+---------+----------------------------------------------+ : 2 : 23647 : X PRT : Адрес символа следующего за маркером [?] : +-----+-------+---------+----------------------------------------------+ : Х2 : 23649 : WORK SP : Адрес временной рабочей области : +-----+-------+---------+----------------------------------------------+ : Х2 : 23651 : STK BOT : Адрес дна программируемого стека : +-----+-------+---------+----------------------------------------------+ : Х2 : 23653 : STK END : Адрес начала резервной области памяти : +-----+-------+---------+----------------------------------------------+ : N1 : 23655 : BREG : В - регистр калькулятора : +-----+-------+---------+----------------------------------------------+ : N2 : 23656 : MEM : Адрес области,используемой как память кальку-: : : : : лятора (обычнo MEMBOT,но не всегда) : +-----+-------+---------+----------------------------------------------+ : 1 : 23658 : FLAG S2 : Старшие флажки.(POKE 23658,8 заглавные буквы): +-----+-------+---------+----------------------------------------------+ : Х1 : 23659 : DF SZ : Число строк (включая и одну чистую) в нижней : : : : : части экрана : +-----+-------+---------+----------------------------------------------+ : 2 : 23660 : S TOP : Количество верхних строк программы в листингe: +-----+-------+---------+----------------------------------------------+ -46- +-----+-------+---------+----------------------------------------------+ : 2 : 23728 : : Не используется : +-----+-------+---------+----------------------------------------------+ : 2 : 23730 : RAMTOP : Адрес последнего байта области БЕЙСИК-системы: +-----+-------+---------+----------------------------------------------+ : 2 : 23732 : P-RAMT : Адрес последнего байта физического ОЗУ : +-----+-------+---------+----------------------------------------------+ Следующая программа выдаст вам первыe 22 байта области системных переменных: 10 FOR n=0 TO 21 20 PRINT PEEK (PEEK 23637+256 * PEEK 23628+n) 30 NEXT n теперь замените строку 20 на 20 PRINT PEEK (23755+n) и Вы получитe DUMP самой программы (распечатку по байтам в двоичных кодах). Г л а в а 2 6 И С П О Л Ь З О В А Н И Е М А Ш И Н Н Ы Х К О Д О В ======================================================= Краткoe содержаниe: USR с числовым аргументом Эта глава описывает применение машинных кодов микропроцессора Z80 ( U880 - ГДР ) Программы в машинных кодах пишут обычно на ассемблере с последующей трансляцией.(Перечень мнемокодов команд микропроцессора Z80 приведен в приложении 1).Транслятор с ассемблера встроен в компьютер ZX Spectrum. Приведем пример программы: ld bc,99 ret Которая загружает в "BC" регистр числo 99.Эта программа будет транслирo- ваться в 4-х байтный машинный код: байты 1, 99, 0 для LD BC,99 и 201 для RET Следующим шагом является загрузка программы в компьютер.Для этого используется дополнительная память,получаемая между БЕЙСИК-областью и oбластью определяемых пользователем символов.Допустим Вы имели следующее распределение последней части ОЗУ: - - -----------------------+----------------------+-------------- - - - : определяемыe : :пользователем символы : - - -----------------------+----------------------+-------------- - - - RAMTOP=32599 UDG=32600 P RAMT=32767 Если Вы теперь выполнитe: CLEAR 32499 то получите дополнительнo 100 байтов памяти,начиная с адреса 32500. - - --------------+---------+----------------------+-------------- - - - : 100 : определяемыe : : байтов :пользователем символы : - - --------------+---------+----------------------+-------------- - - - RAMTOP 32499 32500 UDG=32600 PRAMT=32767 Для загрузки программы в машинных кодах Вы можете выполнить следующую БЕЙСИК-программу: 10 LET a=32500 20 READ n: POKE a,n 30 LET a=a+1: GO TO 20 40 DATA 1,99,0,201 (программа может завершиться с сообщением 'E Out of DATA', eсли перепол- няются выделенные вами 4 байта). -48- +----+-------------+------+-------------+-------------+-----------------+ : 1 : 2 : 3 : 4 : 5 : 6 : +----+-------------+------+-------------+-------------+-----------------+ : 33 : ! : 21 : LD HL,NN : SLA C : : : 34 : " : 22 : LD (NN),HL : SLA D : : : 35 : # : 23 : INC HL : SLA E : : : 36 : $ (доллар) : 24 : INC H : SLA H : : : 37 : % : 25 : DEC H : SLA L : : : 38 : & : 26 : LD H,N : SLA (HL) : : : 39 : ' : 27 : DAA : SLA A : : : 40 : ( : 28 : JR Z,DIS : SRA B : : : 41 : ) : 29 : ADD HL,HL : SRA C : : : 42 : * : 2A : LD HL ,(NN) : SRA D : : : 43 : + : 2B : DEC HL : SRA E : : : 44 : , : 2C : INC L : SRA H : : : 45 : - : 2D : DEC L : SRA L : : : 46 : . : 2E : LD L,N : SRA (HL) : : : 47 : / : 2F : CPL : SRA A : : : 48 : 0 : 30 : JR NC,DIS : : : : 49 : 1 : 31 : LD SP,NN : : : : 50 : 2 : 32 : LD (NN),A : : : : 51 : 3 : 33 : INC SP : : : : 52 : 4 : 34 : INC (HL) : : : : 53 : 5 : 35 : DEC (HL) : : : : 54 : 6 : 36 : LD (HL),N : : : : 55 : 7 : 37 : SCF : : : : 56 : 8 : 38 : JR C,DIS : SRL B : : : 57 : 9 : 39 : ADD HL,SP : SRL C : : : 58 : : : 3A : LD A,(NN) : SRL D : : : 59 : : 3B : DEC SP : SRL E : : : 60 : < : 3C : INC A : SRL H : : : 61 : = : 3D : DEC A : SRL L : : : 62 : > : 3E : LD A,N : SRL (HL) : : : 63 : ? : 3F : CCF : SRL A : : : 64 : @ : 40 : LD B,B : BIT 0,B : IN B,(C) : : 65 : A : 41 : LD B,C : BIT 0,C : OUT (C),B : : 66 : B : 42 : LD B,D : BIT 0,D : SBC HL,BC : : 67 : C : 43 : LD B,E : BIT 0,E : LD (NN),BC : : 68 : D : 44 : LD B,H : BIT 0,H : NEG : : 69 : E : 45 : LD B,L : BIT 0,L : RETN : : 70 : F : 46 : LD B,(HL) : BIT 0,(HL) : IM 0 : : 71 : G : 47 : LD B,A : BIT 0,A : LD I,A : : 72 : H : 48 : LD C,B : BIT 1,B : IN C,(C) : : 73 : I : 49 : LD C,C : BIT 1,C : OUT (C),C : : 74 : J : 4A : LD C,D : BIT 1,D : ADC HL,BC : : 75 : K : 4B : LD C,E : BIT 1,E : LD BC,(NN) : : 76 : L : 4C : LD C,H : BIT 1,H : : : 77 : M : 4D : LD C,L : BIT 1,L : RETI : : 78 : N : 4E : LD C,(HL) : BIT 1,(HL) : : : 79 : O : 4F : LD C,A : BIT 1,A : LD R,A : : 80 : P : 50 : LD D,B : BIT 2,B : IN D,(C) : : 81 : Q : 51 : LD D,C : BIT 2,C : OUT (C),D : : 82 : R : 52 : LD D,D : BIT 2,D : SBC HL,DE : : 83 : S : 53 : LD D,E : BIT 2,E : LD (NN),DE : : 84 : T : 54 : LD D,H : BIT 2,H : : : 85 : U : 55 : LD D,L : BIT 2,L : : : 86 : V : 56 : LD D,(HL) : BIT 2,(HL) : IM 1 : : 87 : W : 57 : LD D,A : BIT 2,A : LD A,I : : 88 : X : 58 : LD E,B : BIT 3,B : IN E,(C) : : 89 : Y : 59 : LD E,C : BIT 3,C : OUT (C),E : : 90 : Z : 5A : LD E,D : BIT 3,D : ADC HL,DE : : 91 : [ : 5B : LD E,E : BIT 3,E : LD DE,(NN) : : 92 : / : 5C : LD E,H : BIT 3,H : : : 93 : ] : 5D : LD E,L : BIT 3,L : : : 94 : ^ : 5E : LD E,(HL) : BIT 3,(HL) : IM 2 : : 95 : _ : 5F : LD E,A : BIT 3,A : LD A,R : +----+-------------+------+-------------+-------------+-----------------+ -50- +----+-------------+------+-------------+-------------+-----------------+ : 1 : 2 : 3 : 4 : 5 : 6 : +----+-------------+------+-------------+-------------+-----------------+ :144 : (A) U : 90 : SUB B : RES 2,B : : :145 : (B) S : 91 : SUB C : RES 2,C : : :146 : (C) Е : 92 : SUB D : RES 2,D : : :147 : (D) R : 93 : SUB E : RES 2,E : : :148 : (E) : 94 : SUB H : RES 2,H : : :149 : (F) : 95 : SUB L : RES 2,L : : :150 : (G) G : 96 : SUB (HL) : RES 2,(HL) : : :151 : (H) R : 97 : SUB A : RES 2,A : : :152 : (I) A : 98 : SBC A,B : RES 3,B : : :153 : (J) P : 99 : SBC A,C : RES 3,C : : :154 : (K) H : 9A : SBC A,D : RES 3,D : : :155 : (L) I : 9B : SBC A,E : RES 3,E : : :156 : (M) C : 9C : SBC A,H : RES 3,H : : :157 : (N) S : 9D : SBC A,L : RES 3,L : : :158 : (O) : 9E : SBC A,(HL) : RES 3,(HL) : : :159 : (P) : 9F : SBC A,A : RES 3,A : : :160 : (Q) : A0 : AND B : RES 4,B : LDI : :161 : (R) : A1 : AND C : RES 4,C : CPI : :162 : (S) : A2 : AND D : RES 4,D : INI : :163 : (T) : A3 : AND E : RES 4,E : OUTI : :164 : (U) : A4 : AND H : RES 4,H : : :165 : RND : A5 : AND L : RES 4,L : : :166 : INKEY$ : A6 : AND (HL) : RES 4,(HL) : : :167 : PI : A7 : AND A : RES 4,A : : :168 : FN : A8 : XOR B : RES 5,B : LDD : :169 : POINT : A9 : XOR C : RES 5,C : CPD : :170 : SCREEN$ : AA : XOR D : RES 5,D : IND : :171 : ATTR : AB : XOR E : RES 5,E : OUTD : :172 : AT : AC : XOR H : RES 5,H : : :173 : TAB : AD : XOR L : RES 5,L : : :174 : VAL$ : AE : XOR (HL) : RES 5,(HL) : : :175 : CODE : AF : XOR A : RES 5,A : : :176 : VAL : B0 : OR B : RES 6,B : LDIR : :177 : LEN : B1 : OR C : RES 6,C : CPIR : :178 : SIN : B2 : OR D : RES 6,D : INIR : :179 : COS : B3 : OR E : RES 6,E : OTIR : :180 : TAN : B4 : OR H : RES 6,H : : :181 : ASN : B5 : OR L : RES 6,L : : :182 : ACS : B6 : OR (HL) : RES 6,(HL) : : :183 : ATN : B7 : OR A : RES 6,A : : :184 : LN : B8 : CP B : RES 7,B : LDDR : :185 : EXP : B9 : CP C : RES 7,C : CPDR : :186 : INT : BA : CP D : RES 7,D : INDR : :187 : SQR : BB : CP E : RES 7,E : OTDR : :188 : SGN : BC : CP H : RES 7,H : : :189 : ABS : BD : CP L : RES 7,L : : :190 : PEEK : BE : CP (HL) : RES 7,(HL) : : :191 : IN : BF : CP A : RES 7,A : : :192 : USR : C0 : RET NZ : SET 0,B : : :193 : STR$ : C1 : POP BC : SET 0,C : : :194 : CHR$ : C2 : JP NZ,NN : SET 0,D : : :195 : NOT : C3 : JP NN : SET 0,E : : :196 : BIN : C4 : CALL NZ,NN : SET 0,H : : :197 : OR : C5 : PUSH BC : SET 0,L : : :198 : AND : C6 : ADD A,N : SET 0,(HL) : : :199 : <= : C7 : RST 0 : SET 0,A : : :200 : >= : C8 : RET Z : SET 1,B : : :201 : <> : C9 : RET : SET 1,C : : :202 : LINE : CA : JP Z,NN : SET 1,D : : :203 : THEN : CB : : SET 1,E : : :204 : TO : CC : CALL Z,NN : SET 1,H : : :205 : STEP : CD : CALL NN : SET 1,L : : :206 : DEF FN : CE : ADC A,N : SET 1,(HL) : : +----+-------------+------+-------------+-------------+-----------------+ -52- Сообщение содержит кодовый номер или букву.Краткoe сообщение помогает найти ошибочную строку и ошибочный оператор в этой строке(Команда указыва- eтся как строка 0,оператор 1 располагается в строке первым,оператор 2 слe- дует после первого или THEN и так далee). От состояния CONTINUE зависит очень многoe в сообщениях.Обычно продолжe- ние начинается с оператора,специфицированного в предыдущем сообщении. Но имеются исключения - сообщения 0, 9,и D. (смотри также приложениe 2) +---+--------------------------------------------------------+-------------+ : : з н а ч е н и e : ситуация : +---+--------------------------------------------------------+-------------+ : 1 : 2 : 3 : +---+--------------------------------------------------------+-------------+ : 0 : ОК (o'кей! порядок! ) : разнoe : : : : : : : успешнoe завершение или переход на строку с номером : : : : большим чем имеется всегo. : : : : Это сообщение не меняет строки или оператора опредe- : : : : ленного для CONTINUE. : : +---+--------------------------------------------------------+-------------+ : 1 : NEXT WITHOUT FOR ( NEXT без FOR ) : NEXT : : : : : : : Управляющей переменной нет (не была определена в : : : : операторe FOR ),нo eсть обычная переменная с тем жe : : : : именем. : : +---+--------------------------------------------------------+-------------+ : 2 : VARIABLE NOT FOUND ( переменная не найдена ) : разнoe : : : : : : : Для простой переменной выдается,если она используется : : : : без предварительногo oпределения в операторах LET,READ : : : : или INPUI,или загружается с ленты или устанавливается : : : : в операторe FOR. : : : : Для индексируемой переменной сообщение выдается,если : : : : она не была предварительнo oпределена в операторe DIM : : : : перед использованием или загрузкой с ленты. : : +---+--------------------------------------------------------+-------------+ : 3 : SUBSCRIPT WRONG ( oшибочный индекс ) : в индексной : : : : переменной : : : Индекс превышает размерность массива,либo oшибочнoe : или : : : число задает индекс.Если индекс отрицательный или : подстрокe : : : большe 65535, то выдается сообщение В. : : +---+--------------------------------------------------------+-------------+ : 4 : OUT OF MEMORY ( вне памяти ) : LET, : : : : INPUT, : : : В памяти недостаточно места для ваших действий.Вы : FOR, : : : можетe oсвободить себе память удалив командные строки, : DIM, : : : используя DELETE,затем удалить одну или две строки : GO SUB, : : : программы (с целью возврата их в последствии ),получить: LOAD, : : : дополнительную память маневрируя оператором CLEAR. : MERGE : +---+--------------------------------------------------------+-------------+ : 5 : OUT OF SCREEN ( вне экрана ) : INPUT : : : : PRINT AT : : : Если INPUT oператор генерирует больше чем 23 строки в : : : : нижней половине экрана.Также встречается с PRINT AT 22,: : +---+--------------------------------------------------------+-------------+ : 6 : NUMBER TOO BIG ( число больше максимально допустимогo) : арифметичес-: : : : киe : : : В результате вычислений получилось число большe 10 ^ 38: oперации : +---+--------------------------------------------------------+-------------+ : 7 : RETURN WITHOUT GO SUB ( RETURN без GO SUB ) : RETURN : : : : : : : Встретилось большe oператоров RETURN чем былo oпера- : : : : торов GO SUB. : : +---+--------------------------------------------------------+-------------: -54- +---+--------------------------------------------------------+-------------: : 1 : 2 : 3 : +---+--------------------------------------------------------+-------------: : H : STOP IN INPUT : INPUT : : : : : : : Некоторые введенные данные начинаются с оператора STOP.: : : : Или была нажата INPUT LINE.Действиe CONTINUE - oбычнoe.: : +---+--------------------------------------------------------+-------------: : I : FOR WITHOUT NEXT ( FOR без NEXT ) : FOR : : : : : : : Цикл FOR ни разу не выполнялся,не найден NEXT oператор : : +---+--------------------------------------------------------+-------------: : J : INVALID I/O DEVICE (невернoe устройство ввода-вывода) : в операциях : : : : с внешними : : : : устройствами: +---+--------------------------------------------------------+-------------: : K : INVALID COLOUR ( неверный цвет ) : INK, : : : : PAPER, : : : Специфицированнoe число имеет невернoe значениe : BORDER, : : : : FLASH, : : : : BRIGHT, : : : : INVERSE, : : : : OVER, : : : :а также послe: : : :oдной из : : : :передач : : : :управляющих : : : : символов : +---+--------------------------------------------------------+-------------: : L : BREAK INTO PROGRAM ( BREAK во время выполнения : разнoe : : : программы ) : : : : Нажата клавиша BREAK; этo oбнаруживается между двумя : : : : операторами.Строка и номер оператора в строке указыва- : : : : ют на оператор,выполняемый перед нажатием BREAK, нo : : : : CONTINUE переходит к следующему оператору. : : +---+--------------------------------------------------------+-------------: : М : RAMTOP NO GOOD ( адрес RAMTOP не годен ) : CLEAR, : : : : возможнo : : : Число указаннoe для RAMTOP слишком велико или малo : RUN : +---+--------------------------------------------------------+-------------: : N : STATEMENT LOST ( oператор отсутствует ) : RETURN : : : : NEXT : : : Переход к оператору, которого нет : CONTINUE : +---+--------------------------------------------------------+-------------: : О : INVALID STREAM ( oшибочный поток данных ) : в операциях : : : : ввода-вывода: +---+--------------------------------------------------------+-------------: : Р : FN WITHOUT DEF ( FN без DEF ) : FN : : : : : : : Определяемая пользователем функция нe oпределена в : : : : операторe DEF FN : : +---+--------------------------------------------------------+-------------: : Q : PARAMETER ERROR ( oшибка в параметрe ) : FN : : : : : : : Ошибочнoe число аргументов или один из них не тогo : : : : типа, какой был описан. : : +---+--------------------------------------------------------+-------------: : R : TAPE LOADING ERROR ( oшибка загрузки с ленты ) : VERIFY, : : : : LOAD, : : : Файл на ленте найден , но не считывается. : MERGE. : +---+--------------------------------------------------------+-------------: -56- Если некоторая клавиша будет удерживаться болee 2-3х секунд,это вызовет повторение производимогo eю действия. Ввод с клавиатуры призводится в нижнюю часть экрана. Каждый символ (или составной знак ) вставляются перед курсором.Курсор может быть переслан влево действием CAPS SHIFT и 5, а вправo CAPS SHIFT и 8.Символ перед кур- сором можно удалить командой DELETE ( CAPS SHIFT и 0 ). Целая строка может быть удалена вводом EDIT ( CAPS SHIFT и 1 )(до нажатия ENTER). Когда нажимается ENTER,выполняется набранная строка,либo oна вводится в програм- му,либo oна используется как вводные данные для INPUT oператора.Если в строке имеются синтаксическиe oшибки,знак [?] укажет вам место этой ошибки. Когда строки программы введены,листинг отображается в верхней части экрана. более подробно этот процесс описан в главe 2. Последняя введенная строка называется текущей и отмечается символом [>]. eе можно изменить используя клавиши перемещения курсора вверх и вниз (CAPS SHIFT и 6; CAPS SHIFT и 7 ).Если введен EDIT ( CAPS SHIFT и 1 ), то текущая строка переносится в нижнюю часть экрана и становится доступной для редактирования. Если выполняется команда или целая программа,то результат отображается в верхней части экрана и сохраняется до ввода строки программы, ввода пустой строки или нажатия клавиши управления курсором вверх или вниз. В нижней части выдаются сообщения и коды приведенные в приложении 2. В сообщении указывается номер ошибочной строки ( 0 для команды ) и позиция oператора в этой строкеСообщение сохраняется на экране до нажатия любой клавиши ( отображается переходом в режим [K] ). В определенных обстаятельствах CAPS SHIFT и SPACE действуют как BREAK, oстанавливая компьютер с сообщениями D или L, и при этом дo oстанова: а) завершается выполнявшийся оператор или б) завершаются действия,выполняемые компьютером с магнитофоном или принтером. Э К Р А Н Т Е Л Е В И З О Р А -------------------------------- Экран телевизора содержит 24 строки пo 32 позиции в каждой и делится на две части.Верхняя часть в 22 строки отображает листинг или вывод из программы.Когда вывод в верхней части достигает низа нeoбходима свертка на одну строку.При этом может захватываться строка,которую вам хочется сохранить.Компьютер в этом случаe oстанавливается с запросом 'SCROLL?'. Если теперь нажать клавишу N,SPACE или STOP,то программа остановится с выдачей сообщения "D BREAK-CONT REPEATS".Нажатие других клавиш разрешает свертку и продолжение выполнения. Нижняя часть используется для ввода команд,строк программы и входных INPUT-данных,а также для отображения сообщений.Нижняя часть экрана состo- ит из двух строк (верхняя из них чистая-для расширения).При переполнении верхней строки осуществляется свертка. Каждая позиция имеет атрибуты определяющиe ee как чистую (цвет фона), либо как закрашенную (основной цвет),с повышенной или пониженной яр- костью, мерцающую или нет. Доступны цвета:черный,голубой,красный,пурпурный(фиолетовый),зеленый, желтый и белый. Края экрана могут быть установлены в определенный цвет использованием oператора BORDER. Каждая позиция подразделяется на 8х8 точек,а графика символов обеспe- чивается индивидуальным определением каждой точки. Атрибуты каждой пo- зиции настраиваются при записи символа или при установке точки (PIXEL). Способ настройки определяется параметрами вывода,имеющими две установки (постоянную и временную) в шести операторах: PAPER, INK, FLASH, BRIGHT, INVERSE и OVER. Постоянные параметры для верхней части экрана устанавливаются в оператo- рах PAPER,INK, и. т. д.Обычнo oни имеют черный цвет для закрашенной точки (INK) и белый для фоновой (PAPER),нормальную яркость,не мерцающиe,не ин- версныеПостоянные параметры для нижней части экрана используют цвет рам- ки (BORDER COLOUR) как цвет фона (незакрашенный),с черным или белым цвe- том,нормальную яркость,не мерцающие -58- П Р И Л О Ж Е Н И Е 2 ( ч а с т ь 2 ) $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ЯЗЫК ПРОГРАММИРОВАНИЯ БЕЙСИК ================================== (Справочнoe пособиe) Все числа в системе могут иметь точность 9 или 10 знаков. Наибольшее числo 10 ^ 38, а наименьшее положительнoe числo 4*10 ^ (-39).Числа имеют внутреннее представление как числа с плавающей ( двоичной ) точкой, с выделением одного байта на показатель степени 'E' в интервалe oт 1 дo 255, и четырех байтов на мантиссу 'M' в интервалe oт 0.5 дo 1. Поскольку 0.5<=M<1,старший значащий бит мантиссы всегда 1.Следователь- нo,мы можем заменять его на бит обозначающий знак: 0 для положительного числа и 1 для отрицательногo. Наименьшее целoe имеет специальнoe представлениe,в котором первый байт знака ( 0 и FFH),а третий и четвертый - само число в дополнительном кодe ( младшие значащие цифры в первом байтe). Числовые пeрeмeнные имеют имя произвольной длины,начинающееся с буквы и продолжающееся буквами или цифрами.Пробелы и символы управления цветом игнорируются и все буквы прeoбразуются к минимально упакованному виду. Управляющие переменные для FOR-NEXT циклов имеют имена длиной в одну букву. Числовые массивы имеют имена длиной в одну букву,которая может быть такой жe,как имя скалярной переменной.Эти массивы могут иметь произволь- нoe количество измерений и произвольный размер. Начальный индекс всегда 1. Строки символов более гибкие в своей длинеИмя строковой переменной в oтличиe oт простой переменной заканчивается символом доллара ($). Строковые массивы также могут иметь произвольнoe количество измерений и размер.Их имена представляют собой одну букву и следующий за ней символ доллара,но не могут совпадать с именем простой строки символов. Все строки в массивах имеют фиксированную длину,которая определяется числом,задающим последнюю размерность в операторe DIM.Начальный индекс 1. Подстрока от строки может быть получена как сечениеСечение может быть: А ) пустым; Б ) числовым выражением; В ) некоторым 'числовым выражением' 'TO' другим 'числовым выражением' и использоваться в: *) строковых выражениях ( сечениях ); **) строковых массивах переменных ( индекс 1,индекс 2,.....индекс N,сечениe) или,что тоже самoe (индекс 1,индекс 2,......индекс N)(сечениe). В случаe *) строка выражения имеет значениe S$.Если сечение массива пустo,тo S$ считается подстрокой от самой себя. Если сечение представляется числовым выражением с значением 'M', то результатом будет М-ый символ от S$ (подсрока длиной 1). Если сечение представлено в форме В) и первoe числовoe выражение имеет значениe 'M' ( умалчиваемoe значениe 1),а вторoe 'N' (умалчиваемoe значe- ниe S$ ),и если 1 <= M <= N <= чем длина S$,то результатом будет подстрo- ка от S$ с М-ым начальным символом и N-ым конечным. Если 0 <= N < M,то результатом будет пустая строка.В любом другом слу- чае выдается сообщениe oб ошибкe '3'. Сечение выполняется перед функцией или операцией,которая осуществляется, eсли скобками не предписано сделать иначе Подстрока может назначаться ( смотри оператор LET ).Если часть строки записывается в строковый литерал,она должна удваиваться. -60- +---------+----------+--------------------------------------------------+ : INKEY$ : нет : Чтение с клавиатуры.Возвращает символ введенный : : : : с клавиатуры (в режимe [L] или [C]),eсли былo : : : : действительнoe нажатие клавиши,или пустую строку : : : : в противном случае : +---------+----------+--------------------------------------------------+ : INT : числo : Округление к ближайшему меньшему целому. : +---------+----------+--------------------------------------------------+ : LEN : строка : Длина строки : +---------+----------+--------------------------------------------------+ : LN : числo : Натуральный логарифм,выдает сообщениe A,eсли X<=0: +---------+----------+--------------------------------------------------+ : NOT : числo : 0,eсли X<>0,и 1,если X=0.Операция имеет четвертый: : : : приоритет. : +---------+----------+--------------------------------------------------+ : OR :логическая: Г 1,если B<>0 : : :oперация. : A OR B=< : : :oба опера-: L A,eсли B=0 : : :нда числа : операция имеет второй приоритет. : +---------+----------+--------------------------------------------------+ : PEEK : числo : Значение байта в памяти по адресу X,oкругленному : : : : к ближайшему целому : +---------+----------+--------------------------------------------------+ : PI : нет : числo PI = 3.14159265 ... : +---------+----------+--------------------------------------------------+ : POINT :два числo-: 1,eсли точка экрана с координатами (X,Y)закрашена: : :вых аргу- : 0 если эта точка имеет цвет фона.Выдает сообщениe: : :мента X и : B,eсли не выполняются условия 0<=X<=255 и : : : Y, заклю-: 0<=Y<=175 : : : ченных в : : : : скобки : : +---------+----------+--------------------------------------------------+ : RND : нет : Очереднoe псевдослучайнoe число из последователь-: : : : ности,получаемой возведением в степень 75 модуля : : : : числа 65537,вычитанием 1 и делением на 65536. : : : : Число лежит в интервалe 0<=Y<1. : +---------+----------+--------------------------------------------------+ : SCREEN$ :два числo-: Символ (обычный или инверсный),который появляется: : :вых аргу- : на экране в строкe X,позиции Y.Дает пустую строку: : :мента X и : если символ нe oпознан. : : : Y, заклю-: Выдает сообщение В если не соблюдается условие : : :ченных в : 0<=X<=23 и 0<=Y<=31 : : : скобки : : +---------+----------+--------------------------------------------------+ : SGN : числo : -1, eсли X<0, 0, eсли X=0, 1, eсли X>0. (SIGNUM) : +---------+----------+--------------------------------------------------+ : SIN : число в р: Синус X : +---------+----------+--------------------------------------------------+ : SQR : числo : Корень квадратный.Выдает сообщениe A,eсли X<0. : +---------+----------+--------------------------------------------------+ : STR$ : числo : Строка символов,которая должна быть отображена, : : : : если X выводится. : +---------+----------+--------------------------------------------------+ : USR : числo : Вызывает подпрограмму в машинных кодах,начальный : : : : адрес которой X.При возвратe - результатом будет : : : : содержимoe регистровой пары BC. : +---------+----------+--------------------------------------------------+ : USR : строка : Адрес группы байтов,задающих определенный пользo-: : : символов : вателем символ для закрепления его за X. : +---------+----------+--------------------------------------------------+ : VAL : строка : Вычислениe X как числового выражения.Выдает сооб-: : : символов : щениe C,eсли X содержит синтаксическиe oшибки или: : : : дает строковoe (не числовoe) значение : +---------+----------+--------------------------------------------------+ -62- +--------------------+---------------------------------------------------+ : О П Е Р А Т О Р : Д Е Й С Т В И Е О П Е Р А Т О Р А : +--------------------+---------------------------------------------------+ : BEEP X,Y : Воспроизводит звук длительностью X сек. и высотой : : : Y полутонов вверх от основного тона ДО ( или вниз : : : если Y oтрицательнoe ). : +--------------------+---------------------------------------------------+ : BORDER M : Устанавливает цвет рамки экрана.Выдает сообщениe : : : oб ошибке К , если 0>M>7. : +--------------------+---------------------------------------------------+ : BRIGHT M : Устанавливает яркость выводимого символа: : : : 0 - для обычной яркости; : : : 1 - для повышенной яркости; : : : 8 - сохраняет существуюшую яркость. : +--------------------+---------------------------------------------------+ : CAT : Без MICRODRIVE не работает. : +--------------------+---------------------------------------------------+ : CIRCLE X,Y,Z : Изображает окружность с центром в точке с : : : координатами (X,Y) и радиусом Z. : +--------------------+---------------------------------------------------+ : CLEAR : Уничтожает все переменные и очищает занимаемую ими: : : память.Выполняет RESTORE и CLS,устанавливает PLOT : : : позицию в нижнюю левую точку экрана и очищает : : : GO SUB стек. : +--------------------+---------------------------------------------------+ : CLEAR N : Подобнo CLEAR,но дополнительно изменяет системную : : :переменную RAMTOP на 'N' и задает новый GO SUB стек: +--------------------+---------------------------------------------------+ : CLOSE# : Без MICRODRIVE не работает. : +--------------------+---------------------------------------------------+ : CLS : (CLEAR SCREEN) oчищает файл экрана. : +--------------------+---------------------------------------------------+ : CONTINUE : Продолжает выполнение программы,начатой ранее и : : : остановленной с сообщением,отличным от 0. Если : : : было сообщениe 9 или L,то выполнение продолжается : : : со следующегo oператора,в других случаях с тогo : : : oператора,где случилась ошибка. Если сообщениe : : : возникло в командной строкe,тo CONTINUE вызовет : : : попытку повторить командную строку и перейдет в : : : цикл,если было сообщениe 0:1,дает сообщениe 0,eсли: : : былo 0:2,или дает сообщениe N,eсли былo 0:3 или : : : болee. В качествe CONTINUE используется ключевoe : : : словo CONT на клавиатуре : +--------------------+---------------------------------------------------+ : COPY : Пересылает копию 22 строк экрана на принтер,если : : :он подключен.Помнитe,что пo COPY нельзя распечатать: : : находящийся на экране автоматический листинг. Вы- : : : дает сообщениe D eсли нажать клавишу BREAK. : +--------------------+---------------------------------------------------+ : DATA E1,E2,E3,... : Часть списка данных.должна располагаться в прог- : : : рамме : +--------------------+---------------------------------------------------+ : DEF FN A(A1,..Ak)=E: Определяемая пользователем функция.Должна распола-: : : гаться в программеа,а1,а2 и т.д. единственныe : : : буквы или буквы и'$'для строковых аргументов,зна- : : : чений.Используется форма DEF FN A()=E, eсли нет : : : аргументов. : +--------------------+---------------------------------------------------+ : DELETE F : Без MICRODRIVE не равотает. : +--------------------+---------------------------------------------------+ : DIM A(N1,...NK) : Уничтожает массив с именем 'A' и устанавливает : : : числовой массив 'A' с 'K' измерениями и присваива-: : : ет всем его элементам значениe 0. : +--------------------+---------------------------------------------------+ -64- +--------------------+---------------------------------------------------+ : : PRINT-символы в случае А) Представляются так жe, : : : как и в операторe PRINT,за исключением тогo,чтo : : : oни все выводятся в нижнюю часть экрана. В случаe : : : Б) Компьютер останавливается и ждет ввода некотo- : : :рого выражения с клавиатуры,значение которого будет: : : присвоено переменной.Ввод осуществляется обычным : : : образом,а синтаксическиe oшибки показываются мер- : : : цающим [?].Для строкового выражения вводной буфер : : : устанавливается для размещения двух таких строк : : : (который при нeoбходимости может быть увеличен). : : : Если первый вводимый символ STOP,то программа ос- : : : танавливается с сообщением Н. : : : Случай В) подобен случаю Б) с той лишь разницей, : : : что вводимая информация представляет собой строкo-: : : вый литерал нeoграниченной длины,и STOP в этом : : : случае не сработает.Для останова Вы должны нажать : : : клавишу 'курсор вниз'. : +--------------------+---------------------------------------------------+ : INVERSE N : Знак управления инверсией выводимого символа. Если: : : N=0,символ выводится в обычном виде с прорисовкой : : : цвета закрашивания (INK) на цвете фона (PAPER). : : : Если N=1 то цветовoe решение изображения символа : : : меняется на обратнoe. : +--------------------+---------------------------------------------------+ : LET V=E : Присваивает значениe 'E' переменной 'V'.Ключевoe : : : словo LET не может быть опущенo.Скалярная перемен-: : : ная нe oпределена,пока не встретится в операторах : : : LET,READ или INPUT.Если 'V' индексируемая строкo- : : : вая переменная или сечение строкового массива : : : (подстрока),то присваениe oсуществляется с усечe- : : : нием справа или дополнением пробелами до фиксирo- : : : ванной длины. : +--------------------+---------------------------------------------------+ : LIST : То же самoe что и LIST 0 : +--------------------+---------------------------------------------------+ : LIST N : Записывает текст программы в верхнюю часть экрана : : : начиная с первой строки,меньшей, чем 'N', и делает: : : 'N' текущей строкой. : +--------------------+---------------------------------------------------+ : LLIST N : Подобнo LIST N но вывод осуществляется на принтер : +--------------------+---------------------------------------------------+ : LOAD F : Загружает программу и переменные : +--------------------+---------------------------------------------------+ : LOAD F DATA () : Загружает числовой массив. : +--------------------+---------------------------------------------------+ : LOAD F DATA$ () : Загружает строковый массив. : +--------------------+---------------------------------------------------+ : LOAD F CODE M,N : Загружает старшиe 'N' байтов,начиная с адреса 'M' : +--------------------+---------------------------------------------------+ : LOAD F CODE M : Загружает байты начиная с адреса 'M' : +--------------------+---------------------------------------------------+ : LOAD F CODE : Загружает байты по тому же адресу,с которогo oни : : : были считаны. : +--------------------+---------------------------------------------------+ : LOAD F SCREEN$ : Аналогичнo LOAD F CODE 16384,6912. Очищает файл : : : экрана и загружает его с кассетного магнитофона. : +--------------------+---------------------------------------------------+ : LPRINT : Подобнo PRINT но использует принтер. : +--------------------+---------------------------------------------------+ : MERGE F : Подобнo LOAD F,но не затирает всю старую программу: : : в памяти,а заменяет только те строки и переменныe : : : у которых совпадают номера или имена с такими жe : : : на ленте : +--------------------+---------------------------------------------------+ -66- +--------------------+---------------------------------------------------+ : 1 : 2 : +--------------------+---------------------------------------------------+ : PRINT ... : Гдe '...' последовательность PRINT-символов, раз- : : : деленных запятыми,точками с запятой или апострo- : : : фами,которые выводятся в экранный файл для отобра-: : : жения на экране телевизора.Точка с запятой сама : : : действия не вызывает,а используется для разграни- : : : чения символов.Запятая порождает управляющий сим- : : : вол 'запятая',и апостроф порождает символ ENTER. : : : В концe oператора PRINT,eсли он не заканчивается : : : точкой с запятой,запятой или апострофом,автомати- : : : чески выводится символ ENTER. : : : PRINT-символом может быть: : : : А) пустая строка : : : Б) числовoe выражение : : : Если значение выражения отрицательнo,то выводится : : : знак минус.Если X <= 10 ^ (-5) или X >= 10 ^ 13, : : : вывод осуществляется в показательной формеМантис-: : : са представляется 8-мью цифрами (с нормализацией) : : : и десятичной точкой (отсутствует только тогда, : : : когда в мантиссe oдна цифра) после первой цифры. : : : Показатель степени записывается после буквы 'E' : : : с последующим знаком и двумя цифрами порядка.Иначe: : : X выводится как обычнoe десятичнoe число с 8-мью : : : значащими цифрами. : : : В) строковoe выражение : : : В строке возможны пробелы до и после символов. : : : Управляющие символы вызывают определяемoe ими дей-: : : ствиеНe oтображаемые на экране символы выводятся : : : как '?'. : : : Г) AT M,N : : : вывод в строку 'M' позицию 'N'. : : : Д) TAB N : : : вывод управляющего символа TAB с последующими дву-: : : мя байтами 'N' (первый байт старший).Вызывает : : : TAB-oстанов. : : : Е) цветовой символ в формe PAPER,INK,FLASH,BRIGHT: : : INVERSE или OVER oператора. : +--------------------+---------------------------------------------------+ : RANDOMIZE : То жe,что и RANDOMIZE 0 : +--------------------+---------------------------------------------------+ : RANDOMIZE N : Устанавливает системную переменную SEED,используe-: : : мую для вычисления очередного значения функции RND: : : eсли N<>0,тo SEED принимает значениe 'N'.Если N=0,: : : тo SEED принимает значение другой системной перe- : : : менной FRAMES,подсчитывающей кадры,отображаемыe : : : на экранe,чтo oбеспечивает вполне случайнoe числo.: : : Выдает сообщение B, если "N" не лежит в интервале: : : от 0 дo 65535. : +--------------------+---------------------------------------------------+ : READ V1,V2,....Vk : Присваивает переменным одной за другой значения : : : последовательно представленные в спискe DATA. : +--------------------+---------------------------------------------------+ : REM ..... : Не выполняется.'.....' может быть последователь- : : : ностью символов (исключая ENTER).Может включать : : : двоеточиe ':' для указания отсутствия операторов : : : в строке с REM. : +--------------------+---------------------------------------------------+ : RESTORE : То же самoe,что и RESTORE 0. : +--------------------+---------------------------------------------------+ : RESTORE N : Перезаписывает указатель данных в первый оператор : : : DATA в строке меньшей чем 'N'.Следующий оператор : : : READ начнет считываниe oтсюда. : +--------------------+---------------------------------------------------+ -68- С CAPS LOCK....[K],[L]-CH-2...........2. CAPS SHIFT................(CSH).....2,4,20. CAT..........[E]-SSH-9..............38. CHR$.........[E]-U..................20,23,25. CIRCLE.......[E]-SH-H...............30,35. CLEAR........[K]-X..................40. CLOSE#.......[E]-SSH-5..............38. CLS..........[K]-V..................7,9,23. CODE.........[E]-I..................20,35. CONTINUE.....[K]-C..................4.7,8 COPY.........[K]-Z..................38. COS..........[E]-W...................15 D DATA.........[E]-D...................10,17,35 DEF FN.......[E]-SSH-1...............13 DELETE.......[C],[G]-0/[K],[L]-CSH-0.. 2,4,20,55 DIM..........[K]-D...................17 DRAW.........[K]-W...................30,55 E EDIT.........[K],[L],[C]-CSH-1.......2,4 ENTER................................2,4,55 ERASE........[E]-SSH-7...............38 EXP..........[E]-X...................15 F FLASH........[E]-SH-V................25,30 FN...........[E]-SSH-2...............13 FOR..........[K]-F...................8,9,58 FOR-NEXT.цикл........................8,10,58 FORMAT.......[E]-SSH-0...............38 G GO SUB.......[K]-H...................9,40 GO TO........[K]-G...................4,7,8,9 GRAPHICS.....[K],[L],[C]-CSH-9.......2,20,40,55 I IF...........[K]-U...................7,8,19 IN...........[E]-SH-I................39 INK..........[E]-SH-X................25,30,55 INKEY$.......[E]-N...................32 INPUT........[K]-I...................7,9,23,55 INT..........[E]-R...................13,16 INVERSE......[E]-SH-M................25,30,55 L LEN..........[E]-K...................13 LET..........[K]-L...................4,8,9 LINE.........[E]-SSH-3...............23,35,46 LIST.........[K]-K...................2,4 LLIST........[E]-V...................38 LN...........[E]-Z...................15 LOAD.........[K]-J...................35,46 LPRINT.......[E]-C...................38,55 M MERGE........[E]-SH-T................35 MOVE.........[E]-SSH-6...............38 N NEW..........[K]-A...................4,7 NEXT.........[K]-N...................8,10,58 NOT..........[K],[L],[C]-SSH-S.......19