Текст
                    МАШИНА
ВЫЧИСЛИТЕЛЬНАЯ
ЭЛЕКТРОННАЯ
БЫТОВАЯ
ПЕРСОНАЛЬНАЯ
сдоа
ПК 8000|
ЯЗЫК БЕЙСИК.
РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
КНИГА № 2

МАШИНА ВЫЧИСЛИТЕЛЬНАЯ ЭЛЕКТРОННАЯ БЫТОВАЯ ПЕРСОНАЛЬНАЯ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ БЕЙСИК Руководство польаоватвлл
2 АННОТАЦИЯ ь Настоящее руководство предназначено для изучения языка БЕЙСИК, содержит примеры и рекомендации по программировании; на этом языке в БП ЭВМ “Сура".
3 СОДЕРЖАНИЕ 1 . HIW Д1 НИС 5 Л. ОьЩИь СВЕДЕНИЯ 6 J.I. Режим работы 6 J.2. формат строки 7 2.За Мможва тви символов 2а4а I <к»д»нив программ 8 ааВа I вд*игирование программ 9 2*4, функции экранного редактора 9 2.7. Специальные клавиши 11 3. ОПИСАНИЕ ЯЗЫКА 13 3.1. Константы 13 3.2. Переменные 14 3.2.1. Простые переменные 14 3.2.2. Массивы 15 3.3. Выражения и операции 15 3.3.1. Арифметические операции 16 3.3.2. Операции отношений 16 3.3.3. Логические операции 17 3.3.4. функциональные операции 18 3.3.5. Операции над строками 18 3.4. Описание команд, операторов и функций 19 3.4.1. Изменение текста программ в памяти 19 3.4.2. Команды чтения, записи и управления магнитофоном 20 3.4.3. Команды и операторы инициализации основных средств 23 3.4.4. Команды и операторы управления выполнением программы 25 3.4.5. Изменение значений переменных 30 3.4.6. Числовые функции 30 3.4.7. Строчные функции 31 3.4.8. Средства обработки ошибок 34
4 3.4.9. Работа с данными, хранящимися в тексте программы 35 3.4.10. Комментарий к программе 3.4.11. Доступ к памяти и регистрам аеода/вывода 37 3.4.12. Управление экраном дисплея 39 3.4.13. Графические операторы 42 3.4.14. Ввод данных с клавиатуры 45 3.4.15. Вывод на печать 4? 3.4.16. игровые манипуляторы 47 3.4.17. Выдача звукового сигнала 49 4. СООБЩЕНИЯ ОБ ОШИБКАХ 50 Приложение 1. СПИСОК КЛЮЧЕВЫХ СЛОВ БЕЙСИКА 53 Приложение 2. ТАБЛИЦА КОДОВ КОИ-8 54 Приложение 3. РЕГИСТРЫ ВВОДА-ВЫВОДА 55 Приложение 4. РАСПРЕДЕЛЕНИЕ ПАМЯТИ Ы Приложение 5. КОДЫ КОМАНД МИКРОПРОЦЕССОРА К58И 62 Приложение 6. СТРУКТУРА ВИДЕО-ОЗУ Приложение 7. ТОЧКИ ВХОДА В BIDS ПЗУ 67 Приложение 8. ПРИМЕР ПРОГРАММИРОВАНИЯ МУЗЫКИ 69
5 1. ВВЕДЕНИ1 В данном руководстве описан яоык программирования БЕЙСИК , содержится детальное описание основных понятий языка ,режимов работы, констант, переменных*1 операторов, форматов данный и т.д. БЕЙСИК представляет расширение версии БЫ-BASIC, являющегося одним из стандартный языков и включает в себя арифметические, логические, строчные, управляющие, графические операторы, вычисление трансцендентных функций и обработку прерываний. БЕЙСИК БП ЭВМ обеспечивает возможность работы с игровыми манипуляторами, печатью и бытовым магнитофоном в качестве внешнего запоминающего устройства (форматы записей совместимы с форматами MSX—BASIC), а наличие экранного редактора обеспечивает дополнительные удобства при редактировании программ. Уровень изложения данного руководства рассчитан на людей имеющих некоторый огыт в программировании и определяет концепции и методы программирования на конкретной версии языка БЕЙСИК. Поэтому, тем кто _ще не написал ни одной программы, а только собирается это сделать, мы рекомендуем познакомиться с основами программирования и составления алгоритмов. Яоык программирования БЕЙСИК БП ЭВМ совместим с языком программирования БЕЙСИК ПК 8010 по минимальному базовому составу операторов и функций (ядру), обязательных к реализации на всех ЭВМ, имеющих в составе программного обеспечения язык БЕЙСИК
ь 2. ОБЩИЕ СВЕДЕНИЯ 2.1. Режимы работы Вы включили питание БП ЭВМ и на экрана появилось сообщение "Ок", оаначакмцвв, что БЕЙСИК находится в прямом режиме и готов воспринимать команды вводимые с клавиатуры. С этого момента можно работать в одном из трех режимов! прямом (командном), программном (косвенном) и в режиме ввода. В прямом режиме программа не выполняется, можно вводить любую логическую строку (она может состоять из нескольких физических строк и содержать не болев 255 символов). Ввод логической строки ааканчивается если нажата клавиша <ВК> (, после чего БЕЙСИК анализирует строку и выполняет указанное в ней действие. Если строка начинается с допустимого порядкового номера(0-65529), то текущая программа изменяется, в противном случае выполняется действие укапанное в строке. В программный режим БЕЙСИК переходит получив команду RUN в прямом режиме, либо после загрузки в память программы на машинном яоыке с признаком начать ее выполнение, а также при вставке в разъем расширения кассеты ПЗУ с программой. Окончанием программного режима и переходом в прямой является появление сообщения "Ок" в следующих случаях! - выполнена последняя строка БЕЙСИК программы} — встречен оператор STOP или END; - одновременно нажаты клавиши "УПР“ и "СТОП"; — обнаружена неперсхватываемая ошибка. В режим ввода БЕЙСИК переходит при выполнении оператора INPUT (независимо от предшествовавшего режима), когда Вы можете ввести в машину данные оакончив их ввод клавишей <ВК>.
7 2.2. Формат строки В БЕЙСИК® строки программ имеют следующий формат (квадратные скобки указывают на необязательные фрагменты)I NNNNN ОПЕРАТОР Г i ОПЕРАТОР 3 <ВК> В строке может быть несколько операторов, при этом каждый должен С быть отделен от предыдущего двоеточием. Операторы IF и REM должны занимать всю оставшуюся часть строки. Строка программы всегда начинается с номера (NNNNN) и заканчивается нажатием клавиши <ВК>. Она не может содержать более 255 символов• Номер строки определяет ее местоположение в БЕЙСИК—программе. 2-3. Множество символов Множество символов, используемое в БП ЭВМ, состоит из букв, цифр, специальных символов и псевдографических символов. Буквы могут быть прописными и строчными, а цифры — в диапазоне от 0 до 9. К специальным символам относятся: — пробел; - знак равенства или присваивания; ♦ - знак плюс; — - знак минус; • — звездочка или умножение; / - косая черта или деление; — угол сверх или степень; ( — левая скобка: ) — правая скобка; X - процент; # - знак номера; Я — денежный знак или признак строчной переменной; • — восклицательный знак; «. .Г
8 [ — левая квадратная сковка; J - правая квадратная сковка; , — запятая; . - разделительная или десятичная точка; ' — апостроф или комментарий; 8с - амперсанд; ? — вопросительный знак; < - меньше чем; > - больше чем; - подчеркивание; ” - кавычки. Коды символов приведены в Приложении 2. 2.4. Создание программ Программы создаются при помощи экранного редактора в прямом режиме. Все строки вводимого текста, начинающиеся с номера, рассматриваются как номер строки программы. Редактор обрабатывает строки одним ив следующих способов: - новая строка добавляется к программе, если ее номер правилен (между 0 и 65529); — если номер совпадает с номером ранее введенной строки, то новая строка замещает старую; — если строка состоит только из номера и в программе есть строка с таким номером, то она удаляется; - если сделана попытка удалить несуществтвующую строку, это указание игнорируется; — если память, отведенная для программы, исчерпана и должна быть добавлена новая строка, то фиксируется ошибка.
9 2.5. Редактирование программы Для редактирования программы необходимо вывести ее или часть ее строк на экран с помощью оператора LIST. Перемещением курсора в нужное место и выполнением одного из следующим деЙ1 твий можно изменять текст программы: f — замене (знака; — удаление знака справа от курсора; удаление знака слева от курсора; ставка знака; добавление знака в конец строки. Все эти действия выполняются с помощью клавиш редактирования (см. п.2.6). Измененная строка замещает существующую в программе при нажатии клавиши <ВК>, если курсор находится в пределах этой логической строки. Две физические строки объединяются в логическую, если после ввода очередного символа курсор переместился в первую позицию следующей строки. Если Вы работаете в режиме ёставки (при этом курсор имеет половинную высоту), то, когда вы вносите знак в конец строки, все остальные смещаются вниз, а в позиции курсора помещается пустая строка. 2.6. функции экранного редактора В приведенной ниже табл. 1 даны управляющие коды экранного редактора, соответствующие им клавиши и их функции. Первая графа содержит сами коды в шестнадцатеричной записи. Во второй указаны клавиши, которые следует нажать одновременно с клавишей "УПР" для порождения соответствующего кода. Некоторые из управляющих кодов могут вырабатываться также нажатием отдельной клавиши, указанной в третьей графе. В четвертой графе указывается действие управляющего кода.
10 Т аблица 1 Шести. код 1"УПР"♦клавиша ' Спец- клавиш* 1 Действие И* • А ! !признак графического символа) 02 В ‘перемещает курсор начало 4 1 !физической строки; ИЗ С •прекращение ожидания ввода; И4 В ’ нет; 1 03 1 Е !нет; 06 F 1 !перемещает курсор в конец •физической строки; 07 ! В 'звуковой сигнал; । иа • н 1 1 1 --j ! возврат влево на одну !позицию со стиранием । !символа; 09 ! I 1 1 ТАЕ '.переход к следующей 1 •табулированной позиции; । ИА ! J 'перевод строки; ИВ ’ к 1 1 п©Ремещает курсор в левый !верхний угол экрана; । ас ! L СТРН !очистка экрана; ИВ ! м 1 !возврат каретки; ОЕ N г। 'перемещает курсор в конец Логической строки; OF ’ 0 1 1 |^1 Г , 'перемещает курсов в начало i •логической строки; 1 1В • Р ! нет; 1 11 о ! нет; 12 В i ВЗ !вкл./выкл. режима вставки; ।
11 Продолжение табл.1 Шести. код !"УПР" *-»« лав иша ’ Спец, клавиша Действие 13 е t !нет; 14 т । !нот; 15 и । ! нет; 16 V । t ! нет; 17 । t W i ’ нет; 18 « « X ‘ 5 । !нет; i 19 I Y !перемещает курсор в правый । • । !нижний угол экрана; । 1А Z ! нет; 1В । 1 с ПРф •нет; । 1С 1 । ► 1 1перевод курсора вправо; 10 । ◄ •перевод курсора влево; « 11 । • перевод курсора вверх; i 1И t ▼ • перевод курсора вниз; । 7» t i ! ИЗ । !удаляет символ справа от I i i i । । !курсора. । 2.7. Специальные клавиши В БП ЭВМ имеется 5 функциональных клавиш, каждой из которых может гл»гь присвоено 2 различных строчных значения (в зависимости от поло- жвнир клавиши "РГ“ ), поэтому в дальнейшем будем говорить, что есть !И вункциональных клавиш, обозначаемых как! "Fl" —"FIB". Текущие Значения "Fl” - "F5" ("F6" - "FIB") высвечиваются на нижней строке жрана и имеют следующее содержание:
12 F1 COLOR<B> F6 COLOR 1S,4,4<BK> F2 AUTO<B> F7 CLOAD" F3 GOTO<B> Ffl CONT<BK> F4 LI8T<B> F9 HST<BK> F5 RUN<BK> F10 RUN<BK> где; <В> - код пробела; <ВК> - код возврата каретки. Любая клавиша может быть переопределена с помощью команды KEY. Строку с функциональными клавишами можно убрать с экрана (сделать невидимой) с помощью оператора KEY OFF и снова высветить KEY ON. Клавиша "СТОП" вызывает действие только в том случае, если БЕЙСИК находится в программном режиме, выполнение программы при этом прерывается и на экране появляется курсор, повторное нажатие клавиши '’СТОП" продолжит выполнение программы с точки прерывания. Если одновременно нажать клавиши "УПР" и “СТОП", то выполнение программы прекратится, на экране будет выдано сообщение; BREAK IN ХХХХ где; ХХХХ — номер строки в программе, на которой исполнение было прекращено.
13 3. ОПИСАНИЕ ЯЗЫКА 3.1, Константы константами н*г»ме1ются неизменяемые личины, используемые в языке БЕЙСИК в время выполнения программ. Константы далвтся на строчные и числовые. * Строчные константы есть последовательность до 255 символов, заключенная а кавычки. Примеры: "ЗДРАВСТВУЙТЕ" "А+В-" Числовьн константы задают положительные и отрицательные числа. Имеется 5 типов числовым констант. 1) Целые константы. Это целые числа в диапазоне от —32768 до 32767, не содержащие Десятичной точки. Примеры: 123 -441 2) Константы с фиксированной точкой. Это положительные или отрицательные вещественные числа, содержащие десятичную точку. Примеры: 12. 45 Й. 199 3) Константы с плавающей точкой. ♦то положительные или отрицательные числа, представленные в и i поненциальной форме, для обозначения экспоненты используется буква 37 -37 •II Допустимый интервал констант с плавающей точкой от 1(3 до 1(3. Примеры: ’35,988Е-7 = 0,0000235988 ' 559Е6 = 2359000000
14 4> Шести»ди пюичные константы, числа по основами» 16. имевши» поганке &Н. Швстнааиатеоичные константы иг nnjbovBT иифоы от 0 по 9 и буквы от А до F (для обовна- чения ..личин от 10 до 15) . эти константы, могут быть только ивлыми. Поимеоы: «<Н5И - S0 , 4<H1FE = 510 5) Двоичные константы. Двоичные числа обозначаются поешиксом &В- могут использовать иитоы 0 и 1 и быть только целыми. Поимеоы: 5<В 1010000 = S0 &В111111110 = 510 3-2. Пеоеменные 3.2.1- Попетые пеоеменные Пепеменная — это значение, имеющее свое имя и изменяемое в поо— иессе выполнения программы- Значение пеоеменноЙ может быть поисвоено явно, или она его получает в оезультате вычислений пои выполнении программы. До того. как пеоеменноЙ присваивается значение. она обладает нулевым значением. Имена переменных могут иметь любую длину, но различаются они лишь по первым двум символам ( должны быть использованы латинские буквы и иисьоы. но первым символом должна быть буква). Примеры: АВС D2 1143 1A9L Последний пример является неправильным. т.к. пеовый символ цифра.
15 Имена переменных Н- должны совпадать с ключевыми словами языка БЕЙСИК, которые пригвдимы в Приложении 1. Имя переменной определяет ее тип. Например; в конце имени строчной переменной должен быть знак ”й". Пример: • D3S - "АБВГ" 3.2.2. Массивы Массив представляет собо-1 группу переменных (элементов массива), имеющих одно и то же имя. Обращение к конкретной переменной в группе производится путем указания ее номера (индекса), который может быть только целым числом (или целым выражением). количество индексов определяет размерность массива, который может <Выт! одномерным или двухмерным. Пример: А(5)=241 В(2,2)=10 В этом примере массив "А" является одномерным, а массив "В" abv вер- ным. Массивы удобно использовать для работы с таблицами эннь или для •тематического просмотра набора данных, помещенного в ма 1в. Макси- мальное число элементов массива определяется размером памя i БП ЭВМ. 3.3. Выражения и операции Выражением является строчная или числовая константа, перемен- ная или группа констант и переменных, соединенных между собой зна- ♦ •ми операций так, что в результате выполнения этих действий полу- автс я единственное значение.
16 □пврации выполняют арифметические и логические действия с one рандами. За 3.1. Арифметические операции Арифметические операции, порядке убывания приоритетов, приведены в табл. 2. Таблица 2 операция ‘ действие ! примеры Л ’ возведение в степень X^'Y — ! отрицательное значение X *, / ’ умножение, деление X*Y, X/Y +, ! сложение, вычитание X+Y, X-Y Для изменения порядка выполнения действий используются круглые скобки. Примеры: 10 Х=2*(5+3);Y=2*5+3 20 PRINT X;Y RUN 16 13 □к Если при вычислении выражения встретилось деление на нуль, то фиксируется ошибка <11 > и выполнение программы прекращается. 3.3.2. Опер ации отношений Операции отношений применяются для сравнения двух величин, ре- зультатом будет логическая величина "истина" (1) или "ложь" (0), которая может использоваться для принятия решения о дальнейшем ходе выполнения программы. Допустимые операции отношений приведены в табл. 3-
17 Таблиц* 3 операция ! проверяемое условие ’ примеры = 1 равен» тво । • X=Y О 1 неравенство • XOY < ! меньше чем ' X<Y > ! больше чвм । ! X>Y < = ! меньше либо равно । ! X<-Y >= ! больше либо равно । ! X>=Y i При использовании в выражении арифметических и логических опера- ций, арифметические выполняются в первую очередь. Пример: X+Y<(T-l)/Z 3-3.3- Логические операции Логические операции выполняются над 16—ти битными целыми опе- рандами побитно, т.е. каждый бит результата определяется значениями । «in । ввтствующих бит операндов. По приоритету логические операции следуют за арифметическими нперациями и операциями отношений. В табл. 4 перечислены логические операции в порядке убывания их приоритетов. Таблица 4 МН (отрицание) • AND (конъюнкция) ! OR (дизъюнкция) X • NOT X ’ X Y X AND Y ! X ! Y X OR Y 1 ' 0 ' И 0 0 ! 0 ! 0 И 0 • 1 и 1 0 ! И ! 1 1 ! 1 И 0 ! i 0 1 « । » 1 1 1 • 1 i 1 1
18 Тан ж», как и операции отношений, логические операции могут быть использованы для принятия решения о дальнейшем моде выполнения прог- раммы. Примеры! IF D-200 AND F<4 THEN 80 IF D-10 DR D=12 OR D-2B THEN 30 Кроме этого логические операции могут применяться для анализа содержимого байта по маске: (операция AND) или для слияния двух байт (операции OR). Примеры: А=В AND С А “ двоичное 0110 В “ двоичное 0011 С - двоичное 0010 3.3.4. функциональные операции Язык БЕЙСИК содержит встроенные функции такие как тригономет- рические, вычисление квадратного корня, генерация случайного числа и др., а также допускает использование функций, определенных програм- мистом (см. описание DEF FN). Полный перечень встроенных функций приведен в п. 3.4.8. 3.3.5. Операции над строками Две или более строчные переменные (константы) могут быть объеденены с помощью знака "+". Примеры: 10 АЯ="ТЕЛЕВЯ=""ВИЗОР" 20 PRINT АЯ+ВЯ 30 PRINT АЯ+"фОН" RUN ТЕЛЕВИЗОР ТЕЛЕФОН Ок
19 Строчные переменные могут сравниваться с помощью операции от- ношений путем последовательного (побайтного) сравнения кодов сим- волов, стоящий в соответствующих друг другу позициях. Если все коды совпадают, строки считаются равными. Меньшей считается строка, в которой обнаружен меньший код. * Если в процессе сравнения одна строка кончается раньше другой, то она считается меньшей. Примеры: " АА'*< >" АВ" "ТЕЛЕФОН"="ТЕЛЕФОН“ WW "CL “>"CL" "Kg">“KG” Все приведенные примеры имеют значение "истина". 3.4. Описание команд, операторов и функций 3.4.1. Изменение текста программ в памяти Оператор AUTO AUTO С<начальный номер>3 , L<приращение>1 Этот оператор устанавливает режим автоматической генерации на экране номера программой строки, начиная с указанного <начальный номер> с интервалом, равным <приращение>. По умолчанию оба параметра принимаются равным 10. Если генерируется уже существующий в программе номер, то он сопровождается символом , который предупреждает, что существующей строке угрожает замена. Для сохранения строки надо нажать клавишу ’ПРОБЕЛ", после чего генерируется следующий номер и т.д. Действие AUTO прекращается одновременным нажатием клавиши <УПР+СТОП>.
20 Примерi 110 PRINT 2+2 AUTO 100 100 PRINT A 110* <BK> 120 <УПР+СТОП> LIST 100 FRINT A 110 PRINT 2+2 Оператор LIST LIST C<начальный номер>] Воспроизводит на экране всю программу или ее часть. Если <начальный номер> отсутствует, то программа отображается со строки с самым младшим номером. Вывод программы можно приостановить, а затем продолжить, нажимая клавишу <СТОП>, вывод прекращается и БЕЙСИК переходит в прямой режим после вывода последней строки программы или при нажатии <УПР+СТОП>. Оператор NEW NEW Этот оператор удаляет из памяти все строки программы и очищает все переменные. 3.4.2. Команды чтения, записи и управления магнитофоном Команда CSAVE CSAVE "<имя файла>" Эта команда записывает на магнитофон БЕИСИК-программу из памяти во внутреннем (сжатом) формате. <Имя файла> -любое строчное выражение, из которого будут использоваться первые 6 символов. Пример: CSAVE "АЛГОРИТМ" Будет записана программа с именем "АЛГОРИ".
21 Команда CLOAD CLOADС?] "<имя файла>" Эта команд* ищет и поели нахождения считывает с магнитной ленты БЕИСИК-программу во нутреннем представлении имя которой совпадает < с <имя файла>. Если найдена программа указанного типа, но с другим именем, то выдается сообщение о ее пропуске - 8KIP <имя считанного файла>. В случае успешного нахождения программы выдается сообщение : FOUND <имя Файла>. После окончания загрузки БЕЙСИК переходит в прямой режим работы, при ошибке чтения или прекращения поиска (загрузки) с помощью <УПР+СТОП> выдается сообщение: DEVICE I/O ERROR. Если указано CLDAD?"<hmb файла>'‘, то указанный файл будет побайтно сравниваться с программой в памяти, в случае несравнения выдается сообщение: VERIFY ERROR. Сравнение прекращается. В следующем примере (и далее) с правой стороны даны краткие пояснения к операторам и сообщениям. Пример: CLDAD "ТЕСТ" команда прочитать файл TECJ SKIP sTECTl пропущен файл ТЕСТ1 SKIP :ТСТ пропущен файл ТСТ FOUND :ТЕСТ найден и загружается файл ТЕСТ Ок файл ТЕСТ загружен Команда BSAVE BSAVE "<имя файла>"/начальный адр.>,<конечный адр.>,<адр.запуска> Эта команда записывает часть оперативной памяти, начиная с адреса "начальный адр. до адреса (конечный адр.> на магнитную ленту. Если это программа на машинном языке, то <адр.запуска> указывает точку входа, операнд <имя файла> обрабатывается также, как и в команде CSAVE, Пример: BSAVE " ПРОГ . 1 “ , ?<Н4ИИИ, &Н52ИИ, &Н4ИИЗ
22 Буд«г отписана область оперативной памяти с адреса (4000) до (5200), С точной входа (4003). Примечание! здесь и далее все адреса в круглых скобках указаны в 16-ой системе счисления. Команда BLDAD BLOADC?] “<имя файла>"С,RJ Эта команда считывает с ленты запись, сделанную командой BSAVE. Параметр "R" , если он указан, заставляет БЕЙСИК переда- вать управление загруженному файлу по адресу <адр. запуска). Если "R“ опущен, то БЕЙСИК переходит в прямой режим работы. ВЬПАБ'?"<имя файла>" выполняется побайтное сравнение данных. Пример! BL0AD,,nP0r. 3“,R SKIP :ПРСГ.1 пропускается файл ПРСГ.1 SKIP :ПРОГ.2 пропускается файл ПРОГ.2 FOUND:ПРОГ.3 найден и загружается файл ПРОГ.З Далее вместо сообщения "Ок" управление передается по адресу <адр.запуска>, т.к. указан параметр "R". Команда SAVE SAVE "<имя файла ” Эта команда аналогична команде CSAVE за исключением того, что БЕЙСИК программа записывается на магнитную ленту в символьном формате (том, что вы видите на экране после LIST), только без незначащих пробелов в конце строк. Команда SAVE и альтернативная ей LOAD позволяют обмениваться программами на БЕЙСИКе между ЭВМ различного типа с разным внутренним представлением БЕйСИК-программ.
23 Примечание: если Вы записываете программу не для межмашинного обмена, то используйте более быструю и экономичную команду CSAVE. Команда LOAD < LOAD "<имя файла" ^та команда читает записи, сделанные командой SAVE и преобразует вводимое символьное представление БЕЙСИК—программы во внутренний формат. 3.4.3. Команда и операторы инициализации основных средств Команда CLEAR CLEAR «строчное пространство> Этот опвратор инициализирует все переменные, удаляет массивы и перераспределяет память, отводя для строчных переменных количество байт, указанное в параметре «строчное пространство'. По умолчанию, после включения БП ЭВМ или ввода оператора NEW, для строчных переменных отводится 200 байт памяти. Пример: CLEAR 2000 Команда KEY KEY < номер'-, <стройное выражение> Эта команда позволяет перепрограммировать Функциональные клави- ши. Здесь <номер> определяет номер функциональной клавиши от 1 до 10, а строчное выражение' — текст от 1 до 15 символов, который будет присвоен указанной клавише. Следует отметить, что текст выводится на экран после нажатия Функциональных клавиш только в том случае, если БЕЙСИК находится в прямом режиме.
24 Примерi KEY 3."data" KEY 4, »МИ*НИ” Оператор KEY ON/OFF - п Этот оператор удаляет (OFF) и высвечивает (ON) содержимое функциональных ключей на 24 строко экрана. Оператор TR ON/OFF I DN 1 TR { I I off] Этот оператор включает (ON) и выключает (OFF) печать номеров строк при выполнении программы переводя выполнение программы в обычный режим. Включение трассировки полезно при отладке программ для нахождения причины зацикливания (зависания). Оператор DEF FN DEF FN <имя> (<параметр>) ~ <определение функции Этот оператор позволяет пользователю запрограммировать свою собственную функциюи Здесь <имя> означает допустимое имя переменной соответствующего типа, оно становится именем определенной функции. <Параметр> содержит имя переменной в определении функции, этой переменной будет присвоено значение при вызове функции. ^.Определение функции> есть выражение, описывающее функцию. Пример: 10 DEF FN АВ(J)=C*D/2+J описание функции АВ; 20 S=FN АВ(2) вызов функции АВ; 30 DEF FN BNS(IN)=АЙ+В0 описание функции BN0 строкового типа
25 Оператор DEF FN должен быть описан до вызова функции, иначе Фиксируется ошибка <1в> (неопределенная функция пользователя). Оператор DIM DIM <индексная переменная} С,<индексная переменная/...] Этот оператор определяет имена массивов, размерность и верхние границы индексов. Для массивов, не объявленных с помощью оператора DIM, верхняя граница индексов устанавливается равной 10. Нижняя граница всех индексов И. Пример: 10 DIM А (100) ,Е (10,30) ,СЖ 1000) 20 М(3)=0 Здесь массив "А" будет иметь 101 элемент, массив "В" - Петрок по 31 элементу, массив "СЯ" определен как строковый на 1001 символ, массив "М" будет иметь 11 элементов, т.к. он объявляется по умолчанию. Если при ссылке на массив встречается индекс больше максималь- ного, возникает ошибка <9>. В случае повторного объявления массива с помощью оператора DIM, фиксируется ошибка <10>. 3.4.4. Команды и операторы управления выполнением программы Команда RUN RUN С<номер строки}] Команда начинает выполнение БЕЙСИК—программы с указанной строки. При отсутствии <номер строки} выполнение начинается со строки, имею- щей наименьший номер.
26 Оператор TDI STOP Оператор ВТОР прекращает выполнение программы и выдает сообщение (BREAV IN XXX), где XXX - номер строки программы с оператором STOP. Этот оператор, как и TR DN/OFF, используется при отладке программ. Продолжить ыполнение после остановки по оператору STOP можно с помощью команды CDNT. Команда CDNT CDNT Этот оператор возобновляет выполнение программ после оператора STOP, а также <УПР+СТОП>. Пример: 10 А=2+2 20 STOP 30 PRINT А RUN начать выполнение BREAK IN 20 останов в строке 20 □к CONT продолжить 4 Ок Оператор END END Этот оператор прекращает исполнение программы. Он может распола- гаться в любой точке программы и при своем выполнении не порождает сообщения о месте прерывания. Пример: 10 PRINT 2+2 20 END 30 PRINT 3+3 RUN 4 Ок
27 Операторы FOR/NEXT FOR <счетчик>"<начало> ТО <конец> STEP<инкремент> <операторы NEXT <счетчик) < где: <счетчик> — переменная, хранящая текущее значение счетчика; < начало> - выражение, задающее начальное значение счетчика; < конец> — выражение, задающее конечное значение счетчика; < инкремент> — выражение, определяющее величину прибавляемую к счетчику при каждом повторении цикла и равную по умолчанию +1; <операторы> — последовательность операторов цикла. Этот оператор широко используется в БЕЙСИК—программах для организации циклов. При выполнении оператора FDR/NEXT первый раз вычисляется значение выражения <начало>, которое присваевается переменной <счетчик>, затем идет обычное выполнение операторов до достижения оператора NEXT, после чего переменная счетчик увеличивается на значение, заданное выражением <инкремент> (или уменьшается, если <инкремент> отрицательный). Значение счетчика сравнивается со значением <конец> и если счетчик больше, то выполнение продолжается после оператора NEXT, в противном случае управление передается оператору FDR. Следует отметить, что при отрицательном значении <инкремент> идет уменьшение счетчика и в этом случае он должен быть меньше значения <конец> для перехода к операторам, стоящим после NEXT. Оператор NEXT может не указывать <счетчик>, в этом случае он выполняется на 2И7. быстрее. Циклы могут состоять из нескольких (вложенных) операторов FOR/NEXT.
28 Примерi 10 FOR 1-1 TO 9 20 FOR J-l TO 3 30 COLOR J, I, I 40 NEXTiNEXT 50 COLOR 15,4,4 Ошибка <1> фиксируется,если в программе встретился оператор NEXT без предшествующего ему оператора FOR. Оператор GGSUB GDSUB <номер строки> Этот оператор передает управление подпрограмме, начинающейся со строки <номер строки} и запоминает адрес возврата для оператора RETURN который заканчивает подпрограмму, и возвращает управление оператору непосредственно следующему за последним по исполнению оператору GOSUB. Подпрограмма может также использовать оператор GOSUB для вызова другой подпрограммы и т.Д. Глубина вложенности вызова ограничивается только размером памяти БП ЭВМ. При входе в подпрограмму не через оператоор GOSUB возникает ошибка <3> на операторе RETURN. Пример: 5 1=1 10 GOSUB 100:GOSUB100 20 END 100 1=1+1:PRINT I ;:RETURN RUN 2 3 □к Оператор RETURN RETURN Этот оператор используется в паре с оператором GGSUB и осуществ- ляет возврат из подпрограммы на оператор, непосредственно следующий за GOSUB.
29 Оператор GOTO GOTO <номер строки) Это оператор безусловной передачи управления строке программы с указанным номером. Если указан <номер строки>, которого нет в программе, то воз- никает ошибка <8>. Оператор IF/THEN IF <условие> THEN <список операторов> где: <условие> — любое арифметическое выражение, нулевой результат которого "ложь", а все остальные "истина"; '•список операторов> — один, несколько (или ни одного) операторов БЕЙСИКА, разделенных двоеточиями, или любой существующий номер строки. {Список операторов> будет выполнен в том случае, если <условие> есть "истина", иначе управление будет передано следующей строке БЕИСИК-программы (минуя {список операторов>). Этот оператор применяется для определения пути выполнения программы и является одним из основных средств ветвления. Пример: 10 IF A+S>C/D-4 THEN 100 20 IF MCDO0 THEN FOR 1=0 TO 10; M (I) =0J NEXT 30 IF FRE (0X20000 THEN STOP Оператор ON XX GDTD/GOSLffl {GOTO 1 > {список номеров строк> gdsubJ где: <выражение> — любое арифметическое выражение с результатом от 0 до 255;
30 <списан номеров строк> — один или несколько существующих номеров строк через запятую. Этот оператор осуществляет переход к одной из строк в списке в зависимости от значения <выраженив>9 вели значение есть 3, то бу- дет осуществляться переход к строка с третьим по порядку номером из списка. В операторе ON... GOSUB каждый номер должен указывать в начало какой-либо подпрограммы, если <выражение> равно 0 либо больше количества членов в списке (но не превосходит 253), то выполнение продолжается со следующего пс порядку оператора БЕЙСИК—программы. Этот оператор может использоваться для для быстрого анализа данных, вводимых с клавиатуры и выбора сразу нескольких направлений ветвле- ния программы. Пример: 10 ON a+w GOTO 101,102,103 20 GOTO 10 3.4.5. Изменение значений переменных Оператор LET LET <переменная>=<выражение> Этот оператор присваивает переменной значение выражения. Слово LET может не указываться. • Пример; 10 LET А=В+С*((D*3)-4) 20 А1=В#((C#D-4)-l) 3.4.6. Числовые функции ABS(X) — определяет абсолютную величину выражения X; ATN(X) — определяет арктангенс X в радианах и находится в преде- лах от -ПИ/2 де +ПИ/2;
31 COS(X) — определяет косинус X в радианах; ЕХР(Х) - определяет значение "Е" степени X. X не должен превосходить 87, в противном случае переполнение; FREC0) - имеет фиктивный аргумент и выдает количество свободной памяти в БП Э5М, не используемой в настоящий момент БЕЙСИКОМ. FRE("M) выдает количество неиспользуемых байт в строчном пространстве; INT(X) - определяет целую часть от X; LOG(X) — определяет значение натурального логарифма (X должен быть больше 0); RND(X) - генерирует случайное число в диапазоне от 0 до +1, при Х<0 генератор инициализируется, при Х=0 выдается текущее число, а при Х>0 выдается следующее число последовательности; SGN(X) — выдается 1 при Х>0, 0 при Х=0 и -1 при Х<0; SIN(X) — определяет синус в радианах; SQR(X) - определяет квадратный корень из X, (X должен быть >0); TAN(X) — определяет тангенс угла X в радианах. 3.4.7. Строчные функции АБС(ХЙ) - выдается числовое значение первого символа строчной переменной "ХИ* ; если ХС=” ", то выдается ошибка <5>; пример: PRINT ASCCA") 65 Ок CHRR(I) - выдает строку с одним элементом, представляющим код КОИ-8 для I, обычно эта функция используется для вывода кодов, не имеющих своего изображения на клавиатуре, I должно находиться в пределах от 0 до 255; пример: PRINT CHRK(12) (стирание экрана)
32 HEXH(N) выдает строку, которая представляет шестнадцатеричное значение выражения N, находящегося в пределах от -3276S до 65535; пример: PRINT НЕХИ(12) С Ок LEFTH(Xfl,I) — выдает строку, содержащую левые I символов строки ”ХИ", и должно находиться в пределах от от 0 до 255, если I больше, чем длина ХИ, то выдается вся строка ХИ, а если 1=0, то результатом будет пустая строка; пример: PRINT LEFTH("АВТОМОБИЛЬ",4) ASTO Ок LEN(XB) - выдается количество символов в строке ХИ; пример: PRINT LEN("АВТОМОБИЛЬ") 10 Ок MIDH(ХИ,I,J) -выдается J символов из строки ХИ, начиная с позиции й; I и J должны находиться в пределах от 0 до 255, если J отсутствует или имеется больше символов, чем J символов справа от 1-ой позиции, выдается вся правая часть строки, начиная с 1-ой позиции; если I больше длины строки ХИ, то результатом будет пустая строка; пример: PRINT МIDR("АВТОМОБИЛЬ",3,3) ТОМ Ок RIGHTR(XR,I) -выдает правые I символов строки XR, если I равно длине строки ХИ, то выдается вся строка, если 1=0, то результатом будет пустая строка; пример: PRINT RIGHTR("АВТОМОБИЛЬ", 4) БИЛЬ Ок SPACER(I) -выдает строку пробелов длиной I; I должно находиться в пределах от 0 до 255;
33 пример! PRINT SPACER(3); '•#" * Ок SPC(I) — печатает I пробелов, SPC может использоваться только в операторам PRINT и LPRINT; I должно находиться в к пределах от 0 до 255; STRfi(N) — выдает строку , представляющую десятичное значение выражения N, находящегося в пределах от —32768 до 65535; пример: PRINT STRfi(12) 12 Ок STRINGE(I,J) • STRINGS(I,ХЕ) -выдает строку длиной I, все символы которой есть код КОИ-8 для J или первый символ строки ХИ; пример: 10 АЕ=”АВТОМОБИЛЬ” 20 Efi=STRINSfi(10,AS) 30 Cfi=STRINGE(5,66) 40 PRINT BE,СЕ RUN AAAAAAAAAA BEEBE Ok TAB(I) - печатает пробелы до I-той позиции, если I меньше текущей позиции, то функция игнорируется; ТАЕ может использоваться только в операторах PRINT и LPRINT ; I должно находиться в пределах от 0 до 255; VAL(Xfi) - эта функция предполагает, что аргумент (строчное выражение) содержит допустимое число в коде КОИ-8; это число может включать знак, десятичную точку и запись экспоненты; строка ХЕ просматривается слева направо до тех пор, пока не встретится символ, который не может входить в число; если просмотренные символы - число, то VAL выдает это число, иначе нуль, пример: PRINT VAL("A12s"); VAL("23А12:”) 0 23 Ок
34 3.4.В. Средства обработки ошибок Функция ERL X - FRL Эта функция используется в подпрограммах обработки ошибок и выдает номер строки БЕЙСИК-прorраммы, с которой обнаружена последняя ошибка. Если это был оператор, выполненный в прямом режиме, то ERL будет содержать 65335. Функция ERR X = ERR Эта функция также используется в подпрограммах обработки ошибок и выдает код последней ошибки. Оператор ERROR ERROR <номер ошибки> Этот оператор позволяет искусственно имитировать ошибку с кодом <номер ошибки>, находящимся в пределах от И до 255. Примеря ERROR ERR будет выдан номер последней ошибки. Оператор ON ERROR GOTO GN ERROR GOTO номер строки> Этот оператор позволяет перехватывать ошибки (т.е. не прерывать программу) и указывает начало подпрограммы их обработки. Если этот оператор выполнен, то все обнаруженные ошибки будут приводить к переходу в указанную строку. Для отказа от обработки ошибки в подпрограмме перехвата можно выполнить оператор ON ERROR GOTO И, это вызовет появление стандартного сообщения об ошибке.
35 Перехват ошибок в подпрограмме обработки ошибок невозможен. Оператор RESUME f NEXT I RESUME ' г I <номер отроки> J Этот оператор предназначен для завершения и выхода из подпрограммы обработки ошибок. RESUME — возобновляет выполнение основной программы С оператора, вызвавшего ошибку. RESUME NEXT — возобновляет выполнение с оператора, непосредственно стоящего после оператора с ошибкой. RESUME <номер строки> - возобновляет выполнение с любой строки программы. Если оператор RESUME выполняется не в подпрограмме перехвата, то возникает ошибка <21> 3.4.9. Работа с данными, хранящимися в тексте программы Оператор DATA DATA <список констант> Этот оператор задает последовательность констант, которую будут использовать операторы READ. Операторы DATA не выполняются (обходятся) в ходе программы, поэтому они могут располагаться где угодно. Если задано более одной константы, то они отделяются запятыми, максимальное количество констант ограничивается только длиной логической строки. <Список констант> может содержать любые типы числовых и строчных констант кроме выражений. Пример: 20 DATA 15,67,19S4,"ABCD"
36 Оператор READ READ <список переменных> Этот оператор читает константы, оаписанные в операторах DATA, и присваивает их указанным переменным. Типы переменных должны соответствовать типам констант, в противном случае возникает ошибка <2>. Данные из операторов DATA выбираются последовательно. Если количество переменных превышает количество элементов списка в DATA, то фиксируется ошибка <4>. Примера 30 READ А,В,С,DP Оператор RESTORE RESTORE С<номер строки>3 Этот оператор устанавливает указатель DATA для повторного чтения оператором READ, который перемещает указатель вниз по мере ввода данных, пока не будут исчерпаны все операторы DATA. Оператор RESTORE возвращает указатель в начало, после чего все данные* могут быть снова прочитаны оператором READ. Если задан <номер строки>, то указатель устанавливается в место, соответствующее строке с указанным номером. 3-4.10- Комментарии к программе Оператор REM REM <текст комментария> Этот оператор позволяет вставлять в программу любой текст после оператора REM и до конца строки. Допускается использовать знак "апостроф" вместо оператора REM. БЕЙСИК не производит никаких действий при обнаружении REM. Остаток строки пропускается.
37 Пример: 10 REM эта программа умножает два числа 20 PRINT А * В 30 'вывод на экран результата 3.4.11. Доступ к памяти и регистрам ввода-вывода < Функция INP X = 1МР(<номер регистра) Эта функция .читает байт данных из регистра ввода—вывода. <Номер регистра> - целое число в диапазоне от 0 до 255. Номера регистров, задействованые в БП ЭВМ, приведены в Приложении 3. Оператор OUT OUT <номер регистра>, <данные> Этот оператор посылает байт данных в регистр ввода-вывода и совместно с функцией INP позволяет непосредственно управлять аппаратными средствами БП ЭВМ, а также устройствами, подключенными через разъемы расширения. Пример: OUT 136,33 Функция РЕЕК Х=РЕЕК(<адрес ОЗУ» Эта функция позволяет читать байт данных из любой ячейки памяти с адресом <адрес 03У>, который находится о диапазоне от 0 до 65535. Функция может быть использована для получения результата работы программ на машинном языке. Распределение адресного пространства ОЗУ приведено в Приложении 4
38 Оператор POKE POKE <адрес ОЗУ>,<данные> Этот оператор позволяет записать байт <данные> в любую ячейку памяти с адресом <адрес 03У>, который находится в диапазоне от 0 до 65535. Бы можете использовать РОКЕ для модификации вашей программы, побайтно записав в память программу на машинном языке и необходимые параметры для ее выполнения. функция USR X=USR(<адрес 03У>) Эта функция передает управление программе на машинном языке, предварительно записанной е память с помощью оператора РОКЕ или команды ВLOAD. <Адрес 03У> указывает точку входа в программу. Результатом функции является байт данных, присваиваемый переменной X, который программа на машинном языке должна поместить в аккомулятор микропроцессора. Наиболее полезным свойством этой функции является возможность сделать ассемблерные программы, выполняющие действия, недоступные или слишком медленные в БЕЙСИКе (например, сортировка или поиск в массиве данных). Перечень команд ассемблера и их коды приведены в Приложении 5. В Приложении 7 даны подпрограммы из ПЗУ БП ЭВМ, которые Вы можете вызывать из Ваших программ в машинных кодах. Функция VPEEK X=VPEEK(<адрес видео 03У>) Эта функция аналогична РЕЕК за исключением того, что данные читаются из области ОЗУ, отведенной для экрана. <Адрес видео 03У> - целое число в диапазоне от 0 до 16383.
39 Оператор VFDKE VPOKE 'адрес видео ОЗУ>,<данные> Этот оператор аналогичен РОКЕ, за исключением того, что данные записываются в область ОЗУ, отведенную для экрана. <Адрес видео 03У> - целое число в диапазоне от 0 до 16363. < Структура видео ОЗУ приведена в Приложении 6. 3.4.12. Управление экраном дисплея Оператор CLS CLS Этот оператор стирает экран в любом режиме. Оператор COLOR COLOR <цвет изображения>,<цвет фона>,<цвет рамки> где; <цвет изображения> - любые арифметические выражения, результатом <цвет фона> которых являются целые числа в диапазоне <цвет рамки> от 0 до 15, определяющие номера цветов. Номера цветов имеют следующие значения: 0,1 — черный; 6 - красный; 2 — зеленый; 9 - светло-красный; 3 — светло—зеленый; 10 - желтый; 4 — синий; 11 — желтый(светлый); 5 — темно-синий; 12 — фиолетовый; Ь — бирюзовый; 13 - фиолетовый(светлый); 7 — светло—голубой; 14 - серый; 15 - белый. Этот опеартор устанавливает цвет изображения — переднего плана, фона и рамки. В режиме 0 рамка отсутствует. Пример: COLOR 15,4,6 белый цвет букв на синем фоне и красная рамка
40 Функция CBRLIN X-CBRLIN Эта функция выдает номер строки жрана, на которой находится курсор, верхняя строка имеет номер 0, максимальный номер 23 (или 22, если высвечена служебная строка). функция POS X«=POS(0) Эта функция выдает номер позиции курсора, левая крайняя позиция имеет номер 0, максимальный номвр зависит от установленного оператором WIDTH. Совместно с функцией CSRLIN позволяет точно определить местоположение курсора на экране. Пример: 10 X*=POS (0) : Y«=CSRLIN запомнить координаты курсора 20 LOCATE XI,Y1 установка курсор в новое место экрана 30 RRINT 2Й печать переменной 2Й 40 LOCATE X,Y восстановить положение курсора Оператор LOCATE LOCATE <позиция>,<строка> Этот оператор устанавливает курсор в любую точку жрана в режимах 0 и 1. <Поэиция> и <строка> — любые арифметические выражения в пределах от 0 до 255. Если указывается строка или позиция с номерами больше, чем максимально возможные, но меньше 255, то ошибки не происходит, а курсор перемещается в максимально возможную строку (позицию)
41 Оператор WIDTH WIDTH <длина строки) Этот оператор используется для установки длины строки в режимах И и 1. При установке режимов И или 1 с помощью SCREEN, длина строки устанавливается соответственно равной 38 или 28 и может быть изменена оператором WIDTH в диапазонах от 1 до 40 или от 1 до 32. При выполнении оператора WIDTH экран очищается. Оператор SCREEN SCREEN <режим' Этот оператор устанавливает режим экрана. <Режим> - любое арифметическое выражение в пределах от 0 до 2: SCREEN И - устанавливает текстовый режим с длиной строки до 40 символов, цвет рамки всегда равен цвету Фона; SCREEN 1 — устанавливает текстовый многоцветный режим, длина строки до 32 символов, можно устанавливать цвет рамки отличный от цвета фона и цвет для любой группы из 8 символов, который задается с помощью VPDKE через таблицу цвета; SCREEN 2 - графический режим 256*192 точки, каждые 8 точек в строке могут иметь свой цвет изображения и фона в соответствии с таблицей цвета. В этом режиме воспринимаются все графические операторы, по концу программы, операторам END, STOP и клавишам хУПР+СТОП- ЕП ЭВМ переходит в предыдущий режим.
42 Оператор PRINT PRINT <список вырлжиний> Этот оператор выдает данные на экран. Выражения в списке могут быть арифметическими и строчными. Строки должны быть заключены в кавычки. Элементы списка, отделенные запятой, печатаются с новой зоны, а отдаленные точкой с запятой - непосредственно после предыдущего. Если точка с запятой стоит в конце списка, то следующий оператор PRINT продолжает печатать с той же физической строки. Если печатается строка длиннее строки экрана, то печать продолжается на следующей физической строке. За каждым выдаваемым числом всегда стоит пробел. Перед положительными числами печатается пробел, а перед отрицательными — &нвл< минус. Вместо слова PRINT можно употреблять вопросительный знак Пример s 10 Ай="компьютер:В=10:С=—5 20 PRINT "бытовой";"персональный";АЙ 30 ?4+2;В;С 40 ?2+2;В;С RUN бытовой персональный компьютер 6 10 -5 4 10 -5 оК 3.4.13. Графические операторы Оператор LINE LINE ttSTEPJ «Х>,<¥>»1 - [STEP! (<X1>,<Y1>> Г ,<цвет>1 Г | 3 Этот оператор рисует линии, прямоугольники и закрашенные пр ямоу голь ники. STEP - необязательный параметр, указывающий что координаты даны в приращениях относительно последней точки;
43 (<X>,<Y>) - координаты начала линии или верхнего левого угла прямоугольника: — координаты конца линии или нижнего левого угла пр ямоугольника: <цввт> - определяет цвет линии или цвет закраски и находится в диапазоне от И до 15, закраска выполняется фоновым цветом, если координата <Х> кратна в, в противном случае края могут закрашиваться цветом переднего плана; если этот параметр опущен, то будет использован последний установленный цвет переднего плана; В - указывает, что будет рисоваться прямоугольник! BF ~ указывает, что будет рисоваться закрашенный прямо- угольник; Если последний параметр ("В", "BF") отсутствует, то будет нарисована линия. Примеры: 10 SCREEN 2 20 FOR 1=И ТО 50 30 LINE(128,96)-(RND(l)*100,RND(1)*100>,9 40 NEXT 50 GOTO 50 Рисуются линии из точки (128,96). 10 SCREEN 2 20 LINE(40,40)—(80,80),11,В 30 GOTO 30 Рисуется прямоугольник. 10 SCREEN 2 20 LINE(80,80)—(180,180),,BF 30 GOTO 30 Рисуется закрашенный прямоугольник. Координаты (X,Y) могут быть любыми арифметическими выражениями в диапазоне от -32767 до +32768, но на экране будут отображаться точки в диапазоне от 0 до 255 по оси X и от 0 до 191 по оси Y. Верхний левый угол соответствует точке с координатами (0,0).
44 Функция POINT Z-POINT«X>,<Y» Этот оператор выдает код цвета точки на графическом экране. <Х> - любое арифметическое выражение, дающее координату по оси X (от И до 255); <У> — любое арифметическое выражение, дающее координату по оси Y (от 0 до 191 >j Если бит изображения равен 1, то переменная Z принимает значение от О до 15 равное цвету изображения. Если бит изображения равен В, то выдается цвет фона. Если координаты точки выходят за пределы экрана, то Z принимает значение —1. Оператор PSET PSET CSTEP3 (<X>,<Y>) С,<цвет>] Этот оператор рисует точку, координаты вычисляются также как и в операторе LINE. Наиболее часто PSET используется для точечного построения графиков различных функций. Пример: 10 SCREEN 2 20 FOR IM ТО 100 30 PSET(1*2,I),2 рисует график функции Y=2X 40 NEXT 50 GOTO 50 Оператор PRESET PRESET CSTEP1 (<X>,<Y>) Е,<цвет>] Этот оператор полностью аналогичен PSET в том случае, если указан параметр <цвет>, если <цвет> отсутствует, то PRESET стирает точку изображения.
45 ипеоатоо GET GET EESTEP] (<X>.<Y>> J - ESTEP] (<X1>.<Y1>). <имя массива? .-•тот опеоатоо запоминает в массиве гоаоическую иншооманию с жоана, ограниченную поямоугольником с кооодинатами (X. Y>-(X1. Yl> В каждый элемент массива записывается интоомаиия по 16 точкам иэобоажения Опеоатоо GET в сочетании с PUT позволяет пеоемещать по экоану с графическую информацию, массив должен объявляться до выполнения опеоатооa GET. Пример: 10 SCREEN 2 20 DIM М(1000),N(2500) 30 GET(40,50)—(80.80).М(0) 40 GET(100,100)—(170,170).N(0) Массив M позволяет запомнить 160 * 160 точек, a N — 80 * 80 точек. □пеоатор PUT PUT ESTEP] (<X>.<Y>> , <имя массива> Этот опеоатоо выдает из массива графическое изобоажение, запомненное оператором GET. (X,Y> опоеделяют левую веохнюю точку прямоугольника, с которой изображение будет выведено на экоан. Пример: 10 SCREEN2 20 PUT(80,80).М(0> 3.4.14. Ввод данных с клавиатуры Оперatoo INPUT INPUT Е<"подсказка”>:] <список пеоеменных> Этот опеоатоо пеоеводит SEPICMK в о ежим ввода. На экоан в позицию KvocQoa выдается стандартная подсказка — знак и пробел, kvdcdd перемешается на 2 позиции впоаво. БЕЙСИК переходит в оежим ввода.
46 <Список переменных> - одна или несколько простых переменных или элементов массива, разделенные запятой. <Подскаэка> - набор символов, который будет выдан на экран перед стандартной подсказки. Режим ввода продолжается до твх пор, пока не будет нажата клавиша <ВК>. Вы можете набирать данные, сдвигать курсор и редактировать текст в пределах строки. После нажатия клавиши <ВК>, вся набранная информация (от первоначального положения курсора до его текущей позиции) считывается слева направо. Если в операторе INPUT указано несколько переменных, то при вводе значения должны разделяться запятыми. Если делается попытка присвоить арифметической переменной строчную константу, то выдается сообщение "ПОВТОРИТЕ ВВОД". Пример: 1И INPUT "ВВЕДИТЕ ФАМИЛИЮ И ГОД РОЖДЕНИЯ"; ВЙ,CsPRINT ВЙ; 0 RUN ВВЕДИТЕ ФАМИЛИЮ И ГОД РОЖДЕНИЯ*? КУПРИЯНОВ,1957 КУПРИЯНОВ 1957 Ок функция INKEYE ХЙ=^КЕУЙ Эта функция осуществляет ввод одного символа из буфера клавиатуры и передает его в строковую переменную. Если буфер пуст, INKEYE возвращает пустую строку Нажатие любой клавиши формирует код, который может быть прочитан этой функцией. Основным достоинством INKEYE является то, что символ не высвечивается на экране и нет ожидания нажатия клавиши. Эту функцию можно использовать для управления программой, не останавливая ее работу.
i юимеоы : 10 PRINT"НАЖМИТЕ ЛЮБУЮ КЛАВИШУ АЛЯ ПРОДОЛЖЕНИЯ" 20 IF INKEYfc-"" THEN 20 10 AB=lNKEYi>i IF AB«="S" THEN GOSUB 100 20 GOTO 10 3.4.15. Вывод на печать Опеоатоо LPRINT f LPRINT <список выоажений> Этот оператор аналогичен оператору PRINT, за исключением того, что выводит информацию не на экран, а на печать. Команда LLIST LLIST Е<номер строки>3 Эта команда аналогична команде LIST и выводит текст программы на печать. 3.4.16. Игровые манипуляторы Функция STICK X«=STICK <<число>) <Число> — аоишметическое выражение : 0 — обозначает клавиатуоу: 1.2 - разъемы манипулятора 2 и 1. Эта функция читает состояние манипулятора или клавиатурных клавиш управления курсором и выдает число от 0 до 8. опоеделяюшев одно из 8 направлений или нейтральное положение. Следующий рисунок демонстрирует оазличные значения Функции STICK
48 Клавиши клавиатуры вверх. вниз- вправо и влево выдают соответственно значения 1. 5. 3 и 7. Нажатие одновременно двух соседних клавиш дает значения 2, 4. 6 и 8. Если не нажата ни одна из клавиш, функция дает значение И. Пример : 10 D=STICK(0) чтение состояния клавиатуры 20 IF D=0 THEN 100 ничего не нажато, пеоеход к 100 30 IF D=1 THEN... анализ направления Одновременное нажатие двух противоположных клавиш (вверх-вниз, влево—вправо) дает значение 0. функция STRIG X=STRIG «число» <Число> — аоиометическое выражение в диапазоне от 0 до 4. С помощью этой функции можно определить состояние пусковых кнопок манипуляторов или клавиатуры, для которой пусковым устройством является клавиша "пробел”. Функция принимает значение 0 ('’ложь") если кнопка не нажата или 1, если нажата. 'Число> определяет опрашиваемое устройство: 0 — клавиатура; 1, 3 — кнопка 1 манипуляторов 2 или 1; 2, 4 — кнопка 2 манипуляторов 2 или 1.
49 3.4.17. Выдача звукового сигнала Оператор ВЕЕР [ <0N> ВЕЕР J I<ОРЕ> Этот оператор позволяет выдавать короткий тональный звуковой сигнал через встроенный звонок. < ВЕЕР ON и ВЕЕР OFF включают и выключают подачу звукового сигнала при нажатии клавиш. Программирование музыки Оператор ВЕЕР выдает короткий звуковой сигнал. Для воспроизведения нот необходима подача последовательности И и 1 в старший разряд 82 регистра ввода-вывода. В табл. 5 приведены коды и длительности нот для первой октавы- Для второй октавы код нот в 2 раза меньше чем для первой, а длительность в 2 раза больше и т.д- Значения, приведенные в таблице, весьма приблизительные. Более точного воспроизведения музыкального фрагмента Вы можете добиться после прослушивания и корректировки программы. Таблица 5 Нота ! Код ноты Длительность ноты до • 86 ре 76 ми 67 фа ' 63 соль 56 ля 50 си 45 26 27 30 31 34 39 45 В Приложении 8 приведен пример программы, воспроизводящий фрагмент арии тореадора из оперы Бизе "Кармен**-
50 4. СООБЩЕНИЯ ОБ ОШИБКАХ При обнаружении ошибки в программе, если она не перехватывается средствами обработки ошибок, выдается сообщение: •>ХХ ERROR IN ZZZZ где: ZZZZ - номер строки программы; XX — код ошибки. Аале» перечислены все возможные коды ошибок и их причина. 1 - "NEXT без FOR" Оператор NEXT не соответствует никакому предварительно выполненному оператору FOR. 2 - “синтаксическая ошибка" Обнаружена строка, содержащая некорректную последовательность символов (непарные скобки, ошибка в названии команды или оператора, неправильная пунктуация и т. д. ) . 3 - "RETURN без GDSUB" Оператор RETURN не соответствует никакому предварительно выполненному GOSUB. 4 — "выход за конец DATA” Обнаружен оператор READ, для которого нет оператора DATA с еще не прочитанными данными. 5 — "неправильный вызов функции" Б числовой или строчной функции указан неправильный параметр (например: выходящий за допустимые пределы ). 6 - "переполнение" Численный результат вышел за допустимые пределы. 7 — "Переполнение памяти" Нет свободной памяти для размещения текста программы или ее временных переменных.
51 8 ~ "неопределенный номер строки” Номер строки в GOTO, GDSUB, IF/THEN и т.д. не соответствует никакой существующей строке программы. 9 - "выход з* границы массива" На элемент массива ссылаются с индексом, превышающим размерность массива, или с неправильным количество^ индексов. 10 - "повторное описание массива" с Ава оператора DIM выданы для одного и того же массива или оператор DIM выдан для массива после того, как для него установлены границы по умолчанию. 11 - "деление на 0" Обнаружено деление на 0 или возведение 0 в отрицательную степень. 12 — "неисполняемый оператор" Обнаружена попытка непосредственно исполнить оператор, имеющий смысл только в рамках программы. 13 - "несоответствие типов" Строчной переменной присваивается числовое значение, или функции, ожидающей числовой аргумент, передан строчный. 14 "переполнение строк"- Недостаточно памяти для размещения значений строчных переменных. Рекомендуется выполнить оператор CLEAR с параметром, указывающим большую длину строкового пространства. 15 - '"слишком длинная строка" Сделана попытка создать строчное значение длиннее 255. 16 - "слишком длинная формула" Выражение слишком длинное или сложное, рекомендуется разделить его на несколько более просты’.:.
52 17 - “нмоаможно продолжить" Сделана попытка продолжить выполнение программы, которая: - была задержана из-за ошибки; — была модифицирована во время останова; - не существует. 1В — "неопределенная функция пользователя" Сделано обращение к функции пользователя до ее определения с помощью DEF FN. 19 - "ошибка ввода-вывода" Аля печатающего устройства обнаружена ошибка, которую система не может исправить. 20 — "нет оператора RESUME" Выполнялась перехватывающая программа, которая не содержит оператор RESUME- 21 — "RESUME без ошибки" Оператор RESUME обнаружен не в перехватывающей программе. Все остальные коды задаются пользователем с помощью оператора ERROR. Дополнительно могут выдаваться следующие сообщения об ошибках: — DEVICE 1/0 ERROR — ошибка при чтении с магнитной ленты. - VERIFY ERROR — ошибка сравнения при чтении с магнитной ленты.
53 Приложение 1 СПИСОК КЛЮЧЕВЫХ СЛОВ БЕЙСИКА В скобках приведены номера страниц описания указанных операторов БЕЙСИК® в данной книге. ABS (30) INKEYS (46) REM (36) AND (17) INP (37) RESTORE (36) ASC (31) INPUT (45) RESUME/NEXT (35) ATN (30) INT (31) RETURN (20) AUTO (19) KEY (23) RIGHTS (32) ВЕЕР (49) KEY ON/OFF (24) RND (31) BLDAD (22) LEFTS (32) RUN (25) BSAVE (21) LEN (32) SAVE (22) CHRB (31) LET (30) SCREEN (41) CLEAR (23) LINE (42) SGN (31) CLOAD (21) LIST (20) SIN (31) CLS (39) LLIST (47) SPACES (32) COLOR (39) LOAD (23) SPC (33) CDNT (26) LOCATE (40) SQR (31) COS (31) LOG (31) STICK (47) CSAVE (20) LPRINT (47) STOP (26) CSRLIN (40) MIDS (32) STRS (33) DATA (35) NEW (20) STRIG (48) DEF FN (24) NOT (17) STRINGS (33) DIM (25) ON GDTD/GOSUB (29) TAB (33) END (26) ON ERROR GOTO (34) TAN (31) ERL (34) DR (17) TR DN/DFF (24) ERR (34) OUT (37) USR (38) ERROR (34) PEEK (37) VAL (33) EXP (31) POINT (44) VPEEK (38) FOR/NEXT (27) POKE (38) VPOKE (39) FRE (31) POS (40) WIDTH (41) GET (45) PRESET (44) &H (17) GOTO (29) PRINT (42) &B (17) GDSUB (28) PSET (44) НЕХЯ (32) PUT (45) IF/THEN (29) READ (36)
54 С А ш А Я Е Р А Д А Приложение 2 ТАБЛИЦА КОДОВ КОИ-в МЛАДШАЯ ТЕТРАДА 0 В 0 3 6 В А В С о Е 2 3 5 6 А В С D © © * ♦ ♦ - □ о 31 сГ •i' / •# + "Г Н F +- 1 — г л 1- j X у' -f- t ’’ # й - & С > к + - 0 1 2 з 4 5 6 7 8 9 з < = > > э н В С Г» Е F е Н I J К L И N 0 р С! R S т и и и И V Z Е V 1 а h с d е Т у h i .1 к 1 пг н о р Я г S t и V W У Z .f } — и М — - м 1 R 1 * ► 1 < X М м S> ♦ м R Я мм сс В Г П Е 0 и j * й 9 м •S € — п = + > < г J - с« * Yl 2 1 к> э. Е- м. л е Ф г и — Н л М н О и я F с т ж в к- ы в HJ ч ъ Hi А Е Ц Д Е ф Г X И й К Л М Н О П Я Р С т У Ж В ь Ы ы ш э щ ч Ъ
55 Приложение 3 РЕГИСТРЫ ВВОДА - ВЫВОДА Регистр 80 Этот регистр предназначен для установки конфигурации адресного пространства БП ЭВМ и работает в режиме записи и чтения, биты 76 54 32 10 ! ! Выбор конфигурации для адресое с 0000 до 3FFF ! ! ! Выбор конфигурации для адресов с 4000 до 7FFF ! ! Выбор конфигурации для адресов с 8000 до BFFF ________----------.------------------—-------—--------------- ! Выбор конфигурации для адресов с С000 до FFFF Для каждого блока адресов конфигурация ОЗУ определяется двумя битами следующим образом: 00 - ПЗУ; 01 — разъем расширения 1; 10 - разъем расширения 2; 11 - ОЗУ. После инициализации е регистре 80 записано (FC)-
56 Регисто в1 Этот оегисто выдает состояние стооки клавиатуоной матоииы и оабо- тает оежиме чтения. Матоииа подключена к оегистоv следующим оьоазом: биты: 7 о 5 4 2 1 0 ‘ 7 ’ 6 • 5 ' 1 4 ’ 3 ! 2 ’ 1 ! 0 ! стоока 0 • ? 1 . 1 - ! ! 9 ' 8 1 ' В ! А • ё А ' ! } i ’ { ! 2 ! J ‘ I ! н 1 1 G F ! E D ! C ’ 3 > R ' Q ! р 1 1 0 ! । N ' M L ! К ! — it — 4 • Z « Y ’ X ' W ’ ! V ! U * T • S 1 5 ’ F3 ’ F2 ! F1 ! О ! ' АЛ© ! FP(D ’ УПР ’ РГ ! i —u — 6 ’ <^7 ! СЕЛ ! < 1 • стоп 1 ! TAB ’ ПР® ! F5 • F4 ' 7 ! ► ! ▼ ! Д - ч ! ИЗ ! B3 • CTPH 'ПРОБЕЛ' 8 I ’ Н— • 1 ==2> 1 • 5 • Г ч 9 Регисто 82 Этот оегисто оаботает на запись и имеет следоюший шоомат: биты 76543210 Быбоо стооки клавиатуоной матоииы Включает/выключает мотоо магнитофона Индикация "РЕГИСТР’' Вывод на магнитофон 3bvk встооенного оезонатооа
57 Регистр S4 Этот регистр работает на запись и чтение и определяет местоположение видео-ОЗУ и режим экрана БП ЭВМ. биты 7654 3 2 10 ! 1 ' 1 Не используются > « --------—----—-------------------------•---- • ' 1-графический режим • । —------------------------------------ ' ’ 0-32 знака; 1-40 знаков 1 ' _______________________________________—---- 15 и 14 разряды адреса видео ОЗУ Регистр S5 Через этот регистр байт данных передается на печатающее устройство. Регистр S6 биты 7654321 0 • • ' ! • Состояние печати ' 1 Не используются Гашение изображения । < —---------------------------------- Индикация "АЛф" Не используются
58 Регистр 88 Этот регистр определяет цвет переднего плана и фона в режиме 0 и цвет рамки в режимах 1 и 2. Режим 0: биты 765432 1 0 । 1 ' Цвет переднего плана Цвет фона Режим 1 и 2г биты 76543210 Не используются Цвет рамки Регистр 90 Определяет положение текстового буфера в видео-ОЗУ в режимах 0 и 1. Режим 1: биты 7654321 0 ------ ' 1 1 ' 10 разряд адреса - 11 разряд адреса 12 разряд адреса • ' ----------------------- 13. разряд адреса ! 0-е значения Режим 0: биты 76543210 ------ 1 1 1 ' 0-е значение 1 ' ' 11 разряд адреса 1 । --------------------- 1 1 12 разряд адреса । । ______,________________ 1 ' 13 разряд адреса 0—₽ значения
59 Регистр 91 Определяет Нрложение знакогенератора в видео-ОЗУ в режимах 0, 1 и положение буфера экрана в режиме 2. биты 76543210 ------ tiii 0-е значение । । ।---------------—---------- • • ' 11 разряд адреса « I I ------------------- f 12 разряд адреса • —----------------—--- • 13 разряд адреса । -------------------------- 0—е значения Регистр 92 Определяет положение массива графики в режиме 2- биты 7654321 0 0-е значения t -------------------- 13 разряд адреса 0-е значения Регистр 93 Определяет положение массива цвета в режиме 2. биты 76543210 1 0—е значения 13 разряд адреса 0-е значения
ой Рвгиствы 8С и 8D Опоеделянгг положение кооодинатной dvhkh и кнопок манипулятооов 2 и 1 соответственно, оаботают только в оежиме чтения. Биты : 78543210 ' ’ '! ’ ' ’ 1 1 Впеоед • । j । । 11 _____________________ ! 1 ’ ! 1 1 ! Назад Влево • * • • • Впоаво 1 1 Кнопка 1 ! ’ Кнопка 2 । j --------------------------------- Не используется Вход магнитофона (только в оегистое 8D)
61 Приложение 4 РАСПРЕДЕЛЕНИЕ ПАМЯТИ При работе интерпретатора БЕЙСИК память БП ЭВМ распределяется следующим образом: ОЗУ ПЗУ 0000 ---------------------------------------------------------- । £ ВИДЕО - ОЗУ ! БЕЙСИК • • 16 Кбайт - 16 Кбайт ! ‘ 4000 --------—---------- ' “ i ' ' Область текста . * БЕИСИК-программ. j ! Простые переменные, массивы. • Стек а Строковая область । F000 ----------------------------- Системная рабочая область । 4 Кбайт. FFFF------------------------------
Приложение 5 КОДУ КОМАНД МИКРОПРОЦЕССОРА К5ВИ 1 В ! 1 ! 2 ! 3 ! 1 4 ! 5 ! 6 ! 7 ! S ! 9 ’ A ! В ’ C 1 D ’ E 1 F ! । ! 0 ’ NOP ! LXI 1 B,b ! STAX ! В ’ INX ! ! 3 ! INR В ! DCR 1 ! В ! MVI 3,1 ! RLC ! DAD ! В ! LDAX! • В 1 DCX 1 В ’ INR ! C ! DCR C ! MVI ' C,l ! RRC ! В 1 ! 1 i ! LXI ! D,& ! STAX ! D • INX ! ! D ! INR D ' DCR ! ! D • MVI D,l ' RAL i ’ DAD > D ! LDAX' 1 D ! DCX ! D ! INR ' E ! DCR E ! MVI ! E,« ! RAR ! 1 ! ! 2 ! ! LXI ! H,& » SHLD ! INX ! ! H ! INR H ! DCR ! ! H ! MVI H,l ; DAA ! - DAD ! H ! LDAX! ! * • DCX ! H ! INR ! L ! DCR L ! MVI ! L,# ’ CMA ! 2 ! ! 3 J ! LXI ! RP, & ! STA ! # ! INX ! I SP ! INR M ’ DCR ! ! M ! MVI M,l ; STC i ! DAD ! ! SP ! ! LDAX! ! ♦ 1 DCX ! SP ! INR ’ A ’ DCR A ! MVI ! A,# ! CMC ! 3 i ! 4 ! MOV 1 В,В ! MOV ! B,C ’ MOV ! B,D ! MOV I ! B,E ! MOV B,H ! MOV ! ! B,L ! MOV B,M ! MOV ' B,A ! MOV ! C,B ! MOV ! ! C,C ! 1 MOV ! C,D ! MOV ’ C,E ' MOV ! C,H ! MOV C,L ! MOV ' C,M ' MOV ! ! C,A ! 4 ! ! 5 ! MOV ! D,B 1 MOV ! D,C ! MOV ! D,D ! MOV ! ! D,E ! MOV D,H ’ MOV ! • D,L ! MOV DjM ! MOV ! D,A ! MOV ! E,B ! MOV ! ! E,C ! MOV ! E,D ! MOV 1 E,E ' MOV ! E,H ’ MOV E,L ! MOV 1 • E,M ! 1 MOV ! I E,A ! 5 ! ! 6 ! MOV ! H,B ! MOV ’ H,C ! MOV ’ H,D 1 MOV ! ! H,E ! MOV H,H 1 MOV ! ! H,L ! MOV H,M ! MOV 1 H,A 1 MOV ! L,B ! MOV ! ! L,C 1 MOV ' L,D ! MOV ! L,E ! MOV ! L,H ! MOV L,u ! MOV ! ! L,M ! 1 MOV ! ! L,A ! 6 i ! 7 ! MOV ! M,B ! MOV ’ M,C ! MOV 1 ! M,D ! ! MOV I 1 M,E ! MOV M,H ! MOV ! ! M,L ! MOV 1 M,M I 1 MOV ! M,f : ’ MOV 1 A,В ! MOV ! ! A,C ’ MOV ! A,D ! MOV 1 A,E ! MOV ' A,H ! MOV A,L ! MOV I ! A,M ! MOV ! A,A ! 7 ! съ ! а 1 ADD • В 1 ADD 1 C I ADD ! ! D ! ADD ! E ! ADD H ! ADD I ! L ! ADD ! M 1 ADD ! A I 1 ADC ' В ! ADC ! ! C ! ADC ’ Г ! ADC ! E ! ADC ’ H ! ADC L ! ADC 1 ! M ' ADC 1 A ! 8 J hJ : 9 ! SUB 1 ! В 1 1 SUB 1 c ! SUB ! D ! SUB 1 E ! SUB H 1 SUB ! ! L ! SUB ! M ! SUB ! A ! 1 SBB в 1 SBB ! ! C ! SBB ’ D ! SBB ! E ! SBB ! H • SBB L ! SBB ! ! M 1 SBB ! A ! 9 ! ' а 1 ANA ! ' В 1 ! ANA ' C 1 ANA ’ 1 D 1 ANA 1 E ’ ANA H ! ANA ! 1 L ’ ANA 1 M ! ANA 1 A ! XRA В 1 XRA 1 C ! XRA ! D ’ XRA ’ E ! XRA ! H 1 XRA L ! XRA ! M ! XRA • A ! A ! в 1 ORA 1 * В ! ORA C ? ORA ! ! D ! ORA 1 E ! ORA H ! ORA 1 ! L ! ORA ! M 1 ORA 1 A ! CMP В 1 CMP ! ! C ! CMP ! D ! CMP ! E CMP ! H ! CMP L ! CMP ’ ! M ! CMP ! A ! В ! 1 С ( RNZ ! POP В 1 JNZ 1 ’ • ! JMP ! * ! CNZ f ' PUSH1 1 В I ADI ! 1 • RST ! В ! RZ 1 RET ' J» ' i CZ ! * ! CALL 4 ! ACI ! 1 t ' RST ! 1 ! C ! ! D j RNC ! POP D ! JNC ! OUT ! N ! CNC « ' PUSH! ! D ’ SU1 ! t ’ RST ! 2 ! RC i i JC ! ♦ ! IN 1 N ! cc • # ! - 1 SBI 1 ! t ' RST ! 3 ! D ! ! Е ! RPO ! POP H ! JPO ; XTHL! CPO : ♦ 1 1 PUSH! ! H ! ANI ! 1 ! RST ! 4 ! RPE ! PCHL! JPE ’ * ! XCHG! CPE ! ♦ ’ - ! ! XRI ! ! # ! RST ' 5 ! E ! ! F i ! RP J POP 1 PSW 1 ' JP ! 1 « ! DI ! T CP ' 1 PUSH1 PSW ! ORI ! # ! RST ! 6 ! RM J SPHL! JM 1 • ! E! ? CM ! ♦ । • ! 1 CPI • 1 t ! RST ! 7 ! F ! N - номер регистра ввода- вывода; ; & - 16-й pa □рядный операнд; * - 16 -и разрядный адрес; । * - G-и pa □рядный операнд
63 Приложение 6 СТРУКТУРА ВИДЕО-ОЗУ РЕЖИМ 0 0000 0040 05FC ' 0,0 ’ 1,0 ___*39,0 !____1 05 ! 06 ! 07 * 0D ! 0Е ! 0F ! 0,1 ! 1,1 '...’39,1 '...! 05 * 06 ’ 07 • 0D ’ 0Е ! 0F ' 0,23! 1,23*.-- *39,23!... ! 05 ’ 06 • 07 • 0D ! 0Е • 0F буфер экрана 1^6 байт 0800 не используется изображение кода 00 изображение кода 07 • змакоге- ! нератор > 2048 • байт изображение кода F8 !.....! изображение кода FF 1000 3FFF резерв 12 Кбайт или другие буферы и знакогенераторы Буфер экрана: 24 строки по 64 символа. На экране отображается 40 первых символов каждой строки. В конце каждой строки записаны коды "05, 06, 07, 0D, 0Е, 0F" для регенерации памяти. Адрес буфера задается в ячейках памяти FA05, FA06. Знакогенератор содержит изображения 256 символов в формате 8 на 8 точек, но отображение на экране в формате 6 на 8 точек. Адрес знакогенератора задается в ячейках памяти FA09, FA0A.
64 РЕЖИМ 1 ID 0000 И,И ! 1,0 ! 2,0 ’ 3,0 ! !28,0 !29,0 '30,0 !31,0 ’ 0020 0,1 1,1 ! 2,1 ! 3,1 !28,1 !29,1 '30,1 буфер экрана 768 байт 02Е0 0,23! 1,23! 2,23! 3,23! 28,23!29,23!30,23*31,23!’ не используется 0400 цвет !цвет !цвет !цвет ! кедов 1 кодов!кодов ? кодов! 00-07!08—0F!10-17!18-1F! 'цвет !цвет !цвет !цвет ! !кодов!кодов!кодов!кодов 1 !Е0-Е7!E8-EF!F0-F7!F8-FF! таблица цвета 32 байта 0800 1000 ! не используется изображение кода 00 изображение кода F8 изображение кода 07 изображение кода FF резерв 12 Кбайт или знакоге- нератор 2048 байт 0 2 3FFF • другие буферы и знакогенераторы Буфер экрана: 24 строки по 32 символа. Адрес буфера задается в ячейках памяти FA05, FA06. Знакогенератор, содержит изображения 256 символов в формате 8 на 8 точек. Адрес знакогенератора задается в ячейках памяти FA09, FA0A. Таблица цвета: каждый байт содержит цвет изображения и фона для каждой группы из 8 точек. Аадрес таблицы задается в ячейках FA07,FA08 .
65 РЕЖИМ 2 0000 ! • г i i । ! изображение кода 00 । знакогенератор \ 000В ! ! изображение кода 01 । 1 i । । 1 > । । экрана 07FB ! ! изображение кода FF । 204В байт 0B00 ! • изображение кода 00 i знакогенератор средней части экрана 0808 1 ! изображение кода 01 । i । > t । > 0FFB ! ! изображение кода FF । < । । 204В байт 1000 * • изображение кода 00 знакогенератор 100В ! изображение кода 01 । । i 1 > > । । экрана 17FB ’ ! изображение кода FF < t । i i 2048 байт / 1В00 • । 256 байт ! ! буфер верхней : > • ! части экрана Z буфер экрана 1900 ! t 256 байт ’ 1 буфер средней ! 1 части экрана > 24 строки по 32 многоцветных изображения 1А00 ! t 256 байт ’ ! буфер нижней : > ! ! части экрана i i / 1B00 ! 1 не t используетея• 1FFF X » n ft о
66 2000 । 2008 » t а । 27F8 । 2800 2808 а । । 2FF8 । । 3000 । 3008 । । । » । 37F8 । 3800 । : не । используется: цвет изображения и фона кода 00 --и---- 01 — " — FF — и — ИР — " — 01 — - — рр — — 00 — " — 01 -- " — FF ! коды цвета ’ ! знакогенератора ! > верхней части ! ! экрана ! ! 2048 байт • < ! ! коды цвета ! • знакогенератора ! > средней части > > । ! экрана ! 1 । ' 2048 байт ! < • • кодм цвета ! j । ! знакогенератора ! > нижней части ’ • । • экрана • ! 2048 байт • 1 Ш Ш I- Адрес массива изображения задается в адресах FA0F, FA10, адрес массива цвета - в адресах FA11, FA12- Адрес буфера экрана задается в адресах FA09, FA0A и имеет значе- ния аналогично режимам 0 и 1
Ь7 Приложение 7 ТОЧКИ ВХОДА В BIOS ПЗУ > Адрес! Входные парам. ’ Выходные парам. функции ! 003В • А - символ ’ вывод символа на экран в ! 1 текущую позицию курсора • 0041 • А - символ ! вывод символа на печать ’ 1 f • 0044 • а । FA24 цвет точки ' FA25 цвет фона ! FA26 цвет рамки ! установка цвета ’ 0047 • А - номер ряда ’ А - состояние опрос ряда клавиатурной ‘ । клавиатурной * клавиатурной матрицы " матрицы : 0-9 ! матрицы И04А । HL - адрес видео-! - ОЗУ (VRAM) ’ А - байт чтение байта из VRAM • 004D HL - адрес VRAM • запись байта в VRAM ’ А - байт ! - 0030 А — флажки ! HL - адрес вве- редактирование ! D - строка курс. 1 денного текста А—76543210, 0-установка ! Е - позиция курс.! курсора; 1-вывод текста • HL — адрес текста! на экран; 2-ввод логичес-! для вывода ! кой строки ? ... текст..- 00...1 ..текст...0D0A 0056 А — константа ! ВС — счетчик ! HL - адрес VRAM ! ( RAM ) • заполнение области кон- ! стантой ! 0059 ВС - счетчик ' DE - куда ( RAM, • VRAM ) ! HL - откуда(VRAM)' пересылка VRAM->RAM, ’ VRAM->VRAM ! 005С ’ ВС - счетчик ! ’ DE - куда (VRAM, ! • RAM) ! 1 HL — откуда (RAM)• пересылка RAM->RAM, ! RAM->VRAM • 0067 • A - байт ’ ’ ВС — адрес (RAM, • » VRAM) ' перекодировка в ! символьное представление ! 006А • A — режим 1 > > установка режима 0,1,2 !
! Адоес! Входные пасам. ! Выходные пасам. iDvhkumm : 1 006D ' А - КОД (0.1,2) J А — код напоав— * чтение напоавления ‘ 1 0-клавиатуоа ! гения ! клавиатуоы (манипулятооа)! 1 1 1-манипулятоо 2 « г । 2—манипулятоо 1 « 1 1 0070 ! А - код (0.1.2) ! А - состояние ’ опоос состояния кнопки ! 1 0-клавиатуоа ! кнопки "пообел" । 1 « 1—манипулятоо 2 । । ! । 2—манипулятоо 1 ! 0— не нажата > । г । ! 1- нажата 1 0079 ' ! Z - Флаг ’ опоос fivffleoa клавиатуоы ‘ 1 ! Z = 1 - fivtceo пуст ‘ Z = 0 — символ в fevtbeoe • । । । 007С ! А - символ ! ввод символа из £va>eoa ’ < ! клавиатуоы; если fivtfceo 1 1 • nvcT, то ожидание нажатия! » I । 009Е . выключить изойоажение ! 1 1 ! куосооа ! I । 1 00 А1 ’ включить изойоажение 1 i 1 куосооа ! * 1 1 00А4 : ВЫКЛЮЧИТЬ НИЖНЮЮ CTDDKV ’ J ключей т В0А7 ’ ВКЛЮЧИТЬ НИЖНЮЮ CTDDKV ’ 1 t ключей ! I 00В0 1 ’ очистить £vu>eo клавиатуры: j । По именание: А — оегисто ойшего назначения ( аккумулятоо ) : HL, ВС, DE — оегистоовые паоы: RAM - ОЗУ; VRAM — видео ОЗУ.
69 Приложение 8 ПРИМЕР ПРОГРАММИРОВАНИЯ МУЗЫКИ 100 ОПИСАНИЕ МАССИВОВ 55 НОТ И ИХ ДЛИН 110 DIM N(55), D(55) t20 ‘— ПОДПРОГРАММА, В МАШИННЫХ КОДАХ, ВОСПРОИЗВЕДЕНИЯ ОДНОЙ НОТЫ — 130 DATA F3,21,00,90,ЗА,01,90,57,15,СА,21,91,46,ЗЕ,80,D3,82,05,С2 140 DATA 0F,91,46,ЗЕ,00,D3,82,05,С2,18,91 ,СЗ,08,91 ,ЗЕ, 11-,32,ED,FB ,С9 150 '----- ЗАПИСЬ ПОДПРОГРАММЫ В ПАМЯТЬ НАЧИНАЯ С АДРЕСА &Н9100 ------ 160 RESTORE 130 170 FOR 1=0 ТО &Н26 180 READ АЯ 190 РОКЕ &H9100+I, VAL(”&Н”+АЯ) ♦ 200 NEXT 210 --------ПЕРЕПИСЬ В МАССИВЫ "N” И "D" КОДОВ ИЗ дата------------- 220 RESTORE 330 230 FOR 1=1 ТО 55: READ N(I); NEXT 240 FOR 1=1 TO 55: READ D(I): NEXT 250 '--- ПЕРЕПИСЬ ТЕКУЩИХ НОТЫ И ДЛИНЫ В АДРЕСА &Н9000 И &Н9001 ---- 260 '— И ИХ ВОСПРОИЗВЕДЕНИЕ. И ТАК 55 РАЗ -------------------------- 270 FOR 1=1 ТО 55 280 POKE &Н9000, N(I) 290 POKE &Н9001, D(I) 300 FOR Б=1 ТО 2: X=USR(&Н9100): NEXT 310 NEXT 320 '------------КОДЫ 55-И НОТ-------------------- 330 DATA 43,38,43,50,50,50,56,50,47,50,47,56,43,50 340 DATA 63,76,56,86,56,56,38,43,47,50,56,50,47,50 350 DATA 67,50,50,53,45,33,33,33,38,40,38,56,50,47 360 DATA 255,50,63,38,43,255,63,86,47,50,56,63,63 370 '------------КОДЫ 55-И ДЛИН------------------- 380 DATA 96,75,48,78,78,58,34,58,46,156,92,51,48,200 390 DATA 62,40,34,134,136,34,50,48,47,39,34,39,47,156 400 DATA 60,78,78,49,23,110,110,28,50,48,50,34,39,92,5 410 DATA 39,31,50,208,2,31,26,46,78,68,224,1 420 END