PDA

Просмотр полной версии : Поиск описания бэйсиков 86рк



fedorov.police80
12.05.2019, 01:18
Давно хотел попрограммировать. На рк много видов бэйсика. Где найти описания хотя бы одного со всеми операторами и примерами программ? В журнале Радио нашёл всего пару статей. Буду очень благодарен за помощь

krotan
12.05.2019, 21:16
Долгий А. Бейсик для «Радио-86РК»//Радио.— 1987-№ 1
МРБ-1139 Домашний компьютер Г.В.Зеленко 1989

ilya_dan
14.05.2019, 12:13
Подавляющее большинство информации об интерпретаторах Бейсик для Радио-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/

yevrowl
16.10.2025, 14:41
Какой Бейсик порекомендуете выбрать? Желательно похожий на QBasic или GW-Basic.
Здесь множество видов этого ЯП — https://rk86.ru/catalog/
Существует ли компилятор?

Pyk
19.10.2025, 02:34
yevrowl, все они очень похожи друг на друга (но не на QB или GW), ведут свою историю вроде бы от Microsoft Basic 3.2 8k.
Самый последний и самый продвинутый - Микрон (который с приглашением ЖДУ), совместим также с более ранними версиями.
Компилятора нет.

uart
20.10.2025, 06:54
Есть компилятор. Но весьма странный и целочисленный.

uart
25.10.2025, 00:20
Нашел, SBasic Microposol

yevrowl
25.10.2025, 16:53
ведут свою историю вроде бы от Microsoft Basic 3.2 8k.
Благодарю, знакомый диалект, похож на Advanced Basic от IBM (https://ru.wikipedia.org/wiki/IBM_BASIC).


Самый последний и самый продвинутый - Микрон (который с приглашением ЖДУ), совместим также с более ранними версиями.
Где-нибудь можно узнать список поддерживаемых команд?


Нашел, SBasic Microposol
Спасибо! Доступен ли для скачивания? Есть ли инструкция?

uart
28.10.2025, 00:15
Спасибо! Доступен ли для скачивания? Есть ли инструкция?
Инструкцию не видел, еще был подобный ассемблер.

kovdry
29.10.2025, 09:37
Посмотрите еще тут https://disk.yandex.ru/i/lOYo_ImzeAVmM
Это оригинальное руководство на Бейсик от УМПК-Р 32
Это Бейсик переделанный с Микро-80 для Радио-86РК

Есть и описание самого УМПК https://disk.yandex.ru/i/cARi0BxneAVmj
Во второй ссылке есть хорошие примеры

ValCher
29.10.2025, 22:09
Здравствуте!
Может кто помочь или подсказать, где в коде бейсика Микрон найти вывод псевдографических операторов по горизонтали на экран. Я изменил экран у РК86 на 80х60, в коде бейсика нашел где изменить начальные и максимальные координаты экрана для полей символьных операторов и AT x,y и CUR x,y и максимальное значение для ветикальной координаты псевдографических операторов, а для горизонтали никак не найду.
Может у кого есть ассемблер с комментариями?

ValCher
06.11.2025, 23:48
Вроде как нашел где идет проверка величины по -Х, но как, где и что исправлять уже не в моих силах. Поставил костыль -00 по адресу -$194B.

b2m
13.11.2025, 12:27
Инструкцию не видел, еще был подобный ассемблер.
Не был, а это оно и есть. То есть два в одном.

Меня заинтересовал данный бейсик. Поскольку документации нет, пришлось дизассемблировать (люблю я это дело, всякие там бейсики/форты дизассемблировать).
Странное оно. С виду, в коде довольно много оригинальных идей, но некоторые части написаны откровенно плохо. Например умножение/деление сделано итеративным сложением/вычитанием.
В паре мест тоже есть вопросы, походу файл немного битый. Полагаю, работает не всё.

Написал свою документацию на 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
16.11.2025, 05:23
а для горизонтали никак не найду.

Ищите последовательность

3A 27 00 lda TERMINAL_X
FE 48 cpi 048H ;максимальная позиция по Х

вместо 048H будет другое значение

ValCher
18.11.2025, 12:35
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, скрыты по две строки сверху и снизу.

uart
27.11.2025, 22:52
Не был, а это оно и есть. То есть два в одном.
Не, был чисто ассемблер, меньше места занимал.

b2m
28.11.2025, 00:04
Не, был чисто ассемблер, меньше места занимал.
Ну, может и был. Пойди найди тот ножичек...

yevrowl
05.12.2025, 08:29
Подскажите пожалуйста, каким образом следует загружать Бейсик, а заодно передавать и сохранять исходники?

83278

Частично выяснил:
L, затем
J 1C00

Передавать исходный текст можно при помощи Emu80 (Отображение → Вставить текст), но остался вопрос про сохранение программ.

P. S. Выяснил, что исправленный «Бейсик-Микрон» (http://old-dos.ru/index.php?page=files&mode=files&do=show&id=105808) сохраняет при помощи команды CSAVE.

yevrowl
05.12.2025, 17:27
Написал свою документацию на SBASIC - MICROPOSOL 04.91

Спасибо за документацию. Исходя из части этих сведений:

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РК компилируемый? Возможно ли сохранение компилированной программы? Будет ли таковая запускаться в РК ДОС?

b2m
05.12.2025, 21:13
...этот диалект Бейсика для Радио-86РК компилируемый? Возможно ли сохранение компилированной программы? Будет ли таковая запускаться в РК ДОС?
Да, программа на Бейсике или Ассемблере может быть скомпилирована. Результат будет лежать в памяти адресу, указанному оператором MAIN. Сохранить эту программу можно было бы на магнитофон из монитора, и работает она тоже по тем же адресам (предположительно, есть ещё ORG, скорее всего можно компилировать для размещения программы по другим адресам).

Какие условия должны соблюдаться, чтобы программа работала из РК ДОС, я не знаю.