ivagor, монументально. А chr или эквивалента для вывода не-ASCII кодов нет?
В том, другом бейсике, вроде был оператор PLOT, и еще, кажется, оператор переключения видеорежимов.
Вид для печати
ivagor, монументально. А chr или эквивалента для вывода не-ASCII кодов нет?
В том, другом бейсике, вроде был оператор PLOT, и еще, кажется, оператор переключения видеорежимов.
В IBASIC нет, поэтому я предложил использовать машиннокодовую процедуру.
Кратко про графические возможности MB.COM
CLS режим. Младший полубайт. 0 - "обычный" режим 256; 8-15 - режим 256 "early scroll"; 1-7 - режим 512.
SCRN палитра,цвет_фона
COLOR цвет изображения
CURS x,y - перемещение графического курсора (режим 256)
PLOT x,y - рисование линии из текущей точки до x,y (режим 256)
Наличие пробела после ключевого слова обязательно
Завершение эпопеи с IBASIC. Все же решил пробежать по служебным директивам (здесь три из них под номерами 1, 2, 5)
1. Служебные директивы (только те, которые необычные, RUN и LIST не вижу смысла комментировать)
1.1 SCR - просто стирает текущую программу в памяти (в других бейсиках это часто NEW)
1.2 NEW[имя] - как SCR, но с заданием имени.
1.3 SAVE[имя] - выгрузка программы
1.4 OLD[имя] - загрузка программы
1.5 SYS - выход в дос
1.6.1 NAME - показывает текущее имя программы
1.6.2 NAMEимя - задает новое имя программы
1.7 UNSAVE[имя.BSC] или ERA[имя.BSC] - удаление программы с диска
1.8 LLIST - в данном бейсике синоним LIST, такие дела
1.9 NULLаргумент. Аргумент от 0 до 255. Задание задержки при переходе к новой строке или при скролле.
Замечание по поводу директив с именем в квадратных скобках. Это значит, что имя можно указывать, а можно не указывать, и тогда будет использовано имя заданное при старте программы или через NAME (или запрошено в случае OLD).
Дополнение про GRAF - это не просто очистка экрана, этот оператор установит 3й бит в BFDC и BFE6 и получится аналог CLS 8-15 в MB.COM. Выйти из этого режима можно по директиве LIST
И мне все же интересно, какой бейсик был прототипом. Это явно не микрософт.
- - - Добавлено - - -
Свел заметки по IBASIC в один файл и исправил ошибки.
Существует как минимум два разных BIOS для "Океана", с разными адресами рабочих ячеек. BFDC и BFE6 (занятно, что сразу в двух местах устанавливается бит), похоже, относятся ко второй версии BIOS, в которой добавлены процедуры работы с НГМД и поддержка клавиатуры изменена в сторону "матричных" вариантов.
OLD и UNSAVE это прям BASIC-PLUS-2 для PDP-11. UNTRAP тоже, но из фортрана откуда-то.
Спросить уже не у кого https://ocean.ru/index.php/novosti-l...eevich-tilinin
Можно предположить, что перепиливали с чего-то доступного в период с 82 по 86 год. Не считая совсем экзотики, доступны тогда были СМ ЭВМ, клоны PDP-11, а из восьмибитных даже не сообразить сходу.
По поводу IBASIC - порядок токенов напоминает xybasic (на котором был основан бейсик для Баширии-2м), но как будто специально изменён порядок оставшихся токенов. Однако первый токен LET на своём месте, больше вроде нигде такого не было. Вот список токенов из исходников:
Скрытый текст
Код:;branch addresses for command execution, in order of table position
cmdta: dw let
dw ifcom
dw for
dw next
dw goto
dw gosub
dw print
dw input
dw read
dw retrn
dw def
dw dim
dw gtdel
dw restr
dw stop
dw endcm
if not wild
dw null
endif
dw calcm
dw scall
if not wild
dw put
dw poke
dw wait
endif
dw tcoff
dw tcon
dw tpoff
dw tpon
dw break
dw unbrk
if not wild
dw enabl
dw dsabl
dw rndiz
endif
dw rem
dw delay
dw save
dw load
dw list
dw clear
dw newcm
dw run
dw cont
if not camac
dw auto
dw delet
dw edit
dw renum
endif
if not wild
dw move
endif
dw exec
if epstn
dw plot
endif
if sdisk and not c3885
dw open
dw close
dw linpt
dw margn
if bendx
dw bmsos
dw bname
dw bzap
else
dw dircm
dw scrat
endif
endif
if bendx
dw bfils
endif
if camac
dw camcd
dw declr
dw drivr
dw xenab
dw rstat
dw camcl
dw cinit
dw cinhi
dw loopc
dw bypas
dw onlin
dw pulse
dw open
dw close
if not c3885
dw creat
endif
dw lampa
dw bkset
dw block
dw cenab
dw cdsab
dw sttim
else
if wild
dw wgbuf
else
dw assig
endif
if realt
dw sttim
else
dw time
endif
endif
if packi
dw onlin
dw oflin
dw field
endif
dw on ;must follow ONLINE
[свернуть]