Давно хотел попрограммировать. На рк много видов бэйсика. Где найти описания хотя бы одного со всеми операторами и примерами программ? В журнале Радио нашёл всего пару статей. Буду очень благодарен за помощь
Вид для печати
Давно хотел попрограммировать. На рк много видов бэйсика. Где найти описания хотя бы одного со всеми операторами и примерами программ? В журнале Радио нашёл всего пару статей. Буду очень благодарен за помощь
Долгий А. Бейсик для «Радио-86РК»//Радио.— 1987-№ 1
МРБ-1139 Домашний компьютер Г.В.Зеленко 1989
Подавляющее большинство информации об интерпретаторах Бейсик для Радио-86РК базируется на статьях в журнале "Радио". Даже в документации к Апогей-БК01(Ц) обнаруживается текст из этих статей, так что он действительно канонический:
- Радио 1985 №1-3: дамп+описание Бейсик для Микро-80
- Радио 1986 №2-3: статьи по программированию с примерами, подключение "мыши", карта памяти, кодирование текста программы
- Радио 1987 №1: адаптация этого Бейсика для Радио-86РК (кратко - только изменения)
- Радио 1988 №8: дамп+описание Бейсик *Микрон*, с примерами и цветной вкладкой-шпаргалкой. Подробно описываются отличия от первой версии
МРБ1139 содержит в себе текст статей 1985 №1-3 и 1986 №2-3, но пользоваться ей надо с особой осторожностью, припоминаю там адское обилие опечаток в технической информации, которых не было в журнальных статьях.
Все необходимые статьи очень качественно отсканированы и свободно выложены тут: http://archive.radio.ru/web/
Какой Бейсик порекомендуете выбрать? Желательно похожий на QBasic или GW-Basic.
Здесь множество видов этого ЯП — https://rk86.ru/catalog/
Существует ли компилятор?
yevrowl, все они очень похожи друг на друга (но не на QB или GW), ведут свою историю вроде бы от Microsoft Basic 3.2 8k.
Самый последний и самый продвинутый - Микрон (который с приглашением ЖДУ), совместим также с более ранними версиями.
Компилятора нет.
Есть компилятор. Но весьма странный и целочисленный.
Нашел, SBasic Microposol
Благодарю, знакомый диалект, похож на Advanced Basic от IBM.
Где-нибудь можно узнать список поддерживаемых команд?
Спасибо! Доступен ли для скачивания? Есть ли инструкция?
Посмотрите еще тут https://disk.yandex.ru/i/lOYo_ImzeAVmM
Это оригинальное руководство на Бейсик от УМПК-Р 32
Это Бейсик переделанный с Микро-80 для Радио-86РК
Есть и описание самого УМПК https://disk.yandex.ru/i/cARi0BxneAVmj
Во второй ссылке есть хорошие примеры
Здравствуте!
Может кто помочь или подсказать, где в коде бейсика Микрон найти вывод псевдографических операторов по горизонтали на экран. Я изменил экран у РК86 на 80х60, в коде бейсика нашел где изменить начальные и максимальные координаты экрана для полей символьных операторов и AT x,y и CUR x,y и максимальное значение для ветикальной координаты псевдографических операторов, а для горизонтали никак не найду.
Может у кого есть ассемблер с комментариями?
Вроде как нашел где идет проверка величины по -Х, но как, где и что исправлять уже не в моих силах. Поставил костыль -00 по адресу -$194B.
Не был, а это оно и есть. То есть два в одном.
Меня заинтересовал данный бейсик. Поскольку документации нет, пришлось дизассемблировать (люблю я это дело, всякие там бейсики/форты дизассемблировать).
Странное оно. С виду, в коде довольно много оригинальных идей, но некоторые части написаны откровенно плохо. Например умножение/деление сделано итеративным сложением/вычитанием.
В паре мест тоже есть вопросы, походу файл немного битый. Полагаю, работает не всё.
Написал свою документацию на SBASIC - MICROPOSOL 04.91:
Скрытый текст
Список операторов командной строки (не могут встречатся в тексте программы или быть скомпилированы):
MAIN ARRAY MONITOR ASSEMBLER BASIC CSAVE CLOAD LIST CONT NEW RUN RENUM REGION SLOAD SSAVE AUTO ASAVE ALOAD VARIABLE
Список операторов бейсика:
COPY DPOKE NEXT LET IF GOTO GOSUB RETURN REM READ RESTORE FOR INPUT PRINT POKE STOP END CALL OUT DATA DEF EI DI INTERRUPT EXIT RST ON ORG
Список функций бейсика:
SGN INP RND ABS SIZE PEEK DPEEK RLC RRC
Операторы бейсика:
+ - * / >= <> > = <= < ^ ! & %
Директивы ассемблера:
ORG END SET DS DB DW
----------------------------------------------------------------
Краткое описание операторов командной строки
----------------------------------------------------------------
NEW
Очистка программы
LIST
LIST num
LIST num,count
Вывод программы, num - с какой строки, count - максимальное количество строк
RUN
Запуск (интерпретация) программы
CONT
Продолжение выполнения после STOP
CLOAD
CSAVE
Загрузка/сохранение программы на кассету в бинарном виде. Параметров (например имя программы) нет.
SLOAD
SSAVE
Загрузка/сохранение программы на кассету в виде текста.
ALOAD
ALOAD start
ALOAD start,step
ASAVE
Загрузка/сохранение программы на кассету в виде текста без номеров строк, для программ на ассемблере. Номера строк при загрузке формируются автоматически, start - номер первой строки, step - шаг нумерации
AUTO
AUTO start
AUTO start,step
Автонумерация строк, параметры аналогично ALOAD. Полезно при вводе программ на ассемблере.
RENUM
RENUM start
RENUM start,step
Перенумерация строк, параметры аналогично AUTO, большого смысла для программ на бейсике не имеет, т.к. GOTO не модифицируются. Полезно при вводе программ на ассемблере.
REGION size
Задаёт максимальный размер региона для скомпилированной программы. По-умолчанию 2Кб.
MAIN
MAIN (h,l)
Задаёт начальный адрес (см. директиву ORG) скомпилированной программы. h - старший байт адреса, l - младший. По-умолчанию определяется командой REGION.
ARRAY
ARRAY (h,l)
Задаёт начальный адрес массива, этот адрес используется только для скомпилированной программы, в режиме интерпретации массивом будет вся свободная память. По-умолчанию 0, в этом случае желательно не использовать массив в скомпилированной программе.
MONITOR
MONITOR (h,l)
Задаёт начальный адрес векторов runtime подпрограмм для скомпилированной программы. Возможно, эта runtime могла располагаться в ПЗУ. По-умолчанию 103h.
VARIABLE
VARIABLE (h,l)
Задаёт начальный адрес блока памяти для переменных. По-умолчанию 38DCh. Используется только для режима интерпретации. Теоретически, если установить этот адрес равным адресу блока переменных в скомпилированной программе, можно считывать переменные после завершения работы программы.
BASIC opts
ASSEMBLER opts
Компилирует программу, написанную на бейсике/ассемблере. Опции могут быть такие:
0 первый проход с сохранением таблицы символов (?)
1 первый проход ассемблера
2 второй проход с выдачей листинга
3 второй проход с выдачей листинга на магнитофон
4 второй проход с записью кода по заданному адресу (см. MAIN)
5 запись исходного текста на ассемблере на магнитофон
S выдать таблицу символов
Т.е. для компиляции нужно ввести BASIC 14
----------------------------------------------------------------
Краткое описание операторов бейсика
----------------------------------------------------------------
LET var=expr [, var2=expr2 ...]
Оператор присваивания, LET можно не писать.
PRINT "текст" [, ...]
PRINT expr [, ...]
PRINT #width, expr [, ...]
Оператор вывода. Можно ставить несколько запятых подряд, на каждую "лишнюю" будет выведен пробел. Текст может быть в одинарных или двойных кавычках, а также символы вида ^X (без кавычек).
INPUT ["текст",] var [, ...]
Оператор ввода. Текст - аналогично PRINT, однако нельзя несколько раз подряд, между текстами обязательно должна быть переменная.
FOR var=expr TO expr2 [STEP expr3]
NEXT var
Оператор цикла. Имя переменной в NEXT обязательно.
IF expr AnotherOps
Условный оператор. Если выражение равно нулю (или чётное) остаток строки пропускается, иначе выполняется. THEN отсутствует.
GOTO line
GOSUB line
Операторы перехода/вызова подпрограмм.
RETURN
Выход из подпрограммы.
ON expr GOTO line,line[,line ...]
ON expr GOSUB line,line[,line ...]
ON ERROR GOTO line
Переход по индексу/ошибке.
REM любой текст
Комментарий.
DATA expr,expr[,expr]
Данные. Можно использовать выражения. При компиляции пропускается (до конца строки, не используются).
READ var
Считывает данные. При компиляции пропускается (до конца строки, не используются).
RESTORE
Переносит указатель данных на первый DATA в программе. При компиляции пропускается (до конца строки, не используются).
STOP
Останов программы, продолжить можно при помощи CONT. При компиляции игнорируется.
END
Останов программы без возможности продолжить.
DEF FN X(var)=expr
Определение функции X (однобуквенная).
POKE (h,l),expr
DPOKE (h,l),expr
Запись байта/слова в память по адресу h*256+l.
CALL
CALL (h,l)
Вызов скомпилированной/произвольной подпрограммы.
OUT port,val
Вывод в порт.
EI
DI
Разрешение/запрещение прерываний.
INTERRUPT num,line[,num2]
Устанавливает обработчик прерывания num. num2 - непонятно пока.
EXIT
Выход из прерывания. Возможен вход в другой обработчик, если во время обработки возникло другое прерывание.
RST num
Выполняет инструкцию RST процессора. В данной версии вектора прерываний располагаются как раз в области 0008-0038, так что например командой RST 1 можно симулировать прерывание номер 1.
ORG (h,l)
Аналогична ассемблерной директиве ORG, за исключением формата параметра. В режиме интерпретации игнорируется.
COPY text
Копирует text непосредственно в ассемблерный листинг, т.е. фактически, это ассемблерная вставка. В режиме интерпретации игнорируется.
----------------------------------------------------------------
Краткое описание математических операторов и функций бейсика
----------------------------------------------------------------
+ - * / >= <> > = <= <
Стандартные математических операторы для целых чисел. Кроме того имеются:
^ унарный оператор инверсии бит
! операция побитового OR
& операция побитового AND
% операция побитового XOR
ABS(expr)
Абсолютное значение expr.
SGN(expr)
Знак expr в виде чисел -1,0,1
RND(expr)
Псевдослучайное число, expr делитель, на него делится случайное число из диапазона 0-65535. Возвращается остаток от деления. Алгоритм случайного числа очень плохой.
SIZE
Выдаёт количество свободной памяти.
PEEK(h,l)
DPEEK(h,l)
Считывает байт/слово из памяти по адресу h*256+l.
RLC(val,count)
RRC(val,count)
Циклически сдвигает байт val на count бит.
INP(port)
Считывает байт из порта port.
----------------------------------------------------------------
Переменные и другие особенности бейсика.
----------------------------------------------------------------
В данном бейсике есть только целочисленные (двухбайтовые) однобуквенные переменные A-Z, а также однобайтовые переменные A$-Z$ с побитовым доступом, т.е. например A$[4,2] это два бита расположенные со сдвигом на 4 бита влево. Однако адрес блока переменных можно менять оператором VARIABLE. Этот оператор единственный, который можно также использовать в программе, но только в режиме интерпретации. В режиме компиляции он недопустим.
Массивов, как таковых, в этом бейсике нет, но есть специальная переменная @, которую можно считать массивом. В режиме интерпретации она даёт доступ ко всей свободной памяти, т.е. максимальный индекс можно вычислить как SIZE/2-1. Для режима компиляции её адрес задаётся командой ARRAY. Аналогично однобайтовым переменным с побитовым доступом, можно использовать массив как байты, но в отличие от переменных это будут те-же байты свободной памяти, максимальный индекс SIZE-1. Примеры обращения к массиву:
@(0)=1
PRINT @(0)
@$[1,2](1)=3
PRINT @(0)
PRINT @$[2,2](1)
Например @$[0,8](3) это старший байт числа @(1).
Особенностью этого бейсика является также возможность сокращать операторы при помощи точки. Например можно писать ASS. вместо ASSEMBLER, например:
ASS. 12
покажет листинг программы на ассемблере.
[свернуть]
Alex_LG, Спасибо!
Всё облазил, но не нашел.
Что сделал: (адреса совпалают с журнальным В.МИКРОН)
Скрытый текст
Код:X18f7:
18F7 CD DC 0E call X0edc
18FA FE 50 cpi 50h ; ROWS
18FC D2 14 05 jnc X0514
18FF 4F mov c,a
1900 C5 push b
1901 CD D8 0E call X0ed8
1904 C1 pop b
1905 47 mov b,a
1906 FE 3C cpi 3ch ; LINES
1908 D2 14 05 jnc X0514
190B E5 push h
190C 21 10 DF lxi h,Xdf10 ; X,Y - 0,0
190F 11 B0 FF lxi d,Xffb0 ; 0-$FFB0=$50 ROWS
X1912:
1912 B7 ora a
1913 CA 1B 19 jz X191b
1916 19 dad d
1917 3D dcr a
1918 C3 12 19 jmp X1912
;
X191b:
191B 57 mov d,a
191C 59 mov e,c
191D 19 dad d
191E D1 pop d
191F C9 ret
;--- CUR
X1920:
1920 CD F7 18 call X18f7
1923 22 00 CB shld Xcb00
1926 3E 3D mvi a,3dh ; CURSOR - Y
1928 90 sub b
1929 67 mov h,a
192A 79 mov a,c
192B 32 63 20 sta X2063
192E C6 00 adi 0 ; CURSOR - X
1930 6F mov l,a
1931 22 02 CB shld Xcb02
1934 EB xchg
1935 C9 ret
;--- PLOT
1936 CD DC 0E call X0edc
1939 32 54 20 sta X2054
193C CD D8 0E call X0ed8
193F 32 55 20 sta X2055
1942 CD D8 0E call X0ed8
1945 32 56 20 sta X2056
X1948:
1948 3A 54 20 lda X2054
194B 00 NOP ; поставил - 0, оригинал - B7h
194C FA 14 05 jm X0514 ; переход при X>127
194F 3A 55 20 lda X2055
1952 FE 78 cpi 78h ; LINES*2 псевдографика - Y
1954 D2 14 05 jnc X0514
1957 AF xra a
1958 3A 54 20 lda X2054
195B 1F rar
195C 5F mov e,a
195D 79 mov a,c
195E 1F rar
195F 4F mov c,a
1960 AF xra a
1961 3A 55 20 lda X2055
1964 1F rar
1965 57 mov d,a
1966 79 mov a,c
1967 17 ral
1968 17 ral
[свернуть]
Сейчас корректно работает PLOT, CUR, AT. LINE чудит, короткие отрезки строит нормально по всему полю, длинные непредсказуемо.
Экранная область 80х64, скрыты по две строки сверху и снизу.
Подскажите пожалуйста, каким образом следует загружать Бейсик, а заодно передавать и сохранять исходники?
Вложение 83278
Частично выяснил:, затемКод:L
Передавать исходный текст можно при помощи Emu80 (Отображение → Вставить текст), но остался вопрос про сохранение программ.Код:J 1C00
P. S. Выяснил, что исправленный «Бейсик-Микрон» сохраняет при помощи команды CSAVE.
Спасибо за документацию. Исходя из части этих сведений:
Скрытый текст
REGION size
Задаёт максимальный размер региона для скомпилированной программы. По-умолчанию 2Кб.
MAIN
MAIN (h,l)
Задаёт начальный адрес (см. директиву ORG) скомпилированной программы. h - старший байт адреса, l - младший. По-умолчанию определяется командой REGION.
ARRAY
ARRAY (h,l)
Задаёт начальный адрес массива, этот адрес используется только для скомпилированной программы, в режиме интерпретации массивом будет вся свободная память. По-умолчанию 0, в этом случае желательно не использовать массив в скомпилированной программе.
MONITOR
MONITOR (h,l)
Задаёт начальный адрес векторов runtime подпрограмм для скомпилированной программы. Возможно, эта runtime могла располагаться в ПЗУ. По-умолчанию 103h.
VARIABLE
VARIABLE (h,l)
Задаёт начальный адрес блока памяти для переменных. По-умолчанию 38DCh. Используется только для режима интерпретации. Теоретически, если установить этот адрес равным адресу блока переменных в скомпилированной программе, можно считывать переменные после завершения работы программы.
BASIC opts
ASSEMBLER opts
Компилирует программу, написанную на бейсике/ассемблере. Опции могут быть такие:
0 первый проход с сохранением таблицы символов (?)
1 первый проход ассемблера
2 второй проход с выдачей листинга
3 второй проход с выдачей листинга на магнитофон
4 второй проход с записью кода по заданному адресу (см. MAIN)
5 запись исходного текста на ассемблере на магнитофон
S выдать таблицу символов
Т. е. для компиляции нужно ввести BASIC 14[свернуть]
...этот диалект Бейсика для Радио-86РК компилируемый? Возможно ли сохранение компилированной программы? Будет ли таковая запускаться в РК ДОС?
Да, программа на Бейсике или Ассемблере может быть скомпилирована. Результат будет лежать в памяти адресу, указанному оператором MAIN. Сохранить эту программу можно было бы на магнитофон из монитора, и работает она тоже по тем же адресам (предположительно, есть ещё ORG, скорее всего можно компилировать для размещения программы по другим адресам).
Какие условия должны соблюдаться, чтобы программа работала из РК ДОС, я не знаю.