Просмотр полной версии : Бейсик на УКНЦ
Хотел адаптировать для Бейсика УКНЦ (Вильнюс) свою игрушку "Морской бой". Но столкнулся с серьёзной проблемой - катастрофической нехваткой памяти. Свободно всего 13 с чем-то кб. Загружаю систему в минимальной конфигурации (просто переименовав файл STARTS.COM), стало свободно 17650 Мб. Загружаю свою программу - 1176 байт. При попытке её запустить - Нет больше памяти. Подрезал программу, убрал заставку, стало свободно 2836 байта. И всё равно нет больше памяти. Да сколько же ей надо-то для работы??? Очень обидно. На Корвете памяти прекрасно хватает (27 кб), а тут всё упёрлось. Можно ли как-то ещё уменьшить аппетиты ОС? Какая версия RT11 наименее прожорливая? Сейчас у меня RT11SJ 5.01.
Нашёл такое:
Бейсик УК-НЦ
ЛИнТех 1995.03.05
Версия 1.0
Руководство пользователя.
Данный продукт, далее именуемый просто Бейсик является усовер-
шенствованой версией Вильнюсского Бейсика 1988г. Бейсик полностью
совместим сверху вниз с предыдушими версиями. Следовательно все
написанное в документации "Бейсик. Руководство оператора." приме-
нимо и тут.
Ввиду таковой совместимости нет необходимости описывать все
операторы данного Бейсика. Достаточным будет описание дополни-
тельных возможностей, предоставляемых пользователю.
Всем, кто сталкивался с дисковой версией Вильнюсского Бейсика
знаком такой неприятный факт: программы работающие в сети отказы-
ваются работь на РМП. Причина - нехватка памяти, из за находя-
щейся в ней операционой системы. Решением этой проблемы стал эму-
лятор операций ввода/вывода ОС RT11. Данный эмулятор занимает в
паямти 1.5kb и не требует поддержки OС. Благодаря этому размер
доступной пользователю памяти составляет 27kb,что на 10kb больше,
чем в Дисковом Бейсике. Эмулятор приписан к Бейсику, и загру-
жается при запуске Бейсика. Бейсик можно запустить коммандой
монитора RT11:
Run [DEV:]Basic
где [DEV] - имя устройства, на котором находится файл Basic.Sav
После запуска бейсика рабочим становится устройсво NT0:
Новые операторы :
Оператор Disk.
Определяет рабочее устройство.
Формат :
Disk Number
Number - номер устроства, с которым в дальнейшем будет работать
Бейсик.
Параметр Number должен находится в диапазоне 0..7 : в против-
ном случае будет выдаваться сообщение "ошибка ввода/вывода."
Фактически данный оператор эквивалентен команде монитора RT11
Assign Nt<Number>: Dk:
Что-то ничего не понял.
Бейсик можно запустить коммандой
монитора RT11:
Run [DEV:]Basic
Если он работает без ОС, откуда возьмётся монитор, из-под которого его запускать? Или Бейсик после запуска выгружает систему из памяти и загружает свой эмулятор?
Number - номер устроства, с которым в дальнейшем будет работать
Бейсик.
Параметр Number должен находится в диапазоне 0..7 :
Что это за устройства? Дисководы, разделы жесткого диска?
В комплекте идут два файла - BASIC.SAV и DBAS.SAV. По инструкци нужно запускать первый. Но он у меня не запускается, выдаёт MON-F-Trap to 4. PANIC DUMP. Дальше идёт список содержимого регистров. DBAS.SAV работает, но толку от него, если ничего серьёзного в нём не запустишь.
Бейсик мог загружаться: с магнитофона, из ПЗУ, с дискеты, по сети. Потом Линтех забабахала свою сеть с выделенным сервером (i386). В сети Линтеха каждому юзеру выделялся сетевой диск. Вот они и Бейсик слегка "подточили".
О, Вильнюс да под RT-11 SJ !?
Там места под программу пользователя будет чуть ли не меньше, чем в БК0010-01.
Как бороться ? Варианты :
1. Паскаль-компилятор - переделать программу. Выйгрыш может быть совсем небольшой.
2. Использовать 2-машинную связку - исполняющая ЭВМ и ЭВМ ввода-вывода.
3. Написать свой компилятор под RT-11 - но это чрезвычайно сложно, и не особо выйграет для программы пользователя, использующей много функционала Бейсика.
4. Адаптировать имеющийся компилятор, перенеся RT-11 целиком в ПП - крайне сложное мероприятие по трудозатратам, но даст максимальную выгоду от УКНЦ. Размер текстовой программы пользователя всё равно будет не более ~16 Кбайт .
5. П.3 и п.4 вместе. Это скорее концепт по типу верха совершенства, реализуем только для УКНЦ. Но фундаментальное ограничение ЦП 56 Кбайт всё равно будет, и программа пользователя ( текстовая ) навряд ли растянется более 24 Кбайт + очень сложная компиляция.
Что делать, если текстовая программа пользователя больше ~24 Кбайт ?
1. Использовать ассемблер ( переписать программу ). При жонглировании оверлеями можно ( отчасти ) запускать программы до ~ пары метров , но они будут немного тормозить.
2. Использовать 32-битные М-ЭВМ.
В комплекте идут два файла - BASIC.SAV и DBAS.SAV.
Под RT-11...
BASIC.SAV - название "классического" бейсика. Возможно он сгенерён под другую конфигурацию. В нём нет экранного редактора. Видел версию к которому подцепили построчный редактор. Якобы сделанную на ВЦ МИТХТ. Сами они делали или где подсмотрели... Но синтаксис приличный. Была так же куча вариантов, в которые добавлялась работа с различной графикой. Например на "Электронике-60" были добавлены подпрограммы работы с "Новосибирской платой", даже был цвет. Целый класс такого добра был. Дистрибутивы были вполне доступны.
DBAS.SAV - вильнюсский бейсик. Тут с экранным редактором всё в наличии. Но есть куча недостатков.
Оказывается, вильнюсский Бейсик с компилятором, а не интерпретатором. Видимо, поэтому для запуска программы нужно так много памяти. Я уже обратил внимание на такую гадость, например:
10 GOTO 50
20 LALALA
50 END
60 BLABLA
В строках 20 и 60 абракадабра, но они не будут выполняться, казалось бы, фиг с ними. Однако всё равно будет выдавать синтаксическую ошибку. Это простейший пример, бывает, что-то где-то не доделано, там явные ошибки, просто обходишь это место, пока занимаешься другими кусками. А тут не обойдёшь. Меня когда-то в Q-Basic это доставало. Тогда я ещё не понимал разницу между компилятором и интерпретатором.
Хотя, когда я учился в институте, по моим воспоминаниям, синтаксические ошибки вылезали в процессе выполнения программы, когда исполнение доходило до строки с ошибкой. Но, может, я уже запамятовал. И вроде, в названии Бейсика не было слова "Вильнюс". И "дисковый" не было. "УК-НЦ" было.
Что делать, если текстовая программа пользователя больше ~24 Кбайт ?
Она у меня 18 кб в формате ASC, а так меньше. Килобайт 13.
Вильнюсский Бейсик не переваривает двоеточия, пришлось все операторы разносить по отдельным строкам, не знаю, увеличивает ли это размер программы в памяти. Файл ASC, конечно, увеличился.
Хотя, когда я учился в институте, по моим воспоминаниям, синтаксические ошибки вылезали в процессе выполнения программы, когда исполнение доходило до строки с ошибкой.
У (классического) интерпретатора именно так и будет
В нём нет экранного редактора.
А не экранный - это как?
Кажется, понял. Экранный редактор - это когда гоняешь курсор по экрану, заводишь его на нужную строку и правишь. А неэкранный - это когда надо вызывать строку на редактирование командой EDIT. Как на Корвете. Так?
Всё так...
В классическом бейсике RT-11 используется для редактирования команда SUB, пережиток телетайпов...
В ВЦ МИТХТ эту команду сменили на строчный редактор, типа как в SL... Хочешь отредактировать строку 70, набираешь SUB 70 и далее стрелками, забоем, по CR завершаешь редактирование.
Как на Корвете не ведаю, никогда не сталкивался....
И дай бог не столкнуться. :)
Вызывается EDIT 70. Но дальше - не стрелками и не забоем, там целая наука. Когда часто пользуешься, привыкаешь, но если редко, быстро забываешь. Порой проще набрать строку заново или, в современных реалиях, если много исправлений, редактировать программу в Windows в текстовом редакторе. Разработчика расстрелять мало!
shapipovo
13.04.2020, 22:22
Это правда, что Бейсик на УКНЦ такой тормознутый?
https://www.youtube.com/watch?v=y2HMORkK0P0&list=PLiWLTRSJ9Vmu45gf0sGX2LNgv9p7xO60K&index=22
Это фактически сравнение скорости одной операции - заливки. У корвета она очень-очень быстрая.
В детстве немного ходил в кружок с УКНЦ. Бейсик там в среднем по больнице довольно шустрый.
LeoN65816
14.04.2020, 11:53
shapipovo, в данном примере (заливка экрана) УКНЦ приходится "лопатить" все 96 КиБ видеопамяти (3 цветовых слоя по 32 КиБ). А у Корвета ГЗУ составляет 48 КиБ, то есть уже в два раза меньше. Более того, в Корвете при заливке используется так называемый "цветовой" режим (а не "послойный/плоскостной"), и при записи цвета в видеопамять он автоматически/аппаратно пишется во все три цветовых плоскости, то есть обрабатывается всего-то 16 КиБ. То есть в случае заливки объём записи различается в 6 раз. И еще используется аппаратная фича при детектировании границы заливки (чтение цвета текущих точек в цветовом, а не послойном режиме), то есть не поточечно, а группами по 8 горизонтальных точек.
УКНЦ приходится "лопатить" все 96 КиБ видеопамяти
Разве в данном случае УКНЦ "трогает" не 640*288/8/1024*3=67.5 Кб?
LeoN65816
14.04.2020, 12:18
Согласен.
Это правда, что Бейсик на УКНЦ такой тормознутый?
https://www.youtube.com/watch?v=y2HMORkK0P0&list=PLiWLTRSJ9Vmu45gf0sGX2LNgv9p7xO60K&index=22
Сам Бейсик на УКНЦ довольно шустрый. А вот реализация графики в ПП не очень быстрая. Бейсик не имеет доступа к видеопамяти, и для графики пользуется Esc-последовательностями, которые отрабатывает драйвер графического терминала. Например, чтобы отобразить точку, надо подать команду на цвет <Esc>ML@@3, подать команду на отображение точки <Esc>UH!ao@M. Драйвер в ПП это должен принять, расшифровать, отобразить. Поэтому всё это не быстро. Относительно быстро работает рисование вектора и закрашенной прямоугольной области. Для заливки тоже есть команда, но сделана она неоптимально, потому медленно и работает.
А стандартный Бейсик RT-11 не пробовали?
А Турбо-Бейсик УК-НЦшный под RT-11 не пробовали?
А Турбо-Бейсик УК-НЦшный под RT-11 не пробовали?
Пробовал. Окружность нарисовалась быстро, а вот заливка медленно.
а вот заливка медленно.
заливка у УК-НЦ везде медленная )
В подгружаемых модулях графических видимо теми же ESC послед. пользуются
10 SCREEN 2
20 C=INT(RND(1)*3+5)
30 X=INT(RND(C)*305)
40 Y=INT(RND(C)*115)
50 LINE (X,Y)-(X+30,Y+20),C,BF
60 XR=640-X
70 LINE (XR,Y)-(XR+30,Y+20),C,BF
80 YU=240-Y
90 LINE (X,YU)-(X+30,YU+20),C,BF
100 LINE (XR,YU)-(XR+30,YU+20),C,BF
110 GOTO 20
https://pic.maxiol.com/thumbs2/1586898475.787615648.20200414205434047.png (https://pic.maxiol.com/?v=1586898475.787615648.20200414205434047.png&dp=2)
shapipovo
27.04.2020, 10:43
Эта программа выполняется на УКНЦ за 4мин.10сек, на Форманте (Корвет) ПК 8020 за 10мин.40сек. Довольно быстрый Бейсик.
SuperMax
27.04.2020, 10:59
Эта программа выполняется на УКНЦ за 4мин.10сек, на Форманте (Корвет) ПК 8020 за 10мин.40сек. Довольно быстрый Бейсик.
вычислительные возможности УКНЦ бейсика всегда были на высоте - я помню сравнивали с МС 1502 (XT в корпусе УКНЦ), последний отстал даже от БК11М не говоря о УКНЦ, где разница была уже в разы.
(как сравнивали - честно не помню, толи факториалы считали толи число ПИ)
shapipovo, набил в эмуляторе, симпатично, там коэффициенты надо менять, у Бейсика на УК-НЦ 0,0 в нижнем углу )))
https://pic.maxiol.com/thumbs2/1588008300.787615648.20200427201830.jpg (https://pic.maxiol.com/?v=1588008300.787615648.20200427201830.jpg&dp=2)
вычислительные возможности УКНЦ бейсика всегда были на высоте - я помню сравнивали с МС 1502 (XT в корпусе УКНЦ), последний отстал даже от БК11М не говоря о УКНЦ, где разница была уже в разы.
Для IBM PC/XT много бейсиков и при желании можно найти медленный, но был и quick basic, который явно был быстрее и БКшного и УКНЦшного.
SuperMax
27.04.2020, 21:01
Для IBM PC/XT много бейсиков и при желании можно найти медленный, но был и quick basic, который явно был быстрее и БКшного и УКНЦшного.
не могу сказать точно сколько бейсиков опробовали владельцы МС 1502 и Поиска (я вспомнил, что он тоже участвовал в тесте)
но я не случайного говорю, что задача была вычислительная ибо тут как раз сильно видно преимущество 16ти разрядных машин.
собственно можно же повторить ? то было в 93ем, сейчас 2020й ;-)
TomaTLAB
28.04.2020, 01:17
но был и quick basic, который был компилятором. И либо тащил за собой свои оверлеи, либо линковал их в неприличного размера экзешник.
На реале, к сожалению, проверить не могу, попробовал в эмуляторах (pce-ibmpc (http://www.hampa.ch/pce/pce-ibmpc.html) и emu (http://bashkiria-2m.narod.ru/)). В конфиге pce-ibmpc проц 8088 с частотой соответствующей 4.77. В emu конфиг Поиска. Не думаю, что это очень точные по скорости эмуляторы, но некое представление составить можно. Quick Basic 4.5, генерировал стэндэлон exe (34 килобайта, т.е. запустится на любой PC). pce-ibmpc - 3:10; emu - 3:15.
Прочитал, что для УКНЦ есть Турбо Бейсик, интересно быстродействие откомпилированной им программы.
УКНЦ есть Турбо Бейсик
одно время даже хотели с сотоварищами в отдельную тему его вытащить, но большого интереса к нему проявлено не было.
http://hobot.pdp-11.ru/ukdwk_archive/ukncbtlwebcomplekt/NC_turboBAS_uknc/
- - - Добавлено - - -
УК-НЦшный .ASC - что бы можно было "перетащить" и запустить на БК0010-01 Вильнюс-Бейсике например.
10 SCREEN 2
11 FA=3.333
20 FOR X=-20 TO 130 STEP 5
30 FOR Y=0 TO 200
40 GOSUB 120
50 NY=Y-X*.5+80
51 NZ=Z+X*0.6+80
60 LINE(NY,NZ)-(NY,199),0
70 IF Y=0 THEN PSET(NY,NZ) ELSE LINE(PY,PZ)-(NY,NZ)
80 PY=NY
81 PZ=NZ
90 NEXT Y
100 NEXT X
110 GOTO 110
120 REM FUNCTION
130 Z=Y*.1
131 XT=X*.1
132 YT=(Y+120)*.06
140 IF XT<0 OR XT>10 THEN RETURN
150 IF XT<-FA*(YT-10)+10 OR XT<FA*(YT-10)-16.66666 THEN RETURN
160 IF XT<-FA*(YT-10)+16.66666 OR XT<FA*(YT-10)-10 OR (XT>6 AND XT<8) THEN Z=-20
170 RETURN
картинка тут > https://zx-pk.ru/threads/31557-bejsik-na-uknts.html?p=1059962&viewfull=1#post1059962
В UKNCBTL Турбо Бейсик нарисовал за 1:50
В UKNCBTL Турбо Бейсик нарисовал за 1:50 меня в этом бейсике скорость компиляции радует,
вы бы скриншотик сделали из турбо картинку? конечно - честно надо турбо на реале запускать )
shapipovo
29.04.2020, 03:56
В строке 51 ошибка. Должно быть 60
вы бы скриншотик сделали из турбо картинку?
Картинка не отличается от этой (https://zx-pk.ru/threads/31557-bejsik-na-uknts.html?p=1059962&viewfull=1#post1059962), только без текста программы на фоне.
В строке 51 ошибка. Должно быть 60
Это не ошибка, это повлияло только на положение картинки на экране (смещение по Y)
- - - Добавлено - - -
Для PC нашел вариант получше. POWER BASIC 3.5 с опцией Floating point: Procedure отрабатывает в emu в конфиге Poisk за 2:12. Размер стэндэлон EXE - 32.7 Кб. Для полноты картины другие опции:
Floating point: Emulation - 3:24, EXE - 25.0 Кб
Floating point: NPX ('87) - не работает на поиске, т.к. нет 8087, EXE - 16.3 Кб
совершенно не понимаю, отчего DECовский системный бейсик не кушает такую строку
11 FA=3.333
ПИШЕТ СИНТАКСИЧЕСКУЮ ОШИБКУ
ставил ему LET - та же история...пытаюсь под граф. КГД бас адаптировать данный листинг и в эмуляторе прогнать, но эта BASG - системный,
скотина ругается вообще на всё вполне легальное !!! Как его победить?
текущий листинг такой
1 INIT(0%,0%) \ STYLE(-1%)
11 LET FA=3.333
20 FOR X=-20 TO 130 STEP 5
30 FOR Y=0 TO 200
40 GOSUB 120
50 NY=Y-X*.5+80
51 NZ=Z+X*0.6+80
60 LINE(NY,NZ)-(NY,199)
61 INIT(1%,0%)
70 IF Y=0 THEN PSET(NY,NZ) ELSE LINE(PY,PZ)-(NY,NZ)
80 PY=NY
81 PZ=NZ
90 NEXT Y
100 NEXT X
110 GOTO 110
120 REM FUNCTION
130 Z=Y*.1
131 XT=X*.1
132 YT=(Y+120)*.06
140 IF XT<0 OR XT>10 THEN RETURN
150 IF XT<-FA*(YT-10)+10 OR XT<FA*(YT-10)-16.66666 THEN RETURN
160 IF XT<-FA*(YT-10)+16.66666 OR XT<FA*(YT-10)-10 OR (XT>6 AND XT<8) THEN Z=-20
170 RETURN
1 INIT(0%,0%) \ STYLE(-1%)
11 LET FA=3.333
20 FOR X=-20 TO 130 STEP 5
30 FOR Y=0 TO 200
40 GOSUB 120
50 NY=Y-X*.5+80
51 NZ=Z+X*0.6+80
60 LINE(NY,NZ)-(NY,199)
61 INIT(1%,0%)
70 IF Y=0 THEN PSET(NY,NZ) ELSE LINE(PY,PZ)-(NY,NZ)
80 PY=NY
81 PZ=NZ
90 NEXT Y
100 NEXT X
110 GOTO 110
120 REM FUNCTION
130 Z=Y*.1
131 XT=X*.1
132 YT=(Y+120)*.06
140 IF XT<0 OR XT>10 THEN RETURN
150 IF XT<-FA*(YT-10)+10 OR XT<FA*(YT-10)-16.66666 THEN RETURN
160 IF XT<-FA*(YT-10)+16.66666 OR XT<FA*(YT-10)-10 OR (XT>6 AND XT<8) THEN Z=-20
170 RETURN
ПИШЕТ СИНТАКСИЧЕСКУЮ ОШИБКУИз описания этого Бейсика (документ 2/Б/4.072.207-35 (РАФОС))
3.2.1 Вещественные переменные.
Вещественная переменная обозначается одной буквой или буквой, за которой следует одна цифра Двлее идет про целые переменные - то же, что и с вещественными, но с последующим знаком "%" и про строковые (с "$" в конце). Ну, и в обозначении переменной FA A не является цифрой. :) Так, что неудивительно, что Бейсик такого не понимает.
И ещё, в стандартном бейсике от DEC нет графических операторов. В принципе при генерации можно было либо доставить дополнительные подпрограммы(это штатный метод), но тогда обращение было бы что-то вроде:
55 CALL LLINE(X1,Y1,X2,Y2,D)
Видел такое на для новосибирской графической платы и для КГД.
Или переработать уж очень сильно дистрибутив :) Такого я не видел, но в теории можно. Максимум что видел, подмена команды SUB на строчный редактор.
Для УКНЦ - можно и без графических операторов обойтись.
Собирать в строковые переменные ESC последовательности и отправлять оператором PRINT :)
Хотя интересно, команды выполняемые ПП переданные такими последовательностями,они на УКНЦ свои или передраны с какого-нибудь графического терминала??? Если передраны, то можно поискать какое-нибудь забугорное п/о :)
Есть ещё в природе бейсик плюс от DEC, но версию под RT11 не видел. Видел под RSX-11 и ПРОС. Отличался в основном матричными операторами. По поводу под ПРОС, я его только со стороны видел, руками не щупал.
Для УКНЦ - можно и без графических операторов обойтись.
Собирать в строковые переменные ESC последовательности и отправлять оператором PRINT :)
не наглядно, исходники есть Vilnus Basic, почему не сделать по-человечески. Хотя может уже и сделано?
Перенести для вызовов CALL в бэйсик DEC - не сложно :)
Но выгоды однозначной не будет. С одной стороны первый жирный минус - не будет экранного редактора :(
И вроде как я слышал, что байсик вильнюсский быстрее работает...
Из плюсов - появятся возможности типа: нескольких операторов в одной строке, файлы с прямым доступом, передача управления другой бейсиковской программе и прочие плюсы.
Конечно можно текст программы править в редакторе, а на отладку/выполнение в интерпретатор. Часть народа так и делали.
И ещё, в стандартном бейсике от DEC нет графических операторов.
https://zx-pk.ru/threads/17417-basic-dvk.html
1 INIT(1%,0%) \ STYLE(-1%)
2 R%=RND*44+2
3 X%=RND*300+50
4 Y%=RND*200+50
6 I=I+1
7 IF INT(I/2)*2=I THEN 17
9 FOR J%=R% TO 2% STEP -2%
11 CIRCLE(J%,X%,Y%)
15 NEXT J%
16 GO TO 20
17 FOR J%=2% TO R% STEP 2% \ CIRCLE(J%,X%,Y%) \ NEXT J%
20 IF I=77 THEN I=1 \ GO TO 55
22 GO TO 2
55 INIT(0%,0%)
66 GO TO 1
https://zx-pk.ru/threads/17417-basic-dvk.html?p=759123&viewfull=1#post759123
и есть похоже для КГД и такое
https://zx-pk.ru/threads/17417-basic-dvk.html?p=756106&viewfull=1#post756106
предлагаю эти ссылки и любые другие по теме добавить в шапку?
https://zx-pk.ru/threads/17417-basic-dvk.html
https://zx-pk.ru/threads/20251-grafika-v-bejsike-na-uknts.html
https://zx-pk.ru/threads/29650-tekstovye-redaktory-dlya-uknts.html
https://zx-pk.ru/threads/13568-diskety-s-softom-dlya-uknts.html
https://zx-pk.ru/threads/20437-nastrojka-monitora-uk-nts-(grafika).html
http://hobot.pdp-11.ru/ukdwk_archive/ukncbtlwebcomplekt/BASE_system_UKNC/
:redface:
Вижу в теме упоминания о Турбо-Бейсике с компилятором. Возможно ли таковой добыть и запустить в эмуляторе УКНЦ?
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot