Basic CP/M-80 от Orion Soft 1996 г. Орион-128,  основы программирования, уроки языка

Как научиться владеть языком Basic V2.0 в Орион-128 и Орион-ПРО.

Продаю платы и наборы микросхем, куплю микросхемы Платы и комплектующие на ПК Орион-128

01.04.2023 обновление информации

Е:01.11.96 (С) 1996г. Орионсофт

БЕЙСИК  страница 10

Образы диска являются загрузочными работают под CP/M-80 V3.61,  V3.62, V3.63 и выше

Скачать образ диска для Готека в формате *.hfe

Скачать образ в формате *.odi

Это описание BAS10.TXT скачать

20. Реакция на ошибки и обработка ошибок в языке Бейсик

20.1. Оператор ERROR для определения используемого кода ошибки и для моделирования ошибки в рамках тестирования программы

С помощью оператора ERROR вызываются стандартные сообщения об ошибках из набора сообщений об ошибках Бейсик-интерпретатора, соответственно, моделируются определенные ошибки при тестировании программы.
Формат: ERROR (<аргумент>)
Аргументом может быть числовое выражение, числовая переменная или числовая константа, принимающая значения больше нуля и меньше 255. При задании значения, соответствующего определенному коду ошибки, оператор ERROR так имитирует возникновение этой ошибки, что, например, возможно проверить корректность работы подпрограммы обработки ошибок. Если должен быть использован собственный код ошибки, то рекомендуется использовать коды  начиная с 254 в обратном порядке, чтобы не нарушать совместимости с поздними версиями бейсик-интерпретатора. Список всех сообщений об ошибках, которые могут быть использованы в операторе ERROR, представлен в приложении в.

Примечание:
Если в программе имеется оператор ON ERROR GOTO (смотри пункт 20.2.),
То при компиляции должна быть задана опция /Е.

Пример: 10 ERROR 4
RUN
OUT OF DATA IN 10
200 ON ERROR GOTO 500
210 INPUT "параметр";к%
220 IF K% < 20 THEN ERROR 254
...
500 IF ERR=254 THEN PRINT "неверен параметр"

20.2. Оператор ON ERROR GOTO для разветвлений в процедуре реакций на ошибки

Формат: ON ERROR GOTO (<номер строки>)
При встречающейся ошибке происходит ответвление программы к указанному номеру строки, с которого начинается участок программы, предназначенный для реакции на ошибки и прочие необычные ситуации в Бейсик-программе. Этот участок программы должен завершаться оператором RESUME (см. пункт 20.3.). Разветвление программы выполняется после его первой обработки. При этом возникающие ошибочные ситуации являются причиной соответствующих переходов. В одной программе могут встретиться несколько операторов ON ERROR  GOTO. Переход всегда осуществляется к той строке, которая была указана в последнем из подобных операторов.
Для отмены действия оператора ON ERROR GOTO должен быть задан оператор с номером строки, равным 0. Если оператор достигается внутри программы обработки ошибок, то выполнение этой части программы прерывается и выдается сообщение об ошибке. Рекомендуется использовать этот оператор во всех тех  случаях, когда ошибки не могут быть устранены с помощью процедуры обработки ошибок.

Примечание:

Действие оператора ON ERROR GOTO сохраняется и в режиме команд после программного прерывания. В процедуре обработки ошибок не может быть выполнена реакция на возникающую ошибку.
Пример: 10 ON ERROR GOTO 10000
. . .
200 INPUT "количество:";ANZ%
210 IF ANZ% > 50 THEN ERROR 243
. . .
10000 IF ERR=243 THEN PRINT "ошибка при вводе количества!"
10010 IF ERL=210 THEN RESUME 200

указание: при использовании бейсик-компилятора необходимо выбирать опцию/е.

20.3. Оператор RESUME для завершения процедуры обработки ошибок

Оператор RESUME завершает вызванную по ON ERROR GOTO процедуру
обработки ошибок, чтобы возобновить нормальное выполнение программы.
Формат: RESUME [0]
или
RESUME [NEXT]
или
RESUME [<номер строки>]
Форма RESUME или RESUME 0 обеспечивает продолжение с той строки, в
которой возникла ошибка.
Форма RESUME NEXT обеспечивает продолжение программы со строки,
следующей за той, в которой возникла ошибка.
Форма RESUME <номер строки> обеспечивает продолжение программы со строки с
заданным номером.

Примечание:
Если требуется компилировать бейсик-программу, то следует использовать
опцию/X.

20.4. Переменные ERR и ERL

Переменные ERR и ERL являются зарезервированными идентификаторами
переменных. При возникновении программной ошибки переменная ERR содержит
соответствующий код ошибки. Аналогично при возникновении ошибки переменная
ERL содержит номер строки, где она возникла. Если ошибка возникла при прямом
вводе, то номер строки равен 65536. Обеим переменным в Бейсик-программе не
могут быть присвоены значения. Однако их значения могут быть проверены. При
этом проверка переменной ERL должна производится следующим образом:
IF ERL = <номер строки> THEN
Тем самым гарантируется, что после использования команды RETURN (см.
пункт 20.3.) Автоматически будет проставлен правильный новый номер строки.


ПРИЛОЖЕНИЕ А. Возможности вызова программ в машинных кодах в языке Бейсик
-------------
В языке Бейсик имеется возможность вызова программ в машинных кодах.

1. Функция USR

С помощью DEF USR определяется начальный адрес подпрограммы. В регистр
а заносится переменная какого типа передается в подпрограмму в машинных
кодах:
Наполнение регистра А Тип передаваемых переменных
--------------------- ----------------------------
A=2 - целое число, занимающее 2 байта
а=3 - цепочка символов
а=4 - вещественное число обычной точности,
занимающее 4 байта
а=8 - вещественное число удвоенной
точности, занимающее 8 байт
Если передаваемый параметр является числом, то пара ррегистров "HL"
указывает на аккумулятор (FAC), в котором запоминается число. Аккумулятор
имеет длину 8 байт: FAC7, FAC6, ..., FAC0. FAC7 является 1-м байтом, FAC0 -
8-M байтом).
Само число находится в аккумуляторе следующим образом:
- целое число в байтах FAC3 (младшие биты) и FAC2 (старшие биты)
- вещественное число обычной точности в байтах FAC3 (младшие биты
мантиссы), FAC2 (средние биты мантиссы) и FAC1 (старшие биты
мантиссы, 8-й бит знаковый); в FAC0 находится значение экспоненты,
уменьшенное на 128;
- вещественное число удвоенной точности находится в байтах с FAC7 до
FAC1 (мантисса, в FAC7 младшие биты, в FAC1 старшие биты и знак); в
FAC0 находится значение экспоненты, уменьшенное на 128.
Если передаваемый параметр является строкой, то пара регистров "СЕ"
указывает на трехбайтовое поле описания строки. В 0-м байте этого поля
находится длина строки (в диапазоне от 0 до 255). В байтах 1 и 2 размещается
адрес начала строки (в 1-м байте младшие биты, во втором байте старшие
биты).
Внимание! Если строковый параметр является строкой из Бейсика, то поле
описания строки находится посередине программы. Ни при каких обстоятельствах
оно не должно быть изменено или испорчено!
Этого, вообще говоря, можно избежать, если вместо строковой переменной
передавать строковое выражение
<строковая переменная>+" "
В этом случае будет построено новое поле описания строки вне области
программы, на которое указывает пара регистров "DE".
Функция USR возвращает, как правило, значение того же типа, что и
входной параметр. От программиста при возврате параметров требуется
правильно задать характеристики типа данных.

2. Оператор CALL

Если по CALL вызывается функция или подпрограмма без параметров, то
возврат происходит по команде RET. Если по CALL вызывается функция или
подпрограмма с параметрами, то для каждого передается 2-хбайтовый адрес.
Если параметров не более трех, то адреса находятся в парах регистров "HL"
(первый параметр), "DE" (второй параметр) и "BC" (третий параметр). Если
параметров более трех, то адреса первых двух параметров находятся в парах
регистров "HL" и "DE". Адреса всех остальных параметров размещаются в
массиве данных. Начальный адрес этого массива находится в паре регистров
"BC". Количество параметров и их типы не контролируются. Ответственность за
это возлагается на программиста.
Внимание! Передача параметров полностью аналогична передачи в языках
Фортран, других Бейсик-диалектах с возможностями компиляции, Паскаль, ПЛ/1,
Кобол и т.Д. Тем самым с помощью оператора CALL из бейсика можно
непосредственно вызывать загрузочные модули, созданные другими
компиляторами.


ПРИЛОЖЕНИЕ В. Сообщения об ошибках Бейсик- интерпретатора
-------------
При работе Бейсик-интерпретатора могут выдаваться следующие сообщения
об ошибках:

1. NEXT WITHOUT FOR В операторе NEXT указана переменная, не
употребленная ни в одном из ранее обработанных
операторов FOR.
2. SYNTAX ERROR В программной строке найдены ошибочные символы
(например, непарные скобки, неверный оператор,
ошибочная последовательность точки, запятой и
точки с запятой).
3. RETURN WITHOUT GOSUB Обнаружен оператор RETURN, для которого не су-
ществует GOSUB.
4. OUT OF DATA Выполнен оператор READ, в то время, как в фай-
ле больше нет констант.
5. ILLEGAL FUNCTION CALL Производится передача функции недопустимого
параметра.
6. OVERFLOW Результат операции превышает допустимый диапа-
зон значений.
7. OUT OF MEMORY Не может быть предоставлено достаточно рабочей
памяти озу (причины:слишком большая программа,
слишком много переменных, слишком сложные вы-
ражения, слишком большая глубина вложенности
циклов FOR-NEXT и подпрограмм).
8. UNDEFINED LINE NUMBER В операторах типа GOTO-, GOSUB, IF-THEN, ELSE-
или DELETE указан номер строки, не
существующей в программе.
9. SUBSCRIPT OUT OF RANGE Используемый индекс элемента массива лежит вне
заданных границ. Для многомерного массива воз-
можно отсутствие индекса.
10. REDIMENSIONED ARRAY Размерность массива определяется несколько раз
это также имеет место, когда элементу массива
присваивается значение (при этом автоматически
определяется размерность 10), а затем в опера-
торе DIM повторно определяется размерность.
11. DIVISION BY ZERO Деление на нуль встретилось в выражени или
при возведении в отрицательную степень. В пер-
вом случае принимается наибольшее возможное
число с правильным знаком, во втором- наиболь-
шее возможное положительное число. Прерывание
программы не происходит.
12. ILLEGAL DIRECT Недопустимая прямая обработка.
13. TYPE MISMATCH Справа и слева от знака присвоения стоят пере-
менные разных типов - строковые и числовые.
14. OUT OF STRING SPACE Строковые переменные занимают всю доступную
область памяти, так как их слишком много или
они слишком длинные.
15. STRING TOO LONG Была сделана попытка создать цепочку символов
из более чем 255 символов.
16. STRING FORMULA TOO Строковое выражение слишком длинное или слиш-
CEMPLEX ком сложное. Выражение следует разделить на
несколько более меньших выражений.
17. CAN'T CONTINUE Программа не может быть продолжена после пре-
рывания, так как она изменена.
18. UNDEFINED USER FUNCTION Функция USR вызывается прежде, чем она опреде-
лена.
19. NO RESUME По ON ERROR GOTO был осуществлен переход в
подпрограмму обработки ошибок, не содержащую
20. RESUME WITHOUT ERROR Обнаружен оператор RESUME до того, как возник-
ла ошибка.
21. UNPRINTABLE ERROR Для возникшей ошибки не существует сообщения
об ошибке. Возникает преимущественно тогда,
когда задан оператор ERROR с неопределенным
кодом ошибки.
22. MISSING OPERAND В операторе не указан соответствующий операнд.
23. LINE PUFFER OVERFLOW Была сделана попытка занести в строку более
255 символов.
26. FOR WITHOUT NEXT Для оператора NEXT отсутствует соответствую-
щий оператор FOR.
29. WHILE WITHOUT WEND Для оператора WHILE отсутствует соответствую-
щий оператор WEND.
30. WEND WITHOUT WHILE Для оператора WEND отсутствует открывающий
оператор WHILE.
50. FIELD OVERFLOW В операторе FIELD определено больше байт, чем
задано для длины записи в операторе OPEN-"R".
51. INTERNAL ERROR Внутри бейсик-программы в машинных кодах воз-
никла ошибка. Прикладная программа не являет-
ся причиной этой ошибки.
52. BAD FILE NAME Требуемый файл с заданным номером не был отк-
рыт.
53. FILE NOT FOUND Оператор KILL-, LOAD- или OPEN содержит имя
файла, отсутствующего на дискете.
54. BAD FILE MEELE Была сделана попытка выполнить оператор GET
или PUT для последовательного файла, загру-
зить с помощью LOAD файл прямого доступа или
задать оператор OPEN с ошибочным режимом дос
тупа.
55. FILE IS ALREADY OPEN Была сделана попытка повторно открыть уже
открытый файл.
57. DISK I/O ERROR При чтении или записи на внешнее устройство
возникла ошибка, которая не может быть устра-
нена операционной системой.
58. FILE ALREADY EXISTS В операторе NAME в качестве нового имени за-
дано имя уже существующего на текущем нако-
пителе файла.
61. DISK FULL Исчерпана область памяти на внешнем запоми-
нающем устройстве.
62. INPUT PAST END Была сделана попытка с помощью оператора
INPUT прочесть последовательный файл после
конца данных.
63. BAD RECORD NUMBER В операторе PUT или GET используется неразре-
шенный номер записи (меньше 1 или более 32767)
64. BAD FILE NAME В операторе KILL-, LOAD-, SAVE- или OPEN-
использовано имя файла, не соответствующее до-
пустимому формату.
66. DIRECT STATEMENT IN При загрузке программного файла в формате
FILE ASCII считана строка без номера строки. Заг-
рузка прервана.
67. TOO MANY FILES В оглавлении файлов нет места для записи ново-
го файла.

Примечание:
Не указанные значения номеров сообщений не используются.


ПРИЛОЖЕНИЕ С. Сообщения об ошибках Бейсик-компилятора
-------------
При трансляции программы компилятором могут возникнуть различные
сообщения об ошибках, которые можно разделить на два класса:
- ошибки должны быть устранены, так как иначе программа не сможет
правильно работать;
- предупреждения: имеются неточности, допускаемые компилятором.
Решение о необходимости изменений является делом пользователя.

Сообщения об ошибках при трансляции выдаются вместе с текстом ошибочной
программной строки. Под этой строкой стоит символ "^" в том месте, где
компилятором найдена ошибка. Рядом с этим символом выдается код ошибки,
состоящий из двух букв.
Могут встретиться следующие коды:
сообщения об ошибках:
BS - недопустимый индекс у переменной массива или неверное количество
индексов.
CD - в операторе COMMON имя переменной встречается по меньшей мере два раза.
CN - в операторе COMMON встретился ранее не определенный массив.
CO - операторы COMMON находятся в программе на недопустимом месте.
DD - для массива имеется оператор DIM, в то время, как массив уже определен
в другом месте прграммы.
FD - функция определяется два раза.
FN - операторы FOR и NEXT не совпадают или в двух вложенных циклах
используется одна и та же переменная цикла.
IN - запрошенный по оператору %INCLUDE программный файл не найден на внешнем
запоминающем устройстве.
LL - делается попытка использовать программную строку из более чем 254
символов.
LS - длина цепочки символов больше 255 символов.
OM - переполнение рабочей области ОЗУ - слишком большой массив, слишком
много переменных, много номеров строк для переходов или слишком большая
программа.
SN - синтаксическая ошибка.
SQ - имеется дублирование номеров строк или операторы стоят в неправильной
последовательности.
TC - слишком большое выражение; например, оно содержит слишком много
переменных, слишком много размерностей или слишком много аргументов.
TM - при присвоении или при передаче функции параметров используются
несовпадающие или неразрешенные типы данных.
UC - в программной строке содержится неопределенный оператор.
UF - вызывается функция, которая не определена.
WE - или WHILE без WEND, или WEND без WHILE.
IO - деление на нуль.
IE - отсутствующая опция /Е.
IX - отсутствующая опция /Х.
Предупреждения:
ND - размерность массива не определена явно.
SI - встретился оператор, игнорируемый компилятором.
Сообщения об ошибках, выдаваемые при обработке скомпилированной
программы те же, что и у Бейсик-интерпретатора. Все вместе эти номера ошибок
представлены ниже, где указаны только номер ошибки и ее значение. Поясняющий
текст следует смотреть в приложении В.
Номер ошибки Значение номера ошибки
------------ -----------------------
2 SYNTAX ERROR Синтаксическая ошибка
3 RETURN WITHOUT GOSUB RETURN без GOSUB
4 OUT OF DATA Конец данных
5 ILLEGAL FUNTION CALL Некорректный вызов функции
6 OVERFLOW Переполнение
9 SUBSCRIPT OUT OF RANGE Значение индекса вне диапазона
11 DIVISION BY ZERO Деление на нуль
14 OUT OF STRING SPACE Превышен размер строки
20 RESUME WITHOUT ERROR RESUME без ошибки
21 UNPRINTABLE ERROR Нераспознаваемая ошибка
50 FIELD OVERFLOW Переполнение поля
51 INTERNAL ERROR Внутренняя ошибка
52 BAD FILE NUMBER Неверный номер файла
53 FILE NOT FOUND Файл не найден
54 BAD FILE MODE Неверный режим работы с файлом
55 FILE ALREADY OPEN Файл уже открыт
56 DISK I/O ERROR Ошибка ввода/вывода на диске
58 FILE ALREADY EXISTS Файл уже существует
61 DISK FULL Диск полон
62 INPUT PAST END INPUT после END
63 BAD RECORD NUMBER Неверный номер записи
64 BAD FILE NAME Неверное имя файла
67 TOO MANY FILES Слишком много файлов


ПРИЛОЖЕНИЕ D. Таблица кодов ASCII
-------------
Шестнадцатеричное Десятичное Представление Название
представление значение символа символа
-------------------------------------------------------------------------------
Управляющие символы:
00 0 NUL заполнитель
01 1 ^A SOH начало заголовка
02 2 ^B STX начало текста
03 3 ^C ETX конец текста
04 4 ^D EOT конец передачи
05 5 ^E ENQ запрос
06 6 ^F ACK подтверждение прием
07 7 ^G BEL сигнал
08 8 ^H BS символ назад
09 9 ^I HT табуляция
0A 10 ^J LF новая строка
0B 11 ^K VT вертикальная табул.
OC 12 ^L FF продвижение формул.
0D 13 ^M CR возврат каретки
0E 14 ^N SO сдвиг наружу
OF 15 ^O SI сдвиг внутрь
10 16 ^P DLE смена канала
11 17 ^Q DC1 уст-во управления 1
12 18 ^R DC2 уст-во управления 2
13 19 ^S DC3 уст-во управления 3
14 20 ^T DC4 уст-во управления 4
15 21 ^U NAK нет подтверждения
16 22 ^V SYN синхросимвол
17 23 ^W ETB конец блока передачи
18 24 ^X CAN отмена

 

 

Продолжение дальше....

 

 

Осваиваем микрокомпьютер интересная книга в 2-х томах по программированию на бэйсике от А до Я

Осваиваем микрокомпьютер К-1 Б.Р.Смит 1989 скачать часть 1-я

Осваиваем микрокомпьютер К-1 Б.Р.Смит 1989 скачать часть 2-я

Программирование микропроцессорных комплектов i8080, 580вм80, z80, i8085, 1810, 1824

Орион-128 описание команд микропроцессора к580вм80 (Орион-Софт)

Язык Ассемблера для Ориона

Язык Си для Ориона

Язык Паскаль для Ориона

Язык Форт для Ориона

 

 

Купить платы, наборы микросхем на Орион-128, КР565РУ5В, КР565ру7В, к565ру5г AU, к565ру7г Au в позолоте, куплю микросхемы

 

Полезные и интересные статьи

На предыдущую страницу  На главную страницу  На следующую страницу